# 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 ComputeV1
      
      # Contains the configurations necessary to generate a signature for access to
      # private storage buckets that support Signature Version 4 for authentication.
      # The service name for generating the authentication header will always default
      # to 's3'.
      class Awsv4Signature
        include Google::Apis::Core::Hashable
      
        # The access key used for s3 bucket authentication. Required for updating or
        # creating a backend that uses AWS v4 signature authentication, but will not
        # be returned as part of the configuration when queried with a REST API GET
        # request.
        # @InputOnly
        # Corresponds to the JSON property `accessKey`
        # @return [String]
        attr_accessor :access_key
      
        # The identifier of an access key used for s3 bucket authentication.
        # Corresponds to the JSON property `accessKeyId`
        # @return [String]
        attr_accessor :access_key_id
      
        # The optional version identifier for the access key. You can use this to
        # keep track of different iterations of your access key.
        # Corresponds to the JSON property `accessKeyVersion`
        # @return [String]
        attr_accessor :access_key_version
      
        # The name of the cloud region of your origin. This is a free-form field with
        # the name of the region your cloud uses to host your origin.  For example,
        # "us-east-1" for AWS or "us-ashburn-1" for OCI.
        # Corresponds to the JSON property `originRegion`
        # @return [String]
        attr_accessor :origin_region
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @access_key = args[:access_key] if args.key?(:access_key)
          @access_key_id = args[:access_key_id] if args.key?(:access_key_id)
          @access_key_version = args[:access_key_version] if args.key?(:access_key_version)
          @origin_region = args[:origin_region] if args.key?(:origin_region)
        end
      end
      
      # A specification of the type and number of accelerator cards attached to the
      # instance.
      class AcceleratorConfig
        include Google::Apis::Core::Hashable
      
        # The number of the guest accelerator cards exposed to this instance.
        # Corresponds to the JSON property `acceleratorCount`
        # @return [Fixnum]
        attr_accessor :accelerator_count
      
        # Full or partial URL of the accelerator type resource to attach to this
        # instance. For example:projects/my-project/zones/us-central1-c/acceleratorTypes/
        # nvidia-tesla-p100
        # If you are creating an instance template, specify only the
        # accelerator name.
        # See GPUs on Compute Engine
        # for a full list of accelerator types.
        # Corresponds to the JSON property `acceleratorType`
        # @return [String]
        attr_accessor :accelerator_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @accelerator_count = args[:accelerator_count] if args.key?(:accelerator_count)
          @accelerator_type = args[:accelerator_type] if args.key?(:accelerator_type)
        end
      end
      
      # Info for accelerator topologies within a densely packed reservation.
      class AcceleratorTopologiesInfo
        include Google::Apis::Core::Hashable
      
        # Info for each accelerator topology.
        # Corresponds to the JSON property `acceleratorTopologyInfos`
        # @return [Array<Google::Apis::ComputeV1::AcceleratorTopologiesInfoAcceleratorTopologyInfo>]
        attr_accessor :accelerator_topology_infos
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @accelerator_topology_infos = args[:accelerator_topology_infos] if args.key?(:accelerator_topology_infos)
        end
      end
      
      # Info for a slice of a given topology.
      class AcceleratorTopologiesInfoAcceleratorTopologyInfo
        include Google::Apis::Core::Hashable
      
        # The accelerator topology.
        # Corresponds to the JSON property `acceleratorTopology`
        # @return [String]
        attr_accessor :accelerator_topology
      
        # Info for each topology state.
        # Corresponds to the JSON property `infoPerTopologyStates`
        # @return [Array<Google::Apis::ComputeV1::AcceleratorTopologiesInfoAcceleratorTopologyInfoInfoPerTopologyState>]
        attr_accessor :info_per_topology_states
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @accelerator_topology = args[:accelerator_topology] if args.key?(:accelerator_topology)
          @info_per_topology_states = args[:info_per_topology_states] if args.key?(:info_per_topology_states)
        end
      end
      
      # Info for each topology state.
      class AcceleratorTopologiesInfoAcceleratorTopologyInfoInfoPerTopologyState
        include Google::Apis::Core::Hashable
      
        # The number of accelerator topologies in this state.
        # Corresponds to the JSON property `count`
        # @return [Fixnum]
        attr_accessor :count
      
        # The state of the accelerator topology.
        # 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)
          @count = args[:count] if args.key?(:count)
          @state = args[:state] if args.key?(:state)
        end
      end
      
      # Represents an Accelerator Type resource.
      # Google Cloud Platform provides graphics processing units (accelerators) that
      # you can add to VM instances to improve or accelerate performance when working
      # with intensive workloads. For more information, readGPUs on Compute Engine.
      class AcceleratorType
        include Google::Apis::Core::Hashable
      
        # [Output Only] Creation timestamp inRFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Deprecation status for a public resource.
        # Corresponds to the JSON property `deprecated`
        # @return [Google::Apis::ComputeV1::DeprecationStatus]
        attr_accessor :deprecated
      
        # [Output Only] An optional textual description of the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] The type of the resource. Alwayscompute#
        # acceleratorType for accelerator types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] Maximum number of accelerator cards allowed per instance.
        # Corresponds to the JSON property `maximumCardsPerInstance`
        # @return [Fixnum]
        attr_accessor :maximum_cards_per_instance
      
        # [Output Only] Name of the resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] Server-defined, fully qualified URL for this
        # resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] The name of the zone where the accelerator type resides,
        # such as us-central1-a.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @deprecated = args[:deprecated] if args.key?(:deprecated)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @maximum_cards_per_instance = args[:maximum_cards_per_instance] if args.key?(:maximum_cards_per_instance)
          @name = args[:name] if args.key?(:name)
          @self_link = args[:self_link] if args.key?(:self_link)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class AcceleratorTypeAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of AcceleratorTypesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::AcceleratorTypesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # acceleratorTypeAggregatedList for aggregated lists of
        # accelerator types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::AcceleratorTypeAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::AcceleratorTypeAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of accelerator types.
      class AcceleratorTypeList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of AcceleratorType resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::AcceleratorType>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#acceleratorTypeList
        # for lists of accelerator types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::AcceleratorTypeList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::AcceleratorTypeList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class AcceleratorTypesScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of accelerator types contained in this scope.
        # Corresponds to the JSON property `acceleratorTypes`
        # @return [Array<Google::Apis::ComputeV1::AcceleratorType>]
        attr_accessor :accelerator_types
      
        # [Output Only] An informational warning that appears when the accelerator
        # types list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::AcceleratorTypesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @accelerator_types = args[:accelerator_types] if args.key?(:accelerator_types)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] An informational warning that appears when the accelerator
        # types list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::AcceleratorTypesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # An access configuration attached to an instance's network interface.
      # Only one access config per instance is supported.
      class AccessConfig
        include Google::Apis::Core::Hashable
      
        # Applies to ipv6AccessConfigs only.
        # The first IPv6 address of the external IPv6 range associated
        # with this instance, prefix length is stored inexternalIpv6PrefixLength in
        # ipv6AccessConfig. To
        # use a static external IP address, it must be unused and in the same region
        # as the instance's zone. If not specified, Google Cloud will automatically
        # assign an external IPv6 address from the instance's subnetwork.
        # Corresponds to the JSON property `externalIpv6`
        # @return [String]
        attr_accessor :external_ipv6
      
        # Applies to ipv6AccessConfigs only. The prefix length of the
        # external IPv6 range.
        # Corresponds to the JSON property `externalIpv6PrefixLength`
        # @return [Fixnum]
        attr_accessor :external_ipv6_prefix_length
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#accessConfig
        # for access configs.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The name of this access configuration. In accessConfigs
        # (IPv4), the default and recommended name is External NAT, but
        # you can use any arbitrary string, such as My external IP orNetwork Access. In
        # ipv6AccessConfigs, the
        # recommend name is External IPv6.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Applies to accessConfigs (IPv4) only. Anexternal IP
        # address associated with this instance. Specify an unused static
        # external IP address available to the project or leave this field undefined
        # to use an IP from a shared ephemeral IP address pool. If you specify a
        # static external IP address, it must live in the same region as the zone of
        # the instance.
        # Corresponds to the JSON property `natIP`
        # @return [String]
        attr_accessor :nat_ip
      
        # This signifies the networking tier used for configuring this access
        # configuration and can only take the following values: PREMIUM,STANDARD.
        # If an AccessConfig is specified without a valid external IP address, an
        # ephemeral IP will be created with this networkTier.
        # If an AccessConfig with a valid external IP address is specified, it must
        # match that of the networkTier associated with the Address resource owning
        # that IP.
        # Corresponds to the JSON property `networkTier`
        # @return [String]
        attr_accessor :network_tier
      
        # The DNS domain name for the public PTR record.
        # You can set this field only if the `setPublicPtr` field is enabled
        # inaccessConfig. If this field is unspecified inipv6AccessConfig, a default PTR
        # record will be created for
        # first IP in associated external IPv6 range.
        # Corresponds to the JSON property `publicPtrDomainName`
        # @return [String]
        attr_accessor :public_ptr_domain_name
      
        # The resource URL for the security policy associated with this access
        # config.
        # Corresponds to the JSON property `securityPolicy`
        # @return [String]
        attr_accessor :security_policy
      
        # Specifies whether a public DNS 'PTR' record should be created to map the
        # external IP address of the instance to a DNS domain name.
        # This field is not used in ipv6AccessConfig. A default PTR
        # record will be created if the VM has external IPv6 range associated.
        # Corresponds to the JSON property `setPublicPtr`
        # @return [Boolean]
        attr_accessor :set_public_ptr
        alias_method :set_public_ptr?, :set_public_ptr
      
        # The type of configuration. In accessConfigs (IPv4), the
        # default and only option is ONE_TO_ONE_NAT. Inipv6AccessConfigs, the default
        # and only option isDIRECT_IPV6.
        # 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)
          @external_ipv6 = args[:external_ipv6] if args.key?(:external_ipv6)
          @external_ipv6_prefix_length = args[:external_ipv6_prefix_length] if args.key?(:external_ipv6_prefix_length)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @nat_ip = args[:nat_ip] if args.key?(:nat_ip)
          @network_tier = args[:network_tier] if args.key?(:network_tier)
          @public_ptr_domain_name = args[:public_ptr_domain_name] if args.key?(:public_ptr_domain_name)
          @security_policy = args[:security_policy] if args.key?(:security_policy)
          @set_public_ptr = args[:set_public_ptr] if args.key?(:set_public_ptr)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # Represents an IP Address resource.
      # Google Compute Engine has two IP Address resources:
      # * [Global (external and
      # internal)](https://cloud.google.com/compute/docs/reference/rest/v1/
      # globalAddresses)
      # * [Regional (external and
      # internal)](https://cloud.google.com/compute/docs/reference/rest/v1/addresses)
      # For more information, see
      # Reserving a static external IP address.
      class Address
        include Google::Apis::Core::Hashable
      
        # The static IP address represented by this resource.
        # Corresponds to the JSON property `address`
        # @return [String]
        attr_accessor :address
      
        # The type of address to reserve, either INTERNAL orEXTERNAL. If unspecified,
        # defaults to EXTERNAL.
        # Corresponds to the JSON property `addressType`
        # @return [String]
        attr_accessor :address_type
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this field when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Reference to the source of external IPv4 addresses,
        # like a PublicDelegatedPrefix (PDP) for BYOIP.
        # The PDP must support enhanced IPv4 allocations.
        # Use one of the following formats to specify a PDP when reserving an
        # external IPv4 address using BYOIP.
        # 
        # -
        # Full resource URL, as inhttps://www.googleapis.com/compute/v1/projects/
        # projectId/regions/region/publicDelegatedPrefixes/pdp-name
        # -
        # Partial URL, as in
        # 
        # 
        # - projects/projectId/regions/region/publicDelegatedPrefixes/pdp-name
        # - regions/region/publicDelegatedPrefixes/pdp-name
        # Corresponds to the JSON property `ipCollection`
        # @return [String]
        attr_accessor :ip_collection
      
        # The IP version that will be used by this address. Valid options areIPV4 or
        # IPV6.
        # Corresponds to the JSON property `ipVersion`
        # @return [String]
        attr_accessor :ip_version
      
        # The endpoint type of this address, which should be VM
        # or NETLB. This is used for deciding which type of endpoint
        # this address can be used after the external IPv6 address reservation.
        # Corresponds to the JSON property `ipv6EndpointType`
        # @return [String]
        attr_accessor :ipv6_endpoint_type
      
        # Output only. [Output Only] Type of the resource. Always compute#address for
        # addresses.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this Address, which is
        # essentially a hash of the labels set used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve an Address.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels for this resource. These can only be added or modified by thesetLabels
        # method. Each label key/value pair must comply withRFC1035.
        # Label values may be empty.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?`. The first character
        # must be a lowercase letter, and all following characters (except for the
        # last character) must be a dash, lowercase letter, or digit. The last
        # character must be a lowercase letter or digit.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The URL of the network in which to reserve the address. This field can
        # only be used with INTERNAL type with theVPC_PEERING purpose.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # This signifies the networking tier used for configuring this address and
        # can only take the following values: PREMIUM orSTANDARD. Internal IP addresses
        # are always Premium Tier;
        # global external IP addresses are always Premium Tier; regional external IP
        # addresses can be either Standard or Premium Tier.
        # If this field is not specified, it is assumed to be PREMIUM.
        # Corresponds to the JSON property `networkTier`
        # @return [String]
        attr_accessor :network_tier
      
        # The prefix length if the resource represents an IP range.
        # Corresponds to the JSON property `prefixLength`
        # @return [Fixnum]
        attr_accessor :prefix_length
      
        # The purpose of this resource, which can be one of the following values:
        # 
        # 
        # - GCE_ENDPOINT for addresses that are used by VM
        # instances, alias IP ranges, load balancers, and similar resources.
        # - DNS_RESOLVER for a DNS resolver address in a subnetwork
        # for a Cloud DNS  inbound
        # forwarder IP addresses (regional internal IP address in a subnet of
        # a VPC network)
        # - VPC_PEERING for global internal IP addresses used for
        # 
        # private services access allocated ranges.
        # - NAT_AUTO for the regional external IP addresses used by
        # Cloud NAT when allocating addresses using
        # 
        # automatic NAT IP address allocation.
        # - IPSEC_INTERCONNECT for addresses created from a private
        # IP range that are reserved for a VLAN attachment in an
        # *HA VPN over Cloud Interconnect* configuration. These addresses
        # are regional resources.
        # - `SHARED_LOADBALANCER_VIP` for an internal IP address that is assigned
        # to multiple internal forwarding rules.
        # - `PRIVATE_SERVICE_CONNECT` for a private network address that is
        # used to configure Private Service Connect. Only global internal addresses
        # can use this purpose.
        # Corresponds to the JSON property `purpose`
        # @return [String]
        attr_accessor :purpose
      
        # Output only. [Output Only] The URL of the region where a regional address
        # resides.
        # For regional addresses, you must specify the region as a path parameter in
        # the HTTP request URL. *This field is not applicable to global
        # addresses.*
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] The status of the address, which can be one
        # ofRESERVING, RESERVED, or IN_USE.
        # An address that is RESERVING is currently in the process of
        # being reserved. A RESERVED address is currently reserved and
        # available to use. An IN_USE address is currently being used
        # by another resource and is not available.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # The URL of the subnetwork in which to reserve the address. If an IP address
        # is specified, it must be within the subnetwork's IP range. This field can
        # only be used with INTERNAL type with aGCE_ENDPOINT or DNS_RESOLVER purpose.
        # Corresponds to the JSON property `subnetwork`
        # @return [String]
        attr_accessor :subnetwork
      
        # [Output Only] The URLs of the resources that are using this address.
        # Corresponds to the JSON property `users`
        # @return [Array<String>]
        attr_accessor :users
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @address = args[:address] if args.key?(:address)
          @address_type = args[:address_type] if args.key?(:address_type)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @ip_collection = args[:ip_collection] if args.key?(:ip_collection)
          @ip_version = args[:ip_version] if args.key?(:ip_version)
          @ipv6_endpoint_type = args[:ipv6_endpoint_type] if args.key?(:ipv6_endpoint_type)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @network_tier = args[:network_tier] if args.key?(:network_tier)
          @prefix_length = args[:prefix_length] if args.key?(:prefix_length)
          @purpose = args[:purpose] if args.key?(:purpose)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @status = args[:status] if args.key?(:status)
          @subnetwork = args[:subnetwork] if args.key?(:subnetwork)
          @users = args[:users] if args.key?(:users)
        end
      end
      
      # 
      class AddressAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of AddressesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::AddressesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # addressAggregatedList for aggregated lists of
        # addresses.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::AddressAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::AddressAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of addresses.
      class AddressList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Address resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Address>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#addressList for
        # lists of addresses.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::AddressList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::AddressList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class AddressesScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of addresses contained in this scope.
        # Corresponds to the JSON property `addresses`
        # @return [Array<Google::Apis::ComputeV1::Address>]
        attr_accessor :addresses
      
        # [Output Only] Informational warning which replaces the list of addresses
        # when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::AddressesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @addresses = args[:addresses] if args.key?(:addresses)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning which replaces the list of addresses
        # when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::AddressesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Specifies options for controlling advanced machine features.
      # Options that would traditionally be configured in a BIOS belong
      # here. Features that require operating system support may have
      # corresponding entries in the GuestOsFeatures of anImage (e.g., whether or not
      # the OS in theImage supports nested virtualization being enabled or
      # disabled).
      class AdvancedMachineFeatures
        include Google::Apis::Core::Hashable
      
        # Whether to enable nested virtualization or not (default is false).
        # Corresponds to the JSON property `enableNestedVirtualization`
        # @return [Boolean]
        attr_accessor :enable_nested_virtualization
        alias_method :enable_nested_virtualization?, :enable_nested_virtualization
      
        # Whether to enable UEFI networking for instance creation.
        # Corresponds to the JSON property `enableUefiNetworking`
        # @return [Boolean]
        attr_accessor :enable_uefi_networking
        alias_method :enable_uefi_networking?, :enable_uefi_networking
      
        # Type of Performance Monitoring Unit requested on instance.
        # Corresponds to the JSON property `performanceMonitoringUnit`
        # @return [String]
        attr_accessor :performance_monitoring_unit
      
        # The number of threads per physical core. To disable simultaneous
        # multithreading (SMT) set this to 1. If unset, the maximum number
        # of threads supported per core by the underlying processor is
        # assumed.
        # Corresponds to the JSON property `threadsPerCore`
        # @return [Fixnum]
        attr_accessor :threads_per_core
      
        # Turbo frequency mode to use for the instance.
        # Supported modes include:
        # * ALL_CORE_MAX
        # Using empty string or not setting this field will use the platform-specific
        # default turbo mode.
        # Corresponds to the JSON property `turboMode`
        # @return [String]
        attr_accessor :turbo_mode
      
        # The number of physical cores to expose to an instance. Multiply by
        # the number of threads per core to compute the total number of virtual
        # CPUs to expose to the instance. If unset, the number of cores is
        # inferred from the instance's nominal CPU count and the underlying
        # platform's SMT width.
        # Corresponds to the JSON property `visibleCoreCount`
        # @return [Fixnum]
        attr_accessor :visible_core_count
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @enable_nested_virtualization = args[:enable_nested_virtualization] if args.key?(:enable_nested_virtualization)
          @enable_uefi_networking = args[:enable_uefi_networking] if args.key?(:enable_uefi_networking)
          @performance_monitoring_unit = args[:performance_monitoring_unit] if args.key?(:performance_monitoring_unit)
          @threads_per_core = args[:threads_per_core] if args.key?(:threads_per_core)
          @turbo_mode = args[:turbo_mode] if args.key?(:turbo_mode)
          @visible_core_count = args[:visible_core_count] if args.key?(:visible_core_count)
        end
      end
      
      # An alias IP range attached to an instance's network interface.
      class AliasIpRange
        include Google::Apis::Core::Hashable
      
        # The IP alias ranges to allocate for this interface. This IP CIDR range
        # must belong to the specified subnetwork and cannot contain IP addresses
        # reserved by system or used by other network interfaces. This range may be
        # a single IP address (such as 10.2.3.4), a netmask (such as/24) or a CIDR-
        # formatted string (such as10.1.2.0/24).
        # Corresponds to the JSON property `ipCidrRange`
        # @return [String]
        attr_accessor :ip_cidr_range
      
        # The name of a subnetwork secondary IP range from which to allocate an IP
        # alias range. If not specified, the primary range of the subnetwork is used.
        # Corresponds to the JSON property `subnetworkRangeName`
        # @return [String]
        attr_accessor :subnetwork_range_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ip_cidr_range = args[:ip_cidr_range] if args.key?(:ip_cidr_range)
          @subnetwork_range_name = args[:subnetwork_range_name] if args.key?(:subnetwork_range_name)
        end
      end
      
      # This reservation type is specified by total resource amounts (e.g. total
      # count of CPUs) and can account for multiple instance SKUs. In other words,
      # one can create instances of varying shapes against this reservation.
      class AllocationAggregateReservation
        include Google::Apis::Core::Hashable
      
        # Output only. [Output only] List of resources currently in use.
        # Corresponds to the JSON property `inUseResources`
        # @return [Array<Google::Apis::ComputeV1::AllocationAggregateReservationReservedResourceInfo>]
        attr_accessor :in_use_resources
      
        # List of reserved resources (CPUs, memory, accelerators).
        # Corresponds to the JSON property `reservedResources`
        # @return [Array<Google::Apis::ComputeV1::AllocationAggregateReservationReservedResourceInfo>]
        attr_accessor :reserved_resources
      
        # The VM family that all instances scheduled against this reservation must
        # belong to.
        # Corresponds to the JSON property `vmFamily`
        # @return [String]
        attr_accessor :vm_family
      
        # The workload type of the instances that will target this reservation.
        # Corresponds to the JSON property `workloadType`
        # @return [String]
        attr_accessor :workload_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @in_use_resources = args[:in_use_resources] if args.key?(:in_use_resources)
          @reserved_resources = args[:reserved_resources] if args.key?(:reserved_resources)
          @vm_family = args[:vm_family] if args.key?(:vm_family)
          @workload_type = args[:workload_type] if args.key?(:workload_type)
        end
      end
      
      # 
      class AllocationAggregateReservationReservedResourceInfo
        include Google::Apis::Core::Hashable
      
        # Properties of accelerator resources in this reservation.
        # Corresponds to the JSON property `accelerator`
        # @return [Google::Apis::ComputeV1::AllocationAggregateReservationReservedResourceInfoAccelerator]
        attr_accessor :accelerator
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @accelerator = args[:accelerator] if args.key?(:accelerator)
        end
      end
      
      # 
      class AllocationAggregateReservationReservedResourceInfoAccelerator
        include Google::Apis::Core::Hashable
      
        # Number of accelerators of specified type.
        # Corresponds to the JSON property `acceleratorCount`
        # @return [Fixnum]
        attr_accessor :accelerator_count
      
        # Full or partial URL to accelerator type. e.g.
        # "projects/`PROJECT`/zones/`ZONE`/acceleratorTypes/ct4l"
        # Corresponds to the JSON property `acceleratorType`
        # @return [String]
        attr_accessor :accelerator_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @accelerator_count = args[:accelerator_count] if args.key?(:accelerator_count)
          @accelerator_type = args[:accelerator_type] if args.key?(:accelerator_type)
        end
      end
      
      # 
      class AllocationReservationSharingPolicy
        include Google::Apis::Core::Hashable
      
        # Sharing config for all Google Cloud services.
        # Corresponds to the JSON property `serviceShareType`
        # @return [String]
        attr_accessor :service_share_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @service_share_type = args[:service_share_type] if args.key?(:service_share_type)
        end
      end
      
      # [Output Only] Contains output only fields.
      class AllocationResourceStatus
        include Google::Apis::Core::Hashable
      
        # Health information for the reservation.
        # Corresponds to the JSON property `healthInfo`
        # @return [Google::Apis::ComputeV1::AllocationResourceStatusHealthInfo]
        attr_accessor :health_info
      
        # The number of reservation blocks associated with this reservation.
        # Corresponds to the JSON property `reservationBlockCount`
        # @return [Fixnum]
        attr_accessor :reservation_block_count
      
        # Maintenance Info for ReservationBlocks.
        # Corresponds to the JSON property `reservationMaintenance`
        # @return [Google::Apis::ComputeV1::GroupMaintenanceInfo]
        attr_accessor :reservation_maintenance
      
        # Contains Properties set for the reservation.
        # Corresponds to the JSON property `specificSkuAllocation`
        # @return [Google::Apis::ComputeV1::AllocationResourceStatusSpecificSkuAllocation]
        attr_accessor :specific_sku_allocation
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @health_info = args[:health_info] if args.key?(:health_info)
          @reservation_block_count = args[:reservation_block_count] if args.key?(:reservation_block_count)
          @reservation_maintenance = args[:reservation_maintenance] if args.key?(:reservation_maintenance)
          @specific_sku_allocation = args[:specific_sku_allocation] if args.key?(:specific_sku_allocation)
        end
      end
      
      # Health information for the reservation.
      class AllocationResourceStatusHealthInfo
        include Google::Apis::Core::Hashable
      
        # The number of reservation blocks that are degraded.
        # Corresponds to the JSON property `degradedBlockCount`
        # @return [Fixnum]
        attr_accessor :degraded_block_count
      
        # The health status of the reservation.
        # Corresponds to the JSON property `healthStatus`
        # @return [String]
        attr_accessor :health_status
      
        # The number of reservation blocks that are healthy.
        # Corresponds to the JSON property `healthyBlockCount`
        # @return [Fixnum]
        attr_accessor :healthy_block_count
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @degraded_block_count = args[:degraded_block_count] if args.key?(:degraded_block_count)
          @health_status = args[:health_status] if args.key?(:health_status)
          @healthy_block_count = args[:healthy_block_count] if args.key?(:healthy_block_count)
        end
      end
      
      # Contains Properties set for the reservation.
      class AllocationResourceStatusSpecificSkuAllocation
        include Google::Apis::Core::Hashable
      
        # ID of the instance template used to populate reservation properties.
        # Corresponds to the JSON property `sourceInstanceTemplateId`
        # @return [String]
        attr_accessor :source_instance_template_id
      
        # Per service utilization breakdown. The Key is the Google Cloud managed
        # service name.
        # Corresponds to the JSON property `utilizations`
        # @return [Hash<String,Fixnum>]
        attr_accessor :utilizations
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @source_instance_template_id = args[:source_instance_template_id] if args.key?(:source_instance_template_id)
          @utilizations = args[:utilizations] if args.key?(:utilizations)
        end
      end
      
      # 
      class AllocationSpecificSkuAllocationAllocatedInstancePropertiesReservedDisk
        include Google::Apis::Core::Hashable
      
        # Specifies the size of the disk in base-2 GB.
        # Corresponds to the JSON property `diskSizeGb`
        # @return [Fixnum]
        attr_accessor :disk_size_gb
      
        # Specifies the disk interface to use for attaching this disk, which is
        # either SCSI or NVME. The default isSCSI.
        # For performance characteristics of SCSI over NVMe, seeLocal SSD performance.
        # Corresponds to the JSON property `interface`
        # @return [String]
        attr_accessor :interface
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disk_size_gb = args[:disk_size_gb] if args.key?(:disk_size_gb)
          @interface = args[:interface] if args.key?(:interface)
        end
      end
      
      # Properties of the SKU instances being reserved.
      # Next ID: 9
      class AllocationSpecificSkuAllocationReservedInstanceProperties
        include Google::Apis::Core::Hashable
      
        # Specifies accelerator type and count.
        # Corresponds to the JSON property `guestAccelerators`
        # @return [Array<Google::Apis::ComputeV1::AcceleratorConfig>]
        attr_accessor :guest_accelerators
      
        # Specifies amount of local ssd to reserve with each instance. The type
        # of disk is local-ssd.
        # Corresponds to the JSON property `localSsds`
        # @return [Array<Google::Apis::ComputeV1::AllocationSpecificSkuAllocationAllocatedInstancePropertiesReservedDisk>]
        attr_accessor :local_ssds
      
        # An opaque location hint used to place the allocation close to other
        # resources.
        # This field is for use by internal tools that use the public API.
        # Corresponds to the JSON property `locationHint`
        # @return [String]
        attr_accessor :location_hint
      
        # Specifies type of machine (name only) which has fixed number of vCPUs
        # and fixed amount of memory. This also includes specifying custom
        # machine type following custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY pattern.
        # Corresponds to the JSON property `machineType`
        # @return [String]
        attr_accessor :machine_type
      
        # Minimum cpu platform the reservation.
        # Corresponds to the JSON property `minCpuPlatform`
        # @return [String]
        attr_accessor :min_cpu_platform
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @guest_accelerators = args[:guest_accelerators] if args.key?(:guest_accelerators)
          @local_ssds = args[:local_ssds] if args.key?(:local_ssds)
          @location_hint = args[:location_hint] if args.key?(:location_hint)
          @machine_type = args[:machine_type] if args.key?(:machine_type)
          @min_cpu_platform = args[:min_cpu_platform] if args.key?(:min_cpu_platform)
        end
      end
      
      # This reservation type allows to pre allocate specific instance
      # configuration.
      class AllocationSpecificSkuReservation
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Indicates how many instances are actually usable
        # currently.
        # Corresponds to the JSON property `assuredCount`
        # @return [Fixnum]
        attr_accessor :assured_count
      
        # Specifies the number of resources that are allocated.
        # Corresponds to the JSON property `count`
        # @return [Fixnum]
        attr_accessor :count
      
        # Output only. [Output Only] Indicates how many instances are in use.
        # Corresponds to the JSON property `inUseCount`
        # @return [Fixnum]
        attr_accessor :in_use_count
      
        # Properties of the SKU instances being reserved.
        # Next ID: 9
        # Corresponds to the JSON property `instanceProperties`
        # @return [Google::Apis::ComputeV1::AllocationSpecificSkuAllocationReservedInstanceProperties]
        attr_accessor :instance_properties
      
        # Specifies the instance template to create the reservation. If you use
        # this field, you must exclude the instanceProperties field.
        # This field is optional, and it can be a full or partial URL. For example,
        # the following are all valid URLs to an instance template:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/global/
        # instanceTemplates/instanceTemplate
        # - projects/project/global/instanceTemplates/instanceTemplate
        # - global/instanceTemplates/instanceTemplate
        # Corresponds to the JSON property `sourceInstanceTemplate`
        # @return [String]
        attr_accessor :source_instance_template
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @assured_count = args[:assured_count] if args.key?(:assured_count)
          @count = args[:count] if args.key?(:count)
          @in_use_count = args[:in_use_count] if args.key?(:in_use_count)
          @instance_properties = args[:instance_properties] if args.key?(:instance_properties)
          @source_instance_template = args[:source_instance_template] if args.key?(:source_instance_template)
        end
      end
      
      # An instance-attached disk resource.
      class AttachedDisk
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The architecture of the attached disk. Valid values
        # are ARM64
        # or X86_64.
        # Corresponds to the JSON property `architecture`
        # @return [String]
        attr_accessor :architecture
      
        # Specifies whether the disk will be auto-deleted when the instance is
        # deleted (but not when the disk is detached from the instance).
        # Corresponds to the JSON property `autoDelete`
        # @return [Boolean]
        attr_accessor :auto_delete
        alias_method :auto_delete?, :auto_delete
      
        # Indicates that this is a boot disk. The virtual machine will use the first
        # partition of the disk for its root filesystem.
        # Corresponds to the JSON property `boot`
        # @return [Boolean]
        attr_accessor :boot
        alias_method :boot?, :boot
      
        # Specifies a unique device name of your choice that is reflected into the/dev/
        # disk/by-id/google-* tree of a Linux operating system
        # running within the instance. This name can be used to reference the device
        # for mounting, resizing, and so on, from within the instance.
        # If not specified, the server chooses a default device name to apply to this
        # disk, in the form persistent-disk-x, where x is a number
        # assigned by Google Compute Engine. This field is only applicable for
        # persistent disks.
        # Corresponds to the JSON property `deviceName`
        # @return [String]
        attr_accessor :device_name
      
        # Encrypts or decrypts a disk using acustomer-supplied
        # encryption key.
        # If you are creating a new disk, this field encrypts the new disk using
        # an encryption key that you provide. If you are attaching an existing
        # disk that is already encrypted, this field decrypts the disk using
        # the customer-supplied encryption key.
        # If you encrypt a disk using a customer-supplied key, you must provide the
        # same key again when you attempt to use this resource at a later time. For
        # example, you must provide the key when you create a snapshot or an image
        # from the disk or when you attach the disk to a virtual machine instance.
        # If you do not provide an encryption key, then the disk will be encrypted
        # using an automatically generated key and you do not need to provide a key
        # to use the disk later.
        # Note:
        # Instance templates do not storecustomer-supplied
        # encryption keys, so you cannot use your own keys to encrypt disks in amanaged
        # instance group.
        # You cannot create VMs that have disks with customer-supplied keys using
        # the bulk
        # insert method.
        # Corresponds to the JSON property `diskEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :disk_encryption_key
      
        # The size of the disk in GB.
        # Corresponds to the JSON property `diskSizeGb`
        # @return [Fixnum]
        attr_accessor :disk_size_gb
      
        # [Input Only] Whether to force attach the regional disk even if it's
        # currently attached to another instance. If you try to force attach a zonal
        # disk to an instance, you will receive an error.
        # Corresponds to the JSON property `forceAttach`
        # @return [Boolean]
        attr_accessor :force_attach
        alias_method :force_attach?, :force_attach
      
        # A list of features to enable on the guest operating system. Applicable
        # only for bootable images. Read
        # Enabling guest operating system features to see a list of available
        # options.
        # Corresponds to the JSON property `guestOsFeatures`
        # @return [Array<Google::Apis::ComputeV1::GuestOsFeature>]
        attr_accessor :guest_os_features
      
        # Output only. [Output Only] A zero-based index to this disk, where 0 is
        # reserved for the
        # boot disk. If you have many disks attached to an instance, each
        # disk would have a unique index number.
        # Corresponds to the JSON property `index`
        # @return [Fixnum]
        attr_accessor :index
      
        # [Input Only] Specifies the parameters for a new disk that will be created
        # alongside the new instance. Use initialization parameters to create boot
        # disks or local SSDs attached to the new instance.
        # This field is persisted and returned for instanceTemplate and not returned
        # in the context of instance.
        # This property is mutually exclusive with the source property;
        # you can only define one or the other, but not both.
        # Corresponds to the JSON property `initializeParams`
        # @return [Google::Apis::ComputeV1::AttachedDiskInitializeParams]
        attr_accessor :initialize_params
      
        # Specifies the disk interface to use for attaching this disk, which is
        # either SCSI or NVME. For most machine types, the
        # default is SCSI. Local SSDs can use either NVME or SCSI.
        # In certain configurations, persistent disks can use NVMe. For more
        # information, seeAbout
        # persistent disks.
        # Corresponds to the JSON property `interface`
        # @return [String]
        attr_accessor :interface
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#attachedDisk
        # for attached disks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] Any valid publicly visible licenses.
        # Corresponds to the JSON property `licenses`
        # @return [Array<String>]
        attr_accessor :licenses
      
        # The mode in which to attach this disk, either READ_WRITE orREAD_ONLY. If not
        # specified, the default is to attach the disk
        # in READ_WRITE mode.
        # Corresponds to the JSON property `mode`
        # @return [String]
        attr_accessor :mode
      
        # Output only. For LocalSSD disks on VM Instances in STOPPED or SUSPENDED state,
        # this
        # field is set to PRESERVED if the LocalSSD data has been saved
        # to a persistent location by customer request.  (see the
        # discard_local_ssd option on Stop/Suspend).
        # Read-only in the api.
        # Corresponds to the JSON property `savedState`
        # @return [String]
        attr_accessor :saved_state
      
        # Initial State for shielded instance,
        # these are public keys which are safe to store in public
        # Corresponds to the JSON property `shieldedInstanceInitialState`
        # @return [Google::Apis::ComputeV1::InitialStateConfig]
        attr_accessor :shielded_instance_initial_state
      
        # Specifies a valid partial or full URL to an existing Persistent Disk
        # resource. When creating a new instance boot disk, one ofinitializeParams.
        # sourceImage orinitializeParams.sourceSnapshot or disks.source
        # is required.
        # If desired, you can also attach existing non-root persistent disks using
        # this property. This field is only applicable for persistent disks.
        # Note that for InstanceTemplate, specify the disk name for zonal disk,
        # and the URL for regional disk.
        # Corresponds to the JSON property `source`
        # @return [String]
        attr_accessor :source
      
        # Specifies the type of the disk, either SCRATCH orPERSISTENT. If not specified,
        # the default isPERSISTENT.
        # 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)
          @architecture = args[:architecture] if args.key?(:architecture)
          @auto_delete = args[:auto_delete] if args.key?(:auto_delete)
          @boot = args[:boot] if args.key?(:boot)
          @device_name = args[:device_name] if args.key?(:device_name)
          @disk_encryption_key = args[:disk_encryption_key] if args.key?(:disk_encryption_key)
          @disk_size_gb = args[:disk_size_gb] if args.key?(:disk_size_gb)
          @force_attach = args[:force_attach] if args.key?(:force_attach)
          @guest_os_features = args[:guest_os_features] if args.key?(:guest_os_features)
          @index = args[:index] if args.key?(:index)
          @initialize_params = args[:initialize_params] if args.key?(:initialize_params)
          @interface = args[:interface] if args.key?(:interface)
          @kind = args[:kind] if args.key?(:kind)
          @licenses = args[:licenses] if args.key?(:licenses)
          @mode = args[:mode] if args.key?(:mode)
          @saved_state = args[:saved_state] if args.key?(:saved_state)
          @shielded_instance_initial_state = args[:shielded_instance_initial_state] if args.key?(:shielded_instance_initial_state)
          @source = args[:source] if args.key?(:source)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # [Input Only] Specifies the parameters for a new disk that will be created
      # alongside the new instance. Use initialization parameters to create boot
      # disks or local SSDs attached to the new instance.
      # This field is persisted and returned for instanceTemplate and not returned
      # in the context of instance.
      # This property is mutually exclusive with the source property;
      # you can only define one or the other, but not both.
      class AttachedDiskInitializeParams
        include Google::Apis::Core::Hashable
      
        # The architecture of the attached disk. Valid values are
        # arm64 or x86_64.
        # Corresponds to the JSON property `architecture`
        # @return [String]
        attr_accessor :architecture
      
        # An optional description. Provide this property when creating the disk.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Specifies the disk name. If not specified, the default is to use the name
        # of the instance. If a disk with the same name already exists in the given
        # region, the existing disk is attached to the new instance and the
        # new disk is not created.
        # Corresponds to the JSON property `diskName`
        # @return [String]
        attr_accessor :disk_name
      
        # Specifies the size of the disk in base-2 GB. The size must be at least
        # 10 GB. If you specify a sourceImage, which is required for
        # boot disks, the default size is the size of the sourceImage.
        # If you do not specify a sourceImage, the default disk size
        # is 500 GB.
        # Corresponds to the JSON property `diskSizeGb`
        # @return [Fixnum]
        attr_accessor :disk_size_gb
      
        # Specifies the disk type to use to create the instance. If not specified,
        # the default is pd-standard, specified using the full URL.
        # For example:
        # https://www.googleapis.com/compute/v1/projects/project/zones/zone/diskTypes/pd-
        # standard
        # For a full list of acceptable values, seePersistent disk
        # types. If you specify this field when creating a VM, you can provide
        # either the full or partial URL. For example, the following values are
        # valid:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/
        # diskTypes/diskType
        # - projects/project/zones/zone/diskTypes/diskType
        # - zones/zone/diskTypes/diskType
        # If you specify this field when creating or updating an instance template
        # or all-instances configuration, specify the type of the disk, not the
        # URL. For example: pd-standard.
        # Corresponds to the JSON property `diskType`
        # @return [String]
        attr_accessor :disk_type
      
        # Whether this disk is using confidential compute mode.
        # Corresponds to the JSON property `enableConfidentialCompute`
        # @return [Boolean]
        attr_accessor :enable_confidential_compute
        alias_method :enable_confidential_compute?, :enable_confidential_compute
      
        # Labels to apply to this disk. These can be later modified by thedisks.
        # setLabels method. This field is only applicable for
        # persistent disks.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # A list of publicly visible licenses. Reserved for Google's use.
        # Corresponds to the JSON property `licenses`
        # @return [Array<String>]
        attr_accessor :licenses
      
        # Specifies which action to take on instance update with this disk. Default
        # is to use the existing disk.
        # Corresponds to the JSON property `onUpdateAction`
        # @return [String]
        attr_accessor :on_update_action
      
        # Indicates how many IOPS to provision for the disk. This sets the number
        # of I/O operations per second that the disk can handle. Values must be
        # between 10,000 and 120,000. For more details, see theExtreme persistent
        # disk documentation.
        # Corresponds to the JSON property `provisionedIops`
        # @return [Fixnum]
        attr_accessor :provisioned_iops
      
        # Indicates how much throughput to provision for the disk. This sets the
        # number of throughput mb per second that the disk can handle. Values must
        # greater than or equal to 1.
        # Corresponds to the JSON property `provisionedThroughput`
        # @return [Fixnum]
        attr_accessor :provisioned_throughput
      
        # Required for each regional disk associated with the instance. Specify
        # the URLs of the zones where the disk should be replicated to.
        # You must provide exactly two replica zones, and one zone must be the same
        # as the instance zone.
        # Corresponds to the JSON property `replicaZones`
        # @return [Array<String>]
        attr_accessor :replica_zones
      
        # Resource manager tags to be bound to the disk. Tag keys and values
        # have the same definition as resource
        # manager tags. Keys and values can be either in numeric format,
        # such as `tagKeys/`tag_key_id`` and `tagValues/456` or in namespaced
        # format such as ``org_id|project_id`/`tag_key_short_name`` and
        # ``tag_value_short_name``. The field is ignored (both PUT & PATCH) when
        # empty.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        # Resource policies applied to this disk for automatic snapshot creations.
        # Specified using the full or partial URL. For instance template, specify
        # only the resource policy name.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Array<String>]
        attr_accessor :resource_policies
      
        # The source image to create this disk. When creating a new instance boot
        # disk, one of initializeParams.sourceImage orinitializeParams.sourceSnapshot or
        # disks.source
        # is required.
        # To create a disk with one of the public operating system
        # images, specify the image by its family name. For example, specifyfamily/
        # debian-9 to use the latest Debian 9 image:
        # projects/debian-cloud/global/images/family/debian-9
        # Alternatively, use a specific version of a public operating system image:
        # projects/debian-cloud/global/images/debian-9-stretch-vYYYYMMDD
        # To create a disk with a custom image that you created, specify the
        # image name in the following format:
        # global/images/my-custom-image
        # You can also specify a custom image by its image family, which returns
        # the latest version of the image in that family. Replace the image name
        # with family/family-name:
        # global/images/family/my-image-family
        # If the source image is deleted later, this field will not be set.
        # Corresponds to the JSON property `sourceImage`
        # @return [String]
        attr_accessor :source_image
      
        # Thecustomer-supplied
        # encryption key of the source image. Required if the source image is
        # protected by a customer-supplied encryption key.
        # InstanceTemplate and InstancePropertiesPatch do not storecustomer-supplied
        # encryption keys, so you cannot create disks for instances in a managed
        # instance group if the
        # source images are encrypted with your own keys.
        # Corresponds to the JSON property `sourceImageEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :source_image_encryption_key
      
        # The source snapshot to create this disk. When creating a new instance
        # boot disk, one of initializeParams.sourceSnapshot orinitializeParams.
        # sourceImage or disks.source
        # is required.
        # To create a disk with a snapshot that you created, specify the
        # snapshot name in the following format:
        # global/snapshots/my-backup
        # If the source snapshot is deleted later, this field will not be set.
        # Note: You cannot create VMs in bulk using a snapshot as the source. Use
        # an image instead when you create VMs using
        # the bulk
        # insert method.
        # Corresponds to the JSON property `sourceSnapshot`
        # @return [String]
        attr_accessor :source_snapshot
      
        # Thecustomer-supplied
        # encryption key of the source snapshot.
        # Corresponds to the JSON property `sourceSnapshotEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :source_snapshot_encryption_key
      
        # The storage pool in which the new disk is created. You can provide
        # this as a partial or full URL to the resource. For example, the following
        # are valid values:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/
        # storagePools/storagePool
        # - projects/project/zones/zone/storagePools/storagePool
        # - zones/zone/storagePools/storagePool
        # Corresponds to the JSON property `storagePool`
        # @return [String]
        attr_accessor :storage_pool
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @architecture = args[:architecture] if args.key?(:architecture)
          @description = args[:description] if args.key?(:description)
          @disk_name = args[:disk_name] if args.key?(:disk_name)
          @disk_size_gb = args[:disk_size_gb] if args.key?(:disk_size_gb)
          @disk_type = args[:disk_type] if args.key?(:disk_type)
          @enable_confidential_compute = args[:enable_confidential_compute] if args.key?(:enable_confidential_compute)
          @labels = args[:labels] if args.key?(:labels)
          @licenses = args[:licenses] if args.key?(:licenses)
          @on_update_action = args[:on_update_action] if args.key?(:on_update_action)
          @provisioned_iops = args[:provisioned_iops] if args.key?(:provisioned_iops)
          @provisioned_throughput = args[:provisioned_throughput] if args.key?(:provisioned_throughput)
          @replica_zones = args[:replica_zones] if args.key?(:replica_zones)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
          @source_image = args[:source_image] if args.key?(:source_image)
          @source_image_encryption_key = args[:source_image_encryption_key] if args.key?(:source_image_encryption_key)
          @source_snapshot = args[:source_snapshot] if args.key?(:source_snapshot)
          @source_snapshot_encryption_key = args[:source_snapshot_encryption_key] if args.key?(:source_snapshot_encryption_key)
          @storage_pool = args[:storage_pool] if args.key?(:storage_pool)
        end
      end
      
      # Specifies the audit configuration for a service.
      # The configuration determines which permission types are logged, and what
      # identities, if any, are exempted from logging.
      # An AuditConfig must have one or more AuditLogConfigs.
      # If there are AuditConfigs for both `allServices` and a specific service,
      # the union of the two AuditConfigs is used for that service: the log_types
      # specified in each AuditConfig are enabled, and the exempted_members in each
      # AuditLogConfig are exempted.
      # Example Policy with multiple AuditConfigs:
      # `
      # "audit_configs": [
      # `
      # "service": "allServices",
      # "audit_log_configs": [
      # `
      # "log_type": "DATA_READ",
      # "exempted_members": [
      # "user:jose@example.com"
      # ]
      # `,
      # `
      # "log_type": "DATA_WRITE"
      # `,
      # `
      # "log_type": "ADMIN_READ"
      # `
      # ]
      # `,
      # `
      # "service": "sampleservice.googleapis.com",
      # "audit_log_configs": [
      # `
      # "log_type": "DATA_READ"
      # `,
      # `
      # "log_type": "DATA_WRITE",
      # "exempted_members": [
      # "user:aliya@example.com"
      # ]
      # `
      # ]
      # `
      # ]
      # `
      # For sampleservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ
      # logging. It also exempts `jose@example.com` from DATA_READ logging, and
      # `aliya@example.com` from DATA_WRITE logging.
      class AuditConfig
        include Google::Apis::Core::Hashable
      
        # The configuration for logging of each type of permission.
        # Corresponds to the JSON property `auditLogConfigs`
        # @return [Array<Google::Apis::ComputeV1::AuditLogConfig>]
        attr_accessor :audit_log_configs
      
        # Specifies a service that will be enabled for audit logging.
        # For example, `storage.googleapis.com`, `cloudsql.googleapis.com`.
        # `allServices` is a special value that covers all services.
        # 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)
          @audit_log_configs = args[:audit_log_configs] if args.key?(:audit_log_configs)
          @service = args[:service] if args.key?(:service)
        end
      end
      
      # Provides the configuration for logging a type of permissions.
      # Example:
      # `
      # "audit_log_configs": [
      # `
      # "log_type": "DATA_READ",
      # "exempted_members": [
      # "user:jose@example.com"
      # ]
      # `,
      # `
      # "log_type": "DATA_WRITE"
      # `
      # ]
      # `
      # This enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting
      # jose@example.com from DATA_READ logging.
      class AuditLogConfig
        include Google::Apis::Core::Hashable
      
        # Specifies the identities that do not cause logging for this type of
        # permission.
        # Follows the same format of Binding.members.
        # Corresponds to the JSON property `exemptedMembers`
        # @return [Array<String>]
        attr_accessor :exempted_members
      
        # The log type that this config enables.
        # Corresponds to the JSON property `logType`
        # @return [String]
        attr_accessor :log_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @exempted_members = args[:exempted_members] if args.key?(:exempted_members)
          @log_type = args[:log_type] if args.key?(:log_type)
        end
      end
      
      # Represents an Autoscaler resource.
      # Google Compute Engine has two Autoscaler resources:
      # * [Zonal](/compute/docs/reference/rest/v1/autoscalers)
      # * [Regional](/compute/docs/reference/rest/v1/regionAutoscalers)
      # Use autoscalers to automatically add or delete instances from a
      # managed instance group according to your defined autoscaling policy.
      # For more information, read Autoscaling Groups of Instances.
      # For zonal managed instance groups resource, use the autoscaler
      # resource.
      # For regional managed instance groups, use theregionAutoscalers resource.
      class Autoscaler
        include Google::Apis::Core::Hashable
      
        # Cloud Autoscaler policy.
        # Corresponds to the JSON property `autoscalingPolicy`
        # @return [Google::Apis::ComputeV1::AutoscalingPolicy]
        attr_accessor :autoscaling_policy
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Always compute#autoscaler
        # for autoscalers.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] Target recommended MIG size (number of instances)
        # computed by
        # autoscaler. Autoscaler calculates the recommended MIG size even when the
        # autoscaling policy mode is different from ON. This field is empty when
        # autoscaler is not connected to an existing managed instance group or
        # autoscaler did not generate its prediction.
        # Corresponds to the JSON property `recommendedSize`
        # @return [Fixnum]
        attr_accessor :recommended_size
      
        # Output only. [Output Only] URL of theregion
        # where the instance group resides (for autoscalers living in regional
        # scope).
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] Status information of existing scaling schedules.
        # Corresponds to the JSON property `scalingScheduleStatus`
        # @return [Hash<String,Google::Apis::ComputeV1::ScalingScheduleStatus>]
        attr_accessor :scaling_schedule_status
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] The status of the autoscaler configuration. Current set of
        # possible values:
        # 
        # - PENDING:
        # Autoscaler backend hasn't read new/updated configuration.
        # - DELETING:
        # Configuration is being deleted.
        # - ACTIVE:
        # Configuration is acknowledged to be effective. Some warnings might
        # be present in the statusDetails field.
        # - ERROR:
        # Configuration has errors. Actionable for users. Details are present in
        # the statusDetails field.
        # New values might be added in the future.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # [Output Only] Human-readable details about the current state of the
        # autoscaler. Read the documentation forCommonly
        # returned status messages for examples of status messages you might
        # encounter.
        # Corresponds to the JSON property `statusDetails`
        # @return [Array<Google::Apis::ComputeV1::AutoscalerStatusDetails>]
        attr_accessor :status_details
      
        # URL of the managed instance group that this autoscaler will scale. This
        # field is required when creating an autoscaler.
        # Corresponds to the JSON property `target`
        # @return [String]
        attr_accessor :target
      
        # Output only. [Output Only] URL of thezone
        # where the instance group resides (for autoscalers living in zonal scope).
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @autoscaling_policy = args[:autoscaling_policy] if args.key?(:autoscaling_policy)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @recommended_size = args[:recommended_size] if args.key?(:recommended_size)
          @region = args[:region] if args.key?(:region)
          @scaling_schedule_status = args[:scaling_schedule_status] if args.key?(:scaling_schedule_status)
          @self_link = args[:self_link] if args.key?(:self_link)
          @status = args[:status] if args.key?(:status)
          @status_details = args[:status_details] if args.key?(:status_details)
          @target = args[:target] if args.key?(:target)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class AutoscalerAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of AutoscalersScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::AutoscalersScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # autoscalerAggregatedList for aggregated lists of
        # autoscalers.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # end_interface: MixerListResponseWithEtagBuilder
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::AutoscalerAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::AutoscalerAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of Autoscaler resources.
      class AutoscalerList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Autoscaler resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Autoscaler>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#autoscalerList
        # for lists of autoscalers.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::AutoscalerList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::AutoscalerList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class AutoscalerStatusDetails
        include Google::Apis::Core::Hashable
      
        # The status message.
        # Corresponds to the JSON property `message`
        # @return [String]
        attr_accessor :message
      
        # The type of error, warning, or notice returned. Current set of possible
        # values:
        # 
        # - ALL_INSTANCES_UNHEALTHY (WARNING):
        # All instances in the instance group are unhealthy (not in RUNNING
        # state).
        # - BACKEND_SERVICE_DOES_NOT_EXIST (ERROR):
        # There is no backend service attached to the instance group.
        # - CAPPED_AT_MAX_NUM_REPLICAS (WARNING):
        # Autoscaler recommends a size greater than maxNumReplicas.
        # - CUSTOM_METRIC_DATA_POINTS_TOO_SPARSE (WARNING):
        # The custom metric samples are not exported often enough to be
        # a credible base for autoscaling.
        # - CUSTOM_METRIC_INVALID (ERROR):
        # The custom metric that was specified does not exist or does not have
        # the necessary labels.
        # - MIN_EQUALS_MAX (WARNING):
        # The minNumReplicas is equal to maxNumReplicas. This means the
        # autoscaler cannot add or remove instances from the instance group.
        # - MISSING_CUSTOM_METRIC_DATA_POINTS (WARNING):
        # The autoscaler did not receive any data from the custom metric
        # configured for autoscaling.
        # - MISSING_LOAD_BALANCING_DATA_POINTS (WARNING):
        # The autoscaler is configured to scale based on a load balancing signal
        # but the instance group has not received any requests from the load
        # balancer.
        # - MODE_OFF (WARNING):
        # Autoscaling is turned off. The number of instances in the group won't
        # change automatically. The autoscaling configuration is preserved.
        # - MODE_ONLY_UP (WARNING):
        # Autoscaling is in the "Autoscale only out" mode. The autoscaler can add
        # instances but not remove any.
        # - MORE_THAN_ONE_BACKEND_SERVICE (ERROR):
        # The instance group cannot be autoscaled because it has more than one
        # backend service attached to it.
        # - NOT_ENOUGH_QUOTA_AVAILABLE (ERROR):
        # There is insufficient quota for the necessary resources, such as CPU or
        # number of instances.
        # - REGION_RESOURCE_STOCKOUT (ERROR):
        # Shown only for regional autoscalers: there is a resource stockout in
        # the chosen region.
        # - SCALING_TARGET_DOES_NOT_EXIST (ERROR):
        # The target to be scaled does not exist.
        # - UNSUPPORTED_MAX_RATE_LOAD_BALANCING_CONFIGURATION
        # (ERROR): Autoscaling does not work with an HTTP/S load balancer that
        # has been configured for maxRate.
        # - ZONE_RESOURCE_STOCKOUT (ERROR):
        # For zonal autoscalers: there is a resource stockout in the chosen zone.
        # For regional autoscalers: in at least one of the zones you're using
        # there is a resource stockout.
        # New values might be added in the future. Some of the values might not be
        # available in all API versions.
        # 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)
          @message = args[:message] if args.key?(:message)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # 
      class AutoscalersScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of autoscalers contained in this scope.
        # Corresponds to the JSON property `autoscalers`
        # @return [Array<Google::Apis::ComputeV1::Autoscaler>]
        attr_accessor :autoscalers
      
        # [Output Only] Informational warning which replaces the list of autoscalers
        # when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::AutoscalersScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @autoscalers = args[:autoscalers] if args.key?(:autoscalers)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning which replaces the list of autoscalers
        # when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::AutoscalersScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Cloud Autoscaler policy.
      class AutoscalingPolicy
        include Google::Apis::Core::Hashable
      
        # The number of seconds that your application takes to initialize on a VM
        # instance. This is referred to as the
        # [initialization period](/compute/docs/autoscaler#cool_down_period).
        # Specifying an accurate initialization period improves
        # autoscaler decisions. For example, when scaling out, the autoscaler ignores
        # data from VMs that are still initializing because those VMs might not yet
        # represent normal usage of your application. The default initialization
        # period is 60 seconds.
        # Initialization periods might vary because of numerous
        # factors. We recommend that you test how long your application takes to
        # initialize. To do this, create a VM and time your application's startup
        # process.
        # Corresponds to the JSON property `coolDownPeriodSec`
        # @return [Fixnum]
        attr_accessor :cool_down_period_sec
      
        # CPU utilization policy.
        # Corresponds to the JSON property `cpuUtilization`
        # @return [Google::Apis::ComputeV1::AutoscalingPolicyCpuUtilization]
        attr_accessor :cpu_utilization
      
        # Configuration parameters of autoscaling based on a custom metric.
        # Corresponds to the JSON property `customMetricUtilizations`
        # @return [Array<Google::Apis::ComputeV1::AutoscalingPolicyCustomMetricUtilization>]
        attr_accessor :custom_metric_utilizations
      
        # Configuration parameters of autoscaling based on load balancing.
        # Corresponds to the JSON property `loadBalancingUtilization`
        # @return [Google::Apis::ComputeV1::AutoscalingPolicyLoadBalancingUtilization]
        attr_accessor :load_balancing_utilization
      
        # The maximum number of instances that the autoscaler can scale out to. This
        # is required when creating or updating an autoscaler. The maximum number
        # of replicas must not be lower than minimal number of replicas.
        # Corresponds to the JSON property `maxNumReplicas`
        # @return [Fixnum]
        attr_accessor :max_num_replicas
      
        # The minimum number of replicas that the autoscaler can scale in to.
        # This cannot be less than 0. If not provided, autoscaler chooses a
        # default value depending on maximum number of instances allowed.
        # Corresponds to the JSON property `minNumReplicas`
        # @return [Fixnum]
        attr_accessor :min_num_replicas
      
        # Defines the operating mode for this policy.
        # The following modes are available:
        # 
        # - OFF: Disables the autoscaler but maintains its
        # configuration.
        # - ONLY_SCALE_OUT: Restricts the autoscaler to add
        # VM instances only.
        # - ON: Enables all autoscaler activities according to its
        # policy.
        # For more information, see
        # "Turning off or restricting an autoscaler"
        # Corresponds to the JSON property `mode`
        # @return [String]
        attr_accessor :mode
      
        # Configuration that allows for slower scale in so that even if Autoscaler
        # recommends an abrupt scale in of a MIG, it will be throttled as specified
        # by the parameters below.
        # Corresponds to the JSON property `scaleInControl`
        # @return [Google::Apis::ComputeV1::AutoscalingPolicyScaleInControl]
        attr_accessor :scale_in_control
      
        # Scaling schedules defined for an autoscaler. Multiple schedules
        # can be set on an autoscaler, and they can overlap. During overlapping
        # periods the greatest min_required_replicas of all scaling schedules is
        # applied. Up to 128 scaling schedules are allowed.
        # Corresponds to the JSON property `scalingSchedules`
        # @return [Hash<String,Google::Apis::ComputeV1::AutoscalingPolicyScalingSchedule>]
        attr_accessor :scaling_schedules
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cool_down_period_sec = args[:cool_down_period_sec] if args.key?(:cool_down_period_sec)
          @cpu_utilization = args[:cpu_utilization] if args.key?(:cpu_utilization)
          @custom_metric_utilizations = args[:custom_metric_utilizations] if args.key?(:custom_metric_utilizations)
          @load_balancing_utilization = args[:load_balancing_utilization] if args.key?(:load_balancing_utilization)
          @max_num_replicas = args[:max_num_replicas] if args.key?(:max_num_replicas)
          @min_num_replicas = args[:min_num_replicas] if args.key?(:min_num_replicas)
          @mode = args[:mode] if args.key?(:mode)
          @scale_in_control = args[:scale_in_control] if args.key?(:scale_in_control)
          @scaling_schedules = args[:scaling_schedules] if args.key?(:scaling_schedules)
        end
      end
      
      # CPU utilization policy.
      class AutoscalingPolicyCpuUtilization
        include Google::Apis::Core::Hashable
      
        # Indicates whether predictive autoscaling based on CPU metric is enabled.
        # Valid values are:
        # * NONE (default). No predictive method is used. The autoscaler scales the
        # group to meet current demand based on real-time metrics.
        # * OPTIMIZE_AVAILABILITY. Predictive autoscaling improves availability by
        # monitoring daily and weekly load patterns and scaling out ahead of
        # anticipated demand.
        # Corresponds to the JSON property `predictiveMethod`
        # @return [String]
        attr_accessor :predictive_method
      
        # The target CPU utilization that the autoscaler maintains. Must be
        # a float value in the range (0, 1]. If not specified, the default is0.6.
        # If the CPU level is below the target utilization, the autoscaler scales
        # in the number of instances until it reaches the minimum number of
        # instances you specified or until the average CPU of your instances
        # reaches the target utilization.
        # If the average CPU is above the target utilization, the autoscaler
        # scales out until it reaches the maximum number of instances you
        # specified or until the average utilization reaches the target
        # utilization.
        # Corresponds to the JSON property `utilizationTarget`
        # @return [Float]
        attr_accessor :utilization_target
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @predictive_method = args[:predictive_method] if args.key?(:predictive_method)
          @utilization_target = args[:utilization_target] if args.key?(:utilization_target)
        end
      end
      
      # Custom utilization metric policy.
      class AutoscalingPolicyCustomMetricUtilization
        include Google::Apis::Core::Hashable
      
        # A filter string, compatible with a Stackdriver Monitoringfilter string
        # forTimeSeries.list API call. This filter is
        # used to select a specific TimeSeries for the purpose of autoscaling and
        # to determine whether the metric is exporting per-instance or
        # per-group data.
        # For the filter to be valid for autoscaling purposes, the following rules
        # apply:
        # 
        # 
        # - You can only use the AND operator for joining
        # selectors.
        # - You can only use direct equality comparison operator
        # (=) without any functions for each selector.
        # - You can specify the metric in both the filter string and in the
        # metric field. However, if specified in both places, the metric must
        # be identical.
        # - The monitored resource type
        # determines what kind of values are expected for the metric. If it is
        # a gce_instance, the autoscaler expects the metric to
        # include a separate TimeSeries for each instance in a group. In such a
        # case, you cannot filter on resource labels.
        # 
        # 
        # If the resource type is any other value, the autoscaler expects
        # this metric to contain values that apply to the entire autoscaled
        # instance group and resource label filtering can be performed to
        # point autoscaler at the correct TimeSeries to scale upon. This is
        # called a *per-group metric* for the purpose of autoscaling.
        # 
        # If not specified, the type defaults to
        # gce_instance.
        # Try to provide a filter that is selective enough to pick just one
        # TimeSeries for the autoscaled group or for each of the instances (if you
        # are using gce_instance resource type). If multiple
        # TimeSeries are returned upon the query execution, the autoscaler will sum
        # their respective values to obtain its scaling value.
        # Corresponds to the JSON property `filter`
        # @return [String]
        attr_accessor :filter
      
        # The identifier (type) of the Stackdriver Monitoring metric. The metric
        # cannot have negative values.
        # The metric must have a value type of INT64 orDOUBLE.
        # Corresponds to the JSON property `metric`
        # @return [String]
        attr_accessor :metric
      
        # If scaling is based on a per-group metric value that represents the
        # total amount of work to be done or resource usage, set this value to an
        # amount assigned for a single instance of the scaled group. Autoscaler
        # keeps the number of instances proportional to the value of this
        # metric. The metric itself does not change value due to group
        # resizing.
        # A good metric to use with the target is for examplepubsub.googleapis.com/
        # subscription/num_undelivered_messages
        # or a custom metric exporting the total number of requests coming to
        # your instances.
        # A bad example would be a metric exporting an average or median latency,
        # since this value can't include a chunk assignable to a single instance,
        # it could be better used with utilization_target instead.
        # Corresponds to the JSON property `singleInstanceAssignment`
        # @return [Float]
        attr_accessor :single_instance_assignment
      
        # The target value of the metric that autoscaler maintains. This
        # must be a positive value. A utilization metric scales number of
        # virtual machines handling requests to increase or decrease
        # proportionally to the metric.
        # For example, a good metric to use as a utilization_target ishttps://www.
        # googleapis.com/compute/v1/instance/network/received_bytes_count.
        # The autoscaler works to keep this value constant for each of the
        # instances.
        # Corresponds to the JSON property `utilizationTarget`
        # @return [Float]
        attr_accessor :utilization_target
      
        # Defines how target utilization value is expressed for a Stackdriver
        # Monitoring metric. Either GAUGE,DELTA_PER_SECOND, or DELTA_PER_MINUTE.
        # Corresponds to the JSON property `utilizationTargetType`
        # @return [String]
        attr_accessor :utilization_target_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @filter = args[:filter] if args.key?(:filter)
          @metric = args[:metric] if args.key?(:metric)
          @single_instance_assignment = args[:single_instance_assignment] if args.key?(:single_instance_assignment)
          @utilization_target = args[:utilization_target] if args.key?(:utilization_target)
          @utilization_target_type = args[:utilization_target_type] if args.key?(:utilization_target_type)
        end
      end
      
      # Configuration parameters of autoscaling based on load balancing.
      class AutoscalingPolicyLoadBalancingUtilization
        include Google::Apis::Core::Hashable
      
        # Fraction of backend capacity utilization (set in HTTP(S) load balancing
        # configuration) that the autoscaler maintains. Must be a positive float
        # value. If not defined, the default is 0.8.
        # Corresponds to the JSON property `utilizationTarget`
        # @return [Float]
        attr_accessor :utilization_target
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @utilization_target = args[:utilization_target] if args.key?(:utilization_target)
        end
      end
      
      # Configuration that allows for slower scale in so that even if Autoscaler
      # recommends an abrupt scale in of a MIG, it will be throttled as specified
      # by the parameters below.
      class AutoscalingPolicyScaleInControl
        include Google::Apis::Core::Hashable
      
        # Encapsulates numeric value that can be either absolute or relative.
        # Corresponds to the JSON property `maxScaledInReplicas`
        # @return [Google::Apis::ComputeV1::FixedOrPercent]
        attr_accessor :max_scaled_in_replicas
      
        # How far back autoscaling looks when computing recommendations to
        # include directives regarding slower scale in, as described above.
        # Corresponds to the JSON property `timeWindowSec`
        # @return [Fixnum]
        attr_accessor :time_window_sec
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max_scaled_in_replicas = args[:max_scaled_in_replicas] if args.key?(:max_scaled_in_replicas)
          @time_window_sec = args[:time_window_sec] if args.key?(:time_window_sec)
        end
      end
      
      # Scaling based on user-defined schedule. The message describes a single
      # scaling schedule. A scaling schedule changes the minimum number of VM
      # instances an autoscaler can recommend, which can trigger scaling out.
      class AutoscalingPolicyScalingSchedule
        include Google::Apis::Core::Hashable
      
        # A description of a scaling schedule.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # A boolean value that specifies whether a scaling schedule can influence
        # autoscaler recommendations. If set to true, then a scaling schedule has
        # no effect. This field is optional, and its value is false by default.
        # Corresponds to the JSON property `disabled`
        # @return [Boolean]
        attr_accessor :disabled
        alias_method :disabled?, :disabled
      
        # The duration of time intervals, in seconds, for which this
        # scaling schedule is to run. The minimum allowed value is 300.
        # This field is required.
        # Corresponds to the JSON property `durationSec`
        # @return [Fixnum]
        attr_accessor :duration_sec
      
        # The minimum number of VM instances that the autoscaler will
        # recommend in time intervals starting according to schedule. This field is
        # required.
        # Corresponds to the JSON property `minRequiredReplicas`
        # @return [Fixnum]
        attr_accessor :min_required_replicas
      
        # The start timestamps of time intervals when this scaling
        # schedule is to provide a scaling signal. This field uses the extended
        # cron format (with an optional year field). The expression can describe a
        # single timestamp if the optional year is set, in which case the scaling
        # schedule runs once. The schedule is interpreted with respect to
        # time_zone. This field is required. Note: These timestamps only describe
        # when autoscaler starts providing the scaling signal. The VMs
        # need additional time to become serving.
        # Corresponds to the JSON property `schedule`
        # @return [String]
        attr_accessor :schedule
      
        # The time zone to use when interpreting the schedule.
        # The value of this field must be a time zone name from the tz database:
        # https://en.wikipedia.org/wiki/Tz_database. This field is assigned a
        # default value of "UTC" if left empty.
        # Corresponds to the JSON property `timeZone`
        # @return [String]
        attr_accessor :time_zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @description = args[:description] if args.key?(:description)
          @disabled = args[:disabled] if args.key?(:disabled)
          @duration_sec = args[:duration_sec] if args.key?(:duration_sec)
          @min_required_replicas = args[:min_required_replicas] if args.key?(:min_required_replicas)
          @schedule = args[:schedule] if args.key?(:schedule)
          @time_zone = args[:time_zone] if args.key?(:time_zone)
        end
      end
      
      # Message containing information of one individual backend.
      class Backend
        include Google::Apis::Core::Hashable
      
        # Specifies how to determine whether the backend of a load balancer can
        # handle additional traffic or is fully loaded. For usage guidelines, see
        # Connection balancing mode.
        # Backends must use compatible balancing modes. For more information, see
        # Supported balancing modes and target capacity settings and
        # Restrictions and guidance for instance groups.
        # Note: Currently, if you use the API to configure incompatible balancing
        # modes, the configuration might be accepted even though it has no impact
        # and is ignored. Specifically, Backend.maxUtilization is ignored when
        # Backend.balancingMode is RATE. In the future, this incompatible combination
        # will be rejected.
        # Corresponds to the JSON property `balancingMode`
        # @return [String]
        attr_accessor :balancing_mode
      
        # A multiplier applied to the backend's target capacity of its balancing
        # mode.
        # The default value is 1, which means the group serves up to
        # 100% of its configured capacity (depending onbalancingMode). A setting of 0
        # means the group is
        # completely drained, offering 0% of its available capacity. The valid ranges
        # are 0.0 and [0.1,1.0].
        # You cannot configure a setting larger than 0 and smaller than0.1.
        # You cannot configure a setting of 0 when there is only one
        # backend attached to the backend service.
        # Not available with backends that don't support using abalancingMode. This
        # includes backends such as global
        # internet NEGs, regional serverless NEGs, and PSC NEGs.
        # Corresponds to the JSON property `capacityScaler`
        # @return [Float]
        attr_accessor :capacity_scaler
      
        # List of custom metrics that are used for CUSTOM_METRICS
        # BalancingMode.
        # Corresponds to the JSON property `customMetrics`
        # @return [Array<Google::Apis::ComputeV1::BackendCustomMetric>]
        attr_accessor :custom_metrics
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # This field designates whether this is a failover backend. More than one
        # failover backend can be configured for a given BackendService.
        # Corresponds to the JSON property `failover`
        # @return [Boolean]
        attr_accessor :failover
        alias_method :failover?, :failover
      
        # The fully-qualified URL of aninstance
        # group or network endpoint
        # group (NEG) resource. To determine what types of backends a load
        # balancer supports, see the [Backend services
        # overview](https://cloud.google.com/load-balancing/docs/backend-service#
        # backends).
        # You must use the *fully-qualified* URL (starting withhttps://www.googleapis.
        # com/) to specify the instance group
        # or NEG. Partial URLs are not supported.
        # If haPolicy is specified, backends must refer to NEG resources of type
        # GCE_VM_IP.
        # Corresponds to the JSON property `group`
        # @return [String]
        attr_accessor :group
      
        # Defines a target maximum number of simultaneous connections. For usage
        # guidelines, seeConnection
        # balancing mode and Utilization
        # balancing mode. Not available if the backend'sbalancingMode is RATE.
        # Corresponds to the JSON property `maxConnections`
        # @return [Fixnum]
        attr_accessor :max_connections
      
        # Defines a target maximum number of simultaneous connections.  For usage
        # guidelines, seeConnection
        # balancing mode and Utilization
        # balancing mode.
        # Not available if the backend's balancingMode isRATE.
        # Corresponds to the JSON property `maxConnectionsPerEndpoint`
        # @return [Fixnum]
        attr_accessor :max_connections_per_endpoint
      
        # Defines a target maximum number of simultaneous connections.
        # For usage guidelines, seeConnection
        # balancing mode and Utilization
        # balancing mode.
        # Not available if the backend's balancingMode isRATE.
        # Corresponds to the JSON property `maxConnectionsPerInstance`
        # @return [Fixnum]
        attr_accessor :max_connections_per_instance
      
        # Defines a maximum number of HTTP requests per second (RPS). For
        # usage guidelines, seeRate
        # balancing mode and Utilization
        # balancing mode.
        # Not available if the backend's balancingMode isCONNECTION.
        # Corresponds to the JSON property `maxRate`
        # @return [Fixnum]
        attr_accessor :max_rate
      
        # Defines a maximum target for requests per second (RPS). For usage
        # guidelines, seeRate
        # balancing mode and Utilization
        # balancing mode.
        # Not available if the backend's balancingMode isCONNECTION.
        # Corresponds to the JSON property `maxRatePerEndpoint`
        # @return [Float]
        attr_accessor :max_rate_per_endpoint
      
        # Defines a maximum target for requests per second (RPS). For usage
        # guidelines, seeRate
        # balancing mode and Utilization
        # balancing mode.
        # Not available if the backend's balancingMode isCONNECTION.
        # Corresponds to the JSON property `maxRatePerInstance`
        # @return [Float]
        attr_accessor :max_rate_per_instance
      
        # Optional parameter to define a target capacity for theUTILIZATION balancing
        # mode. The valid range is[0.0, 1.0].
        # For usage guidelines, seeUtilization
        # balancing mode.
        # Corresponds to the JSON property `maxUtilization`
        # @return [Float]
        attr_accessor :max_utilization
      
        # This field indicates whether this backend should be fully utilized before
        # sending traffic to backends with default preference. The possible values
        # are:
        # 
        # - PREFERRED: Backends with this preference level will be
        # filled up to their capacity limits first, based on RTT.
        # - DEFAULT:  If preferred backends don't have enough
        # capacity, backends in this layer would be used and traffic would be
        # assigned based on the load balancing algorithm you use. This is the
        # default
        # Corresponds to the JSON property `preference`
        # @return [String]
        attr_accessor :preference
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @balancing_mode = args[:balancing_mode] if args.key?(:balancing_mode)
          @capacity_scaler = args[:capacity_scaler] if args.key?(:capacity_scaler)
          @custom_metrics = args[:custom_metrics] if args.key?(:custom_metrics)
          @description = args[:description] if args.key?(:description)
          @failover = args[:failover] if args.key?(:failover)
          @group = args[:group] if args.key?(:group)
          @max_connections = args[:max_connections] if args.key?(:max_connections)
          @max_connections_per_endpoint = args[:max_connections_per_endpoint] if args.key?(:max_connections_per_endpoint)
          @max_connections_per_instance = args[:max_connections_per_instance] if args.key?(:max_connections_per_instance)
          @max_rate = args[:max_rate] if args.key?(:max_rate)
          @max_rate_per_endpoint = args[:max_rate_per_endpoint] if args.key?(:max_rate_per_endpoint)
          @max_rate_per_instance = args[:max_rate_per_instance] if args.key?(:max_rate_per_instance)
          @max_utilization = args[:max_utilization] if args.key?(:max_utilization)
          @preference = args[:preference] if args.key?(:preference)
        end
      end
      
      # Represents a Cloud Storage Bucket resource.
      # This Cloud Storage bucket resource is referenced by a URL map of a load
      # balancer. For more information, readBackend Buckets.
      class BackendBucket
        include Google::Apis::Core::Hashable
      
        # Cloud Storage bucket name.
        # Corresponds to the JSON property `bucketName`
        # @return [String]
        attr_accessor :bucket_name
      
        # Message containing Cloud CDN configuration for a backend bucket.
        # Corresponds to the JSON property `cdnPolicy`
        # @return [Google::Apis::ComputeV1::BackendBucketCdnPolicy]
        attr_accessor :cdn_policy
      
        # Compress text responses using Brotli or gzip compression, based on
        # the client's Accept-Encoding header.
        # Corresponds to the JSON property `compressionMode`
        # @return [String]
        attr_accessor :compression_mode
      
        # [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Headers that the Application Load Balancer should add to proxied responses.
        # Corresponds to the JSON property `customResponseHeaders`
        # @return [Array<String>]
        attr_accessor :custom_response_headers
      
        # An optional textual description of the resource; provided by the client
        # when the resource is created.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The resource URL for the edge security policy associated with
        # this backend bucket.
        # Corresponds to the JSON property `edgeSecurityPolicy`
        # @return [String]
        attr_accessor :edge_security_policy
      
        # If true, enable Cloud CDN for this BackendBucket.
        # Corresponds to the JSON property `enableCdn`
        # @return [Boolean]
        attr_accessor :enable_cdn
        alias_method :enable_cdn?, :enable_cdn
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. Type of the resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The value can only be INTERNAL_MANAGED for cross-region internal layer 7
        # load balancer.
        # If loadBalancingScheme is not specified, the backend bucket can be used by
        # classic global external load balancers, or global application external load
        # balancers, or both.
        # Corresponds to the JSON property `loadBalancingScheme`
        # @return [String]
        attr_accessor :load_balancing_scheme
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Additional Backend Bucket parameters.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::BackendBucketParams]
        attr_accessor :params
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] List of resources referencing that backend bucket.
        # Corresponds to the JSON property `usedBy`
        # @return [Array<Google::Apis::ComputeV1::BackendBucketUsedBy>]
        attr_accessor :used_by
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bucket_name = args[:bucket_name] if args.key?(:bucket_name)
          @cdn_policy = args[:cdn_policy] if args.key?(:cdn_policy)
          @compression_mode = args[:compression_mode] if args.key?(:compression_mode)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @custom_response_headers = args[:custom_response_headers] if args.key?(:custom_response_headers)
          @description = args[:description] if args.key?(:description)
          @edge_security_policy = args[:edge_security_policy] if args.key?(:edge_security_policy)
          @enable_cdn = args[:enable_cdn] if args.key?(:enable_cdn)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @load_balancing_scheme = args[:load_balancing_scheme] if args.key?(:load_balancing_scheme)
          @name = args[:name] if args.key?(:name)
          @params = args[:params] if args.key?(:params)
          @self_link = args[:self_link] if args.key?(:self_link)
          @used_by = args[:used_by] if args.key?(:used_by)
        end
      end
      
      # Message containing Cloud CDN configuration for a backend bucket.
      class BackendBucketCdnPolicy
        include Google::Apis::Core::Hashable
      
        # Bypass the cache when the specified request headers are matched - e.g.
        # Pragma or Authorization headers. Up to 5 headers can be specified.
        # The cache is bypassed for all cdnPolicy.cacheMode settings.
        # Corresponds to the JSON property `bypassCacheOnRequestHeaders`
        # @return [Array<Google::Apis::ComputeV1::BackendBucketCdnPolicyBypassCacheOnRequestHeader>]
        attr_accessor :bypass_cache_on_request_headers
      
        # Message containing what to include in the cache key for a request for
        # Cloud CDN.
        # Corresponds to the JSON property `cacheKeyPolicy`
        # @return [Google::Apis::ComputeV1::BackendBucketCdnPolicyCacheKeyPolicy]
        attr_accessor :cache_key_policy
      
        # Specifies the cache setting for all responses from this backend.
        # The possible values are:USE_ORIGIN_HEADERS Requires the origin to set valid
        # caching
        # headers to cache content. Responses without these headers will not be
        # cached at Google's edge, and will require a full trip to the origin on
        # every request, potentially impacting performance and increasing load on
        # the origin server.FORCE_CACHE_ALL Cache all content, ignoring any "private",
        # "no-store" or "no-cache" directives in Cache-Control response headers.
        # Warning: this may result in Cloud CDN caching private,
        # per-user (user identifiable) content.CACHE_ALL_STATIC Automatically cache
        # static content,
        # including common image formats, media (video and audio), and web assets
        # (JavaScript and CSS). Requests and responses that are marked as
        # uncacheable, as well as dynamic content (including HTML), will not be
        # cached.
        # If no value is provided for cdnPolicy.cacheMode, it defaults
        # to CACHE_ALL_STATIC.
        # Corresponds to the JSON property `cacheMode`
        # @return [String]
        attr_accessor :cache_mode
      
        # Specifies a separate client (e.g. browser client) maximum TTL. This is
        # used to clamp the max-age (or Expires) value sent to the client.  With
        # FORCE_CACHE_ALL, the lesser of client_ttl and default_ttl is used for the
        # response max-age directive, along with a "public" directive.  For
        # cacheable content in CACHE_ALL_STATIC mode, client_ttl clamps the max-age
        # from the origin (if specified), or else sets the response max-age
        # directive to the lesser of the client_ttl and default_ttl, and also
        # ensures a "public" cache-control directive is present.
        # If a client TTL is not specified, a default value (1 hour) will be used.
        # The maximum allowed value is 31,622,400s (1 year).
        # Corresponds to the JSON property `clientTtl`
        # @return [Fixnum]
        attr_accessor :client_ttl
      
        # Specifies the default TTL for cached content served by this origin for
        # responses that do not have an existing valid TTL (max-age or s-maxage).
        # Setting a TTL of "0" means "always revalidate".
        # The value of defaultTTL cannot be set to a value greater than that of
        # maxTTL, but can be equal.
        # When the cacheMode is set to FORCE_CACHE_ALL, the defaultTTL
        # will overwrite the TTL set in all responses. The maximum allowed value is
        # 31,622,400s (1 year), noting that infrequently accessed objects may be
        # evicted from the cache before the defined TTL.
        # Corresponds to the JSON property `defaultTtl`
        # @return [Fixnum]
        attr_accessor :default_ttl
      
        # Specifies the maximum allowed TTL for cached content served by this
        # origin.
        # Cache directives that attempt to set a max-age or s-maxage higher than
        # this, or an Expires header more than maxTTL seconds in the future will
        # be capped at the value of maxTTL, as if it were the value of an
        # s-maxage Cache-Control directive.
        # Headers sent to the client will not be modified.
        # Setting a TTL of "0" means "always revalidate".
        # The maximum allowed value is 31,622,400s (1 year), noting that
        # infrequently accessed objects may be evicted from the cache before
        # the defined TTL.
        # Corresponds to the JSON property `maxTtl`
        # @return [Fixnum]
        attr_accessor :max_ttl
      
        # Negative caching allows per-status code TTLs to be set, in order
        # to apply fine-grained caching for common errors or redirects.
        # This can reduce the load on your origin and improve end-user
        # experience by reducing response latency.
        # When the cache mode is set to CACHE_ALL_STATIC or USE_ORIGIN_HEADERS,
        # negative caching applies to responses with the specified response code
        # that lack any Cache-Control, Expires, or Pragma: no-cache directives.
        # When the cache mode is set to FORCE_CACHE_ALL, negative caching applies
        # to all responses with the specified response code, and override any
        # caching headers.
        # By default, Cloud CDN will apply the following default TTLs to these
        # status codes:
        # HTTP 300 (Multiple Choice), 301, 308 (Permanent Redirects): 10m
        # HTTP 404 (Not Found), 410 (Gone),
        # 451 (Unavailable For Legal Reasons): 120s
        # HTTP 405 (Method Not Found), 501 (Not Implemented): 60s.
        # These defaults can be overridden in negative_caching_policy.
        # Corresponds to the JSON property `negativeCaching`
        # @return [Boolean]
        attr_accessor :negative_caching
        alias_method :negative_caching?, :negative_caching
      
        # Sets a cache TTL for the specified HTTP status code.
        # negative_caching must be enabled to configure negative_caching_policy.
        # Omitting the policy and leaving negative_caching enabled will use
        # Cloud CDN's default cache TTLs.
        # Note that when specifying an explicit negative_caching_policy, you
        # should take care to specify a cache TTL for all response codes
        # that you wish to cache. Cloud CDN will not apply any default
        # negative caching when a policy exists.
        # Corresponds to the JSON property `negativeCachingPolicy`
        # @return [Array<Google::Apis::ComputeV1::BackendBucketCdnPolicyNegativeCachingPolicy>]
        attr_accessor :negative_caching_policy
      
        # If true then Cloud CDN will combine multiple concurrent cache fill
        # requests into a small number of requests to the origin.
        # Corresponds to the JSON property `requestCoalescing`
        # @return [Boolean]
        attr_accessor :request_coalescing
        alias_method :request_coalescing?, :request_coalescing
      
        # Serve existing content from the cache (if available) when revalidating
        # content with the origin, or when an error is encountered when refreshing
        # the cache.
        # This setting defines the default "max-stale" duration for any cached
        # responses that do not specify a max-stale directive. Stale responses that
        # exceed the TTL configured here will not be served. The default limit
        # (max-stale) is 86400s (1 day), which will allow stale content to be
        # served up to this limit beyond the max-age (or s-maxage) of a cached
        # response.
        # The maximum allowed value is 604800 (1 week).
        # Set this to zero (0) to disable serve-while-stale.
        # Corresponds to the JSON property `serveWhileStale`
        # @return [Fixnum]
        attr_accessor :serve_while_stale
      
        # Maximum number of seconds the response to a signed URL request will be
        # considered fresh. After this time period, the response will be
        # revalidated before being served. Defaults to 1hr (3600s).  When serving
        # responses to signed URL requests, Cloud CDN will internally behave as
        # though all responses from this backend had a "Cache-Control:
        # public, max-age=[TTL]" header, regardless of any existing
        # Cache-Control header. The actual headers served in responses will not be
        # altered.
        # Corresponds to the JSON property `signedUrlCacheMaxAgeSec`
        # @return [Fixnum]
        attr_accessor :signed_url_cache_max_age_sec
      
        # [Output Only] Names of the keys for signing request URLs.
        # Corresponds to the JSON property `signedUrlKeyNames`
        # @return [Array<String>]
        attr_accessor :signed_url_key_names
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bypass_cache_on_request_headers = args[:bypass_cache_on_request_headers] if args.key?(:bypass_cache_on_request_headers)
          @cache_key_policy = args[:cache_key_policy] if args.key?(:cache_key_policy)
          @cache_mode = args[:cache_mode] if args.key?(:cache_mode)
          @client_ttl = args[:client_ttl] if args.key?(:client_ttl)
          @default_ttl = args[:default_ttl] if args.key?(:default_ttl)
          @max_ttl = args[:max_ttl] if args.key?(:max_ttl)
          @negative_caching = args[:negative_caching] if args.key?(:negative_caching)
          @negative_caching_policy = args[:negative_caching_policy] if args.key?(:negative_caching_policy)
          @request_coalescing = args[:request_coalescing] if args.key?(:request_coalescing)
          @serve_while_stale = args[:serve_while_stale] if args.key?(:serve_while_stale)
          @signed_url_cache_max_age_sec = args[:signed_url_cache_max_age_sec] if args.key?(:signed_url_cache_max_age_sec)
          @signed_url_key_names = args[:signed_url_key_names] if args.key?(:signed_url_key_names)
        end
      end
      
      # Bypass the cache when the specified request headers are present,
      # e.g. Pragma or Authorization headers. Values are case insensitive.
      # The presence of such a header overrides the cache_mode setting.
      class BackendBucketCdnPolicyBypassCacheOnRequestHeader
        include Google::Apis::Core::Hashable
      
        # The header field name to match on when bypassing cache.
        # Values are case-insensitive.
        # Corresponds to the JSON property `headerName`
        # @return [String]
        attr_accessor :header_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @header_name = args[:header_name] if args.key?(:header_name)
        end
      end
      
      # Message containing what to include in the cache key for a request for
      # Cloud CDN.
      class BackendBucketCdnPolicyCacheKeyPolicy
        include Google::Apis::Core::Hashable
      
        # Allows HTTP request headers (by name) to be used in the cache key.
        # Corresponds to the JSON property `includeHttpHeaders`
        # @return [Array<String>]
        attr_accessor :include_http_headers
      
        # Names of query string parameters to include in cache keys. Default
        # parameters are always included. '&' and '=' will be percent encoded
        # and not treated as delimiters.
        # Corresponds to the JSON property `queryStringWhitelist`
        # @return [Array<String>]
        attr_accessor :query_string_whitelist
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @include_http_headers = args[:include_http_headers] if args.key?(:include_http_headers)
          @query_string_whitelist = args[:query_string_whitelist] if args.key?(:query_string_whitelist)
        end
      end
      
      # Specify CDN TTLs for response error codes.
      class BackendBucketCdnPolicyNegativeCachingPolicy
        include Google::Apis::Core::Hashable
      
        # The HTTP status code to define a TTL against. Only HTTP status codes
        # 300, 301, 302, 307, 308, 404, 405, 410, 421, 451 and 501 can be
        # specified as values, and you cannot specify a status code more than
        # once.
        # Corresponds to the JSON property `code`
        # @return [Fixnum]
        attr_accessor :code
      
        # The TTL (in seconds) for which to cache responses with the
        # corresponding status code.
        # The maximum allowed value is 1800s (30 minutes), noting that
        # infrequently accessed objects may be evicted from the cache before the
        # defined TTL.
        # Corresponds to the JSON property `ttl`
        # @return [Fixnum]
        attr_accessor :ttl
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @code = args[:code] if args.key?(:code)
          @ttl = args[:ttl] if args.key?(:ttl)
        end
      end
      
      # Contains a list of BackendBucket resources.
      class BackendBucketList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of BackendBucket resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::BackendBucket>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::BackendBucketList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::BackendBucketList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Additional Backend Bucket parameters.
      class BackendBucketParams
        include Google::Apis::Core::Hashable
      
        # Tag keys/values directly bound to this resource.
        # Tag keys and values have the same definition as resource
        # manager tags. The field is allowed for INSERT
        # only. The keys/values to set on the resource should be specified in
        # either ID ` : ` or Namespaced format
        # ` : `.
        # For example the following are valid inputs:
        # * `"tagKeys/333" : "tagValues/444", "tagKeys/123" : "tagValues/456"`
        # * `"123/environment" : "production", "345/abc" : "xyz"`
        # Note:
        # * Invalid combinations of ID & namespaced format is not supported. For
        # instance: `"123/environment" : "tagValues/444"` is invalid.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # 
      class BackendBucketUsedBy
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Server-defined URL for UrlMaps referencing that
        # BackendBucket.
        # Corresponds to the JSON property `reference`
        # @return [String]
        attr_accessor :reference
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @reference = args[:reference] if args.key?(:reference)
        end
      end
      
      # Custom Metrics are used for CUSTOM_METRICS balancing_mode.
      class BackendCustomMetric
        include Google::Apis::Core::Hashable
      
        # If true, the metric data is collected and reported to Cloud
        # Monitoring, but is not used for load balancing.
        # Corresponds to the JSON property `dryRun`
        # @return [Boolean]
        attr_accessor :dry_run
        alias_method :dry_run?, :dry_run
      
        # Optional parameter to define a target utilization for the Custom Metrics
        # balancing mode. The valid range is [0.0, 1.0].
        # Corresponds to the JSON property `maxUtilization`
        # @return [Float]
        attr_accessor :max_utilization
      
        # Name of a custom utilization signal. The name must be 1-64 characters
        # long and match the regular expression
        # `[a-z]([-_.a-z0-9]*[a-z0-9])?` which means that the
        # first character must be a lowercase letter, and all following
        # characters must be a dash, period, underscore, lowercase letter, or
        # digit, except the last character, which cannot be a dash, period, or
        # underscore. For usage guidelines, see Custom Metrics balancing mode. This
        # field can only be used for a global or regional backend service with the
        # loadBalancingScheme set to EXTERNAL_MANAGED,INTERNAL_MANAGED
        # INTERNAL_SELF_MANAGED.
        # 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)
          @dry_run = args[:dry_run] if args.key?(:dry_run)
          @max_utilization = args[:max_utilization] if args.key?(:max_utilization)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Represents a Backend Service resource.
      # A backend service defines how Google Cloud load balancers distribute traffic.
      # The backend service configuration contains a set of values, such as the
      # protocol used to connect to backends, various distribution and session
      # settings, health checks, and timeouts. These settings provide fine-grained
      # control over how your load balancer behaves. Most of the settings have
      # default values that allow for easy configuration if you need to get started
      # quickly.
      # Backend services in Google Compute Engine can be either regionally or
      # globally scoped.
      # * [Global](https://cloud.google.com/compute/docs/reference/rest/v1/
      # backendServices)
      # * [Regional](https://cloud.google.com/compute/docs/reference/rest/v1/
      # regionBackendServices)
      # For more information, seeBackend
      # Services.
      class BackendService
        include Google::Apis::Core::Hashable
      
        # Lifetime of cookies in seconds. This setting is applicable to Application
        # Load Balancers and Traffic Director and requires
        # GENERATED_COOKIE or HTTP_COOKIE session affinity.
        # If set to 0, the cookie is non-persistent and lasts only until
        # the end of the browser session (or equivalent). The maximum allowed value
        # is two weeks (1,209,600).
        # Not supported when the backend service is referenced by a URL map that is
        # bound to target gRPC proxy that has validateForProxyless field set to true.
        # Corresponds to the JSON property `affinityCookieTtlSec`
        # @return [Fixnum]
        attr_accessor :affinity_cookie_ttl_sec
      
        # The list of backends that serve this BackendService.
        # Corresponds to the JSON property `backends`
        # @return [Array<Google::Apis::ComputeV1::Backend>]
        attr_accessor :backends
      
        # Message containing Cloud CDN configuration for a backend service.
        # Corresponds to the JSON property `cdnPolicy`
        # @return [Google::Apis::ComputeV1::BackendServiceCdnPolicy]
        attr_accessor :cdn_policy
      
        # Settings controlling the volume of requests, connections and retries to this
        # backend service.
        # Corresponds to the JSON property `circuitBreakers`
        # @return [Google::Apis::ComputeV1::CircuitBreakers]
        attr_accessor :circuit_breakers
      
        # Compress text responses using Brotli or gzip compression, based on
        # the client's Accept-Encoding header.
        # Corresponds to the JSON property `compressionMode`
        # @return [String]
        attr_accessor :compression_mode
      
        # Message containing connection draining configuration.
        # Corresponds to the JSON property `connectionDraining`
        # @return [Google::Apis::ComputeV1::ConnectionDraining]
        attr_accessor :connection_draining
      
        # Connection Tracking configuration for this BackendService.
        # Corresponds to the JSON property `connectionTrackingPolicy`
        # @return [Google::Apis::ComputeV1::BackendServiceConnectionTrackingPolicy]
        attr_accessor :connection_tracking_policy
      
        # This message defines settings for a consistent hash style load balancer.
        # Corresponds to the JSON property `consistentHash`
        # @return [Google::Apis::ComputeV1::ConsistentHashLoadBalancerSettings]
        attr_accessor :consistent_hash
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # List of custom metrics that are used for theWEIGHTED_ROUND_ROBIN
        # locality_lb_policy.
        # Corresponds to the JSON property `customMetrics`
        # @return [Array<Google::Apis::ComputeV1::BackendServiceCustomMetric>]
        attr_accessor :custom_metrics
      
        # Headers that the load balancer adds to proxied requests. See [Creating
        # custom
        # headers](https://cloud.google.com/load-balancing/docs/custom-headers).
        # Corresponds to the JSON property `customRequestHeaders`
        # @return [Array<String>]
        attr_accessor :custom_request_headers
      
        # Headers that the load balancer adds to proxied responses. See [Creating
        # custom
        # headers](https://cloud.google.com/load-balancing/docs/custom-headers).
        # Corresponds to the JSON property `customResponseHeaders`
        # @return [Array<String>]
        attr_accessor :custom_response_headers
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The resource URL for the edge security policy associated with
        # this backend service.
        # Corresponds to the JSON property `edgeSecurityPolicy`
        # @return [String]
        attr_accessor :edge_security_policy
      
        # If true, enables Cloud CDN for the backend service of a
        # global external Application Load Balancer.
        # Corresponds to the JSON property `enableCDN`
        # @return [Boolean]
        attr_accessor :enable_cdn
        alias_method :enable_cdn?, :enable_cdn
      
        # Specifies the canary migration state. Possible values are PREPARE,
        # TEST_BY_PERCENTAGE, and TEST_ALL_TRAFFIC.
        # To begin the migration from EXTERNAL to EXTERNAL_MANAGED, the state must be
        # changed to PREPARE. The state must be changed to TEST_ALL_TRAFFIC before
        # the loadBalancingScheme can be changed to EXTERNAL_MANAGED. Optionally, the
        # TEST_BY_PERCENTAGE state can be used to migrate traffic by percentage using
        # externalManagedMigrationTestingPercentage.
        # Rolling back a migration requires the states to be set in reverse order. So
        # changing the scheme from EXTERNAL_MANAGED to EXTERNAL requires the state to
        # be set to TEST_ALL_TRAFFIC at the same time. Optionally, the
        # TEST_BY_PERCENTAGE state can be used to migrate some traffic back to
        # EXTERNAL or PREPARE can be used to migrate all traffic back to EXTERNAL.
        # Corresponds to the JSON property `externalManagedMigrationState`
        # @return [String]
        attr_accessor :external_managed_migration_state
      
        # Determines the fraction of requests that should be processed by the Global
        # external Application Load Balancer.
        # The value of this field must be in the range [0, 100].
        # Session affinity options will slightly affect this routing behavior, for
        # more details, see:Session
        # Affinity.
        # This value can only be set if the loadBalancingScheme in the BackendService
        # is set to EXTERNAL (when using the classic Application Load Balancer) and
        # the migration state is TEST_BY_PERCENTAGE.
        # Corresponds to the JSON property `externalManagedMigrationTestingPercentage`
        # @return [Float]
        attr_accessor :external_managed_migration_testing_percentage
      
        # For load balancers that have configurable
        # failover:
        # [Internal passthrough Network Load
        # Balancers](https://cloud.google.com/load-balancing/docs/internal/failover-
        # overview)
        # and [external passthrough
        # Network Load
        # Balancers](https://cloud.google.com/load-balancing/docs/network/networklb-
        # failover-overview).
        # On failover or failback, this field indicates whether connection draining
        # will be honored. Google Cloud has a fixed connection draining timeout of
        # 10 minutes. A setting of true terminates existing TCP
        # connections to the active pool during failover and failback, immediately
        # draining traffic. A setting of false allows existing TCP
        # connections to persist, even on VMs no longer in the active pool, for up
        # to the duration of the connection draining timeout (10 minutes).
        # Corresponds to the JSON property `failoverPolicy`
        # @return [Google::Apis::ComputeV1::BackendServiceFailoverPolicy]
        attr_accessor :failover_policy
      
        # Fingerprint of this resource. A hash of the contents stored in this object.
        # This field is used in optimistic locking. This field will be ignored when
        # inserting a BackendService. An up-to-date fingerprint must be provided in
        # order to update the BackendService, otherwise the request will
        # fail with error 412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a BackendService.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Configures self-managed High Availability (HA) for External and Internal
        # Protocol Forwarding.
        # The backends of this regional backend service must only specify zonal
        # network endpoint groups (NEGs) of type GCE_VM_IP.
        # When haPolicy is set for an Internal Passthrough Network Load Balancer, the
        # regional backend service must set the network field. All zonal NEGs must
        # belong to the same network. However, individual NEGs can
        # belong to different subnetworks of that network.
        # When haPolicy is specified, the set of attached network endpoints across
        # all backends comprise an High Availability domain from which one endpoint
        # is selected as the active endpoint (the leader) that receives all
        # traffic.
        # haPolicy can be added only at backend service creation time. Once set up,
        # it cannot be deleted.
        # Note that haPolicy is not for load balancing, and therefore cannot be
        # specified with sessionAffinity, connectionTrackingPolicy, and
        # failoverPolicy.
        # haPolicy requires customers to be responsible for tracking backend
        # endpoint health and electing a leader among the healthy endpoints.
        # Therefore, haPolicy cannot be specified with healthChecks.
        # haPolicy can only be specified for External Passthrough Network Load
        # Balancers and Internal Passthrough Network Load Balancers.
        # Corresponds to the JSON property `haPolicy`
        # @return [Google::Apis::ComputeV1::BackendServiceHaPolicy]
        attr_accessor :ha_policy
      
        # The list of URLs to the healthChecks, httpHealthChecks (legacy), or
        # httpsHealthChecks (legacy) resource for health checking this backend
        # service. Not all backend services support legacy health checks. See
        # Load balancer guide. Currently, at most one health check can be
        # specified for each backend service. Backend services with
        # instance group or zonal NEG backends must have a health check unless
        # haPolicy is specified. Backend services with internet or serverless NEG
        # backends must not have a health check.
        # healthChecks[] cannot be specified with haPolicy.
        # Corresponds to the JSON property `healthChecks`
        # @return [Array<String>]
        attr_accessor :health_checks
      
        # Identity-Aware Proxy
        # Corresponds to the JSON property `iap`
        # @return [Google::Apis::ComputeV1::BackendServiceIap]
        attr_accessor :iap
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Specifies a preference for traffic sent from the proxy to the backend (or
        # from the client to the backend for proxyless gRPC).
        # The possible values are:
        # 
        # - IPV4_ONLY: Only send IPv4 traffic to the backends of the
        # backend service (Instance Group, Managed Instance Group, Network Endpoint
        # Group), regardless of traffic from the client to the proxy. Only IPv4
        # health checks are used to check the health of the backends. This is the
        # default setting.
        # - PREFER_IPV6: Prioritize the connection to the endpoint's
        # IPv6 address over its IPv4 address (provided there is a healthy IPv6
        # address).
        # - IPV6_ONLY: Only send IPv6 traffic to the backends of the
        # backend service (Instance Group, Managed Instance Group, Network Endpoint
        # Group), regardless of traffic from the client to the proxy. Only IPv6
        # health checks are used to check the health of the backends.
        # This field is applicable to either:
        # 
        # -  Advanced global external Application Load Balancer (load balancing
        # scheme EXTERNAL_MANAGED),
        # -  Regional external Application Load
        # Balancer,
        # -  Internal proxy Network Load Balancer (load balancing
        # scheme INTERNAL_MANAGED),
        # -  Regional internal Application Load
        # Balancer (load balancing scheme INTERNAL_MANAGED),
        # -  Traffic
        # Director with Envoy proxies and proxyless gRPC (load balancing scheme
        # INTERNAL_SELF_MANAGED).
        # Corresponds to the JSON property `ipAddressSelectionPolicy`
        # @return [String]
        attr_accessor :ip_address_selection_policy
      
        # Output only. [Output Only] Type of resource. Always compute#backendService
        # for backend services.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Specifies the load balancer type. A backend service
        # created for one type of load balancer cannot be used with another.
        # For more information, refer toChoosing
        # a load balancer.
        # Corresponds to the JSON property `loadBalancingScheme`
        # @return [String]
        attr_accessor :load_balancing_scheme
      
        # A list of locality load-balancing policies to be used in order of
        # preference. When you use localityLbPolicies, you must set at least one
        # value for either the localityLbPolicies[].policy or the
        # localityLbPolicies[].customPolicy field. localityLbPolicies overrides any
        # value set in the localityLbPolicy field.
        # For an example of how to use this field, seeDefine
        # a list of preferred policies.
        # Caution: This field and its children are intended for use in a service mesh
        # that includes gRPC clients only. Envoy proxies can't use backend services
        # that have this configuration.
        # Corresponds to the JSON property `localityLbPolicies`
        # @return [Array<Google::Apis::ComputeV1::BackendServiceLocalityLoadBalancingPolicyConfig>]
        attr_accessor :locality_lb_policies
      
        # The load balancing algorithm used within the scope of the locality. The
        # possible values are:
        # 
        # - ROUND_ROBIN: This is a simple policy in which each healthy
        # backend is selected in round robin order. This is the default.
        # - LEAST_REQUEST: An O(1) algorithm which
        # selects two random healthy hosts and picks the host which has fewer active
        # requests.
        # - RING_HASH: The ring/modulo hash load balancer implements
        # consistent hashing to backends. The algorithm has the property that the
        # addition/removal of a host from a set of N hosts only affects 1/N of the
        # requests.
        # - RANDOM: The load balancer selects a random healthy
        # host.
        # - ORIGINAL_DESTINATION: Backend host is selected
        # based on the client connection metadata, i.e., connections are opened to
        # the same address as the destination address of the incoming connection
        # before the connection was redirected to the load balancer.
        # - MAGLEV: used as a drop in replacement for the ring hash
        # load balancer. Maglev is not as stable as ring hash but has faster table
        # lookup build times and host selection times. For more information about
        # Maglev, see Maglev:
        # A Fast and Reliable Software Network Load Balancer.
        # - WEIGHTED_ROUND_ROBIN: Per-endpoint Weighted Round Robin
        # Load Balancing using weights computed from Backend reported Custom Metrics.
        # If set, the Backend Service responses are expected to contain non-standard
        # HTTP response header field Endpoint-Load-Metrics. The reported
        # metrics to use for computing the weights are specified via thecustomMetrics
        # field.
        # 
        # This field is applicable to either:
        # - A regional backend service with the service_protocol set to HTTP,
        # HTTPS, HTTP2 or H2C, and load_balancing_scheme set to
        # INTERNAL_MANAGED.
        # - A global backend service with the
        # load_balancing_scheme set to INTERNAL_SELF_MANAGED, INTERNAL_MANAGED, or
        # EXTERNAL_MANAGED.
        # 
        # 
        # If sessionAffinity is not configured—that is, if session
        # affinity remains at the default value of NONE—then the
        # default value for localityLbPolicy
        # is ROUND_ROBIN. If session affinity is set to a value other
        # than NONE,
        # then the default value for localityLbPolicy isMAGLEV.
        # 
        # Only ROUND_ROBIN and RING_HASH are supported
        # when the backend service is referenced by a URL map that is bound to
        # target gRPC proxy that has validateForProxyless field set to true.
        # 
        # localityLbPolicy cannot be specified with haPolicy.
        # Corresponds to the JSON property `localityLbPolicy`
        # @return [String]
        attr_accessor :locality_lb_policy
      
        # The available logging options for the load balancer traffic served by this
        # backend service.
        # Corresponds to the JSON property `logConfig`
        # @return [Google::Apis::ComputeV1::BackendServiceLogConfig]
        attr_accessor :log_config
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `maxStreamDuration`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :max_stream_duration
      
        # Deployment metadata associated with the resource to be set by a GKE hub
        # controller and read by the backend RCTH
        # Corresponds to the JSON property `metadatas`
        # @return [Hash<String,String>]
        attr_accessor :metadatas
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The URL of the network to which this backend service belongs.
        # This field must be set for Internal Passthrough Network Load Balancers when
        # the haPolicy is enabled, and for External Passthrough Network Load
        # Balancers when the haPolicy fastIpMove is enabled.
        # This field can only be specified when the load balancing scheme is set
        # toINTERNAL, or when the load balancing scheme is set toEXTERNAL and haPolicy
        # fastIpMove is enabled.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # Configures traffic steering properties of internal passthrough Network
        # Load Balancers.
        # networkPassThroughLbTrafficPolicy cannot be specified with haPolicy.
        # Corresponds to the JSON property `networkPassThroughLbTrafficPolicy`
        # @return [Google::Apis::ComputeV1::BackendServiceNetworkPassThroughLbTrafficPolicy]
        attr_accessor :network_pass_through_lb_traffic_policy
      
        # Settings controlling the eviction of unhealthy hosts from the load balancing
        # pool for the backend service.
        # Corresponds to the JSON property `outlierDetection`
        # @return [Google::Apis::ComputeV1::OutlierDetection]
        attr_accessor :outlier_detection
      
        # Additional Backend Service parameters.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::BackendServiceParams]
        attr_accessor :params
      
        # Deprecated in favor of portName. The TCP port to connect on
        # the backend. The default value is 80.
        # For internal passthrough Network Load Balancers and external passthrough
        # Network Load Balancers, omit port.
        # Corresponds to the JSON property `port`
        # @return [Fixnum]
        attr_accessor :port
      
        # A named port on a backend instance group representing the port for
        # communication to the backend VMs in that group. The
        # named port must be [defined on each backend instance
        # group](https://cloud.google.com/load-balancing/docs/backend-service#
        # named_ports).
        # This parameter has no meaning if the backends are NEGs. For internal
        # passthrough Network Load Balancers and external passthrough Network Load
        # Balancers, omit port_name.
        # Corresponds to the JSON property `portName`
        # @return [String]
        attr_accessor :port_name
      
        # The protocol this BackendService uses to communicate
        # with backends.
        # Possible values are HTTP, HTTPS, HTTP2, H2C, TCP, SSL, UDP or GRPC.
        # depending on the chosen load balancer or Traffic Director configuration.
        # Refer to the documentation for the load balancers or for Traffic Director
        # for more information.
        # Must be set to GRPC when the backend service is referenced by a URL map
        # that is bound to target gRPC proxy.
        # Corresponds to the JSON property `protocol`
        # @return [String]
        attr_accessor :protocol
      
        # Output only. [Output Only] URL of the region where the regional backend
        # service
        # resides. This field is not applicable to global backend services.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] The resource URL for the security policy associated with this
        # backend service.
        # Corresponds to the JSON property `securityPolicy`
        # @return [String]
        attr_accessor :security_policy
      
        # The authentication and authorization settings for a BackendService.
        # Corresponds to the JSON property `securitySettings`
        # @return [Google::Apis::ComputeV1::SecuritySettings]
        attr_accessor :security_settings
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # URLs of networkservices.ServiceBinding resources.
        # Can only be set if load balancing scheme is INTERNAL_SELF_MANAGED.
        # If set, lists of backends and health checks must be both empty.
        # Corresponds to the JSON property `serviceBindings`
        # @return [Array<String>]
        attr_accessor :service_bindings
      
        # URL to networkservices.ServiceLbPolicy resource.
        # Can only be set if load balancing scheme is EXTERNAL_MANAGED,
        # INTERNAL_MANAGED or INTERNAL_SELF_MANAGED and the scope is global.
        # Corresponds to the JSON property `serviceLbPolicy`
        # @return [String]
        attr_accessor :service_lb_policy
      
        # Type of session affinity to use. The default is NONE.
        # Only NONE and HEADER_FIELD are supported
        # when the backend service is referenced by a URL map that is bound to
        # target gRPC proxy that has validateForProxyless field set to true.
        # For more details, see:
        # [Session
        # Affinity](https://cloud.google.com/load-balancing/docs/backend-service#
        # session_affinity).
        # sessionAffinity cannot be specified with haPolicy.
        # Corresponds to the JSON property `sessionAffinity`
        # @return [String]
        attr_accessor :session_affinity
      
        # The HTTP cookie used for stateful session affinity.
        # Corresponds to the JSON property `strongSessionAffinityCookie`
        # @return [Google::Apis::ComputeV1::BackendServiceHttpCookie]
        attr_accessor :strong_session_affinity_cookie
      
        # Subsetting configuration for this BackendService.
        # Currently this is applicable only for Internal TCP/UDP load balancing,
        # Internal HTTP(S) load balancing and Traffic Director.
        # Corresponds to the JSON property `subsetting`
        # @return [Google::Apis::ComputeV1::Subsetting]
        attr_accessor :subsetting
      
        # The backend service timeout has a different meaning depending on the
        # type of load balancer. For more information see,
        # Backend service settings.
        # The default is 30 seconds.
        # The full range of timeout values allowed goes from 1
        # through 2,147,483,647 seconds.
        # This value can be overridden in the PathMatcher configuration of the
        # UrlMap that references this backend service.
        # Not supported when the backend service is referenced by a URL map that is
        # bound to target gRPC proxy that has validateForProxyless field set to true.
        # Instead, use maxStreamDuration.
        # Corresponds to the JSON property `timeoutSec`
        # @return [Fixnum]
        attr_accessor :timeout_sec
      
        # Configuration for Backend Authenticated TLS and mTLS. May only be specified
        # when the backend protocol is SSL, HTTPS or HTTP2.
        # Corresponds to the JSON property `tlsSettings`
        # @return [Google::Apis::ComputeV1::BackendServiceTlsSettings]
        attr_accessor :tls_settings
      
        # Output only. [Output Only] List of resources referencing given backend service.
        # Corresponds to the JSON property `usedBy`
        # @return [Array<Google::Apis::ComputeV1::BackendServiceUsedBy>]
        attr_accessor :used_by
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @affinity_cookie_ttl_sec = args[:affinity_cookie_ttl_sec] if args.key?(:affinity_cookie_ttl_sec)
          @backends = args[:backends] if args.key?(:backends)
          @cdn_policy = args[:cdn_policy] if args.key?(:cdn_policy)
          @circuit_breakers = args[:circuit_breakers] if args.key?(:circuit_breakers)
          @compression_mode = args[:compression_mode] if args.key?(:compression_mode)
          @connection_draining = args[:connection_draining] if args.key?(:connection_draining)
          @connection_tracking_policy = args[:connection_tracking_policy] if args.key?(:connection_tracking_policy)
          @consistent_hash = args[:consistent_hash] if args.key?(:consistent_hash)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @custom_metrics = args[:custom_metrics] if args.key?(:custom_metrics)
          @custom_request_headers = args[:custom_request_headers] if args.key?(:custom_request_headers)
          @custom_response_headers = args[:custom_response_headers] if args.key?(:custom_response_headers)
          @description = args[:description] if args.key?(:description)
          @edge_security_policy = args[:edge_security_policy] if args.key?(:edge_security_policy)
          @enable_cdn = args[:enable_cdn] if args.key?(:enable_cdn)
          @external_managed_migration_state = args[:external_managed_migration_state] if args.key?(:external_managed_migration_state)
          @external_managed_migration_testing_percentage = args[:external_managed_migration_testing_percentage] if args.key?(:external_managed_migration_testing_percentage)
          @failover_policy = args[:failover_policy] if args.key?(:failover_policy)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @ha_policy = args[:ha_policy] if args.key?(:ha_policy)
          @health_checks = args[:health_checks] if args.key?(:health_checks)
          @iap = args[:iap] if args.key?(:iap)
          @id = args[:id] if args.key?(:id)
          @ip_address_selection_policy = args[:ip_address_selection_policy] if args.key?(:ip_address_selection_policy)
          @kind = args[:kind] if args.key?(:kind)
          @load_balancing_scheme = args[:load_balancing_scheme] if args.key?(:load_balancing_scheme)
          @locality_lb_policies = args[:locality_lb_policies] if args.key?(:locality_lb_policies)
          @locality_lb_policy = args[:locality_lb_policy] if args.key?(:locality_lb_policy)
          @log_config = args[:log_config] if args.key?(:log_config)
          @max_stream_duration = args[:max_stream_duration] if args.key?(:max_stream_duration)
          @metadatas = args[:metadatas] if args.key?(:metadatas)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @network_pass_through_lb_traffic_policy = args[:network_pass_through_lb_traffic_policy] if args.key?(:network_pass_through_lb_traffic_policy)
          @outlier_detection = args[:outlier_detection] if args.key?(:outlier_detection)
          @params = args[:params] if args.key?(:params)
          @port = args[:port] if args.key?(:port)
          @port_name = args[:port_name] if args.key?(:port_name)
          @protocol = args[:protocol] if args.key?(:protocol)
          @region = args[:region] if args.key?(:region)
          @security_policy = args[:security_policy] if args.key?(:security_policy)
          @security_settings = args[:security_settings] if args.key?(:security_settings)
          @self_link = args[:self_link] if args.key?(:self_link)
          @service_bindings = args[:service_bindings] if args.key?(:service_bindings)
          @service_lb_policy = args[:service_lb_policy] if args.key?(:service_lb_policy)
          @session_affinity = args[:session_affinity] if args.key?(:session_affinity)
          @strong_session_affinity_cookie = args[:strong_session_affinity_cookie] if args.key?(:strong_session_affinity_cookie)
          @subsetting = args[:subsetting] if args.key?(:subsetting)
          @timeout_sec = args[:timeout_sec] if args.key?(:timeout_sec)
          @tls_settings = args[:tls_settings] if args.key?(:tls_settings)
          @used_by = args[:used_by] if args.key?(:used_by)
        end
      end
      
      # Contains a list of BackendServicesScopedList.
      class BackendServiceAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of BackendServicesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::BackendServicesScopedList>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::BackendServiceAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::BackendServiceAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Message containing Cloud CDN configuration for a backend service.
      class BackendServiceCdnPolicy
        include Google::Apis::Core::Hashable
      
        # Bypass the cache when the specified request headers are matched - e.g.
        # Pragma or Authorization headers. Up to 5 headers can be specified.
        # The cache is bypassed for all cdnPolicy.cacheMode settings.
        # Corresponds to the JSON property `bypassCacheOnRequestHeaders`
        # @return [Array<Google::Apis::ComputeV1::BackendServiceCdnPolicyBypassCacheOnRequestHeader>]
        attr_accessor :bypass_cache_on_request_headers
      
        # Message containing what to include in the cache key for a request for Cloud
        # CDN.
        # Corresponds to the JSON property `cacheKeyPolicy`
        # @return [Google::Apis::ComputeV1::CacheKeyPolicy]
        attr_accessor :cache_key_policy
      
        # Specifies the cache setting for all responses from this backend.
        # The possible values are:USE_ORIGIN_HEADERS Requires the origin to set valid
        # caching
        # headers to cache content. Responses without these headers will not be
        # cached at Google's edge, and will require a full trip to the origin on
        # every request, potentially impacting performance and increasing load on
        # the origin server.FORCE_CACHE_ALL Cache all content, ignoring any "private",
        # "no-store" or "no-cache" directives in Cache-Control response headers.
        # Warning: this may result in Cloud CDN caching private,
        # per-user (user identifiable) content.CACHE_ALL_STATIC Automatically cache
        # static content,
        # including common image formats, media (video and audio), and web assets
        # (JavaScript and CSS). Requests and responses that are marked as
        # uncacheable, as well as dynamic content (including HTML), will not be
        # cached.
        # If no value is provided for cdnPolicy.cacheMode, it defaults
        # to CACHE_ALL_STATIC.
        # Corresponds to the JSON property `cacheMode`
        # @return [String]
        attr_accessor :cache_mode
      
        # Specifies a separate client (e.g. browser client) maximum TTL. This is
        # used to clamp the max-age (or Expires) value sent to the client.  With
        # FORCE_CACHE_ALL, the lesser of client_ttl and default_ttl is used for the
        # response max-age directive, along with a "public" directive.  For
        # cacheable content in CACHE_ALL_STATIC mode, client_ttl clamps the max-age
        # from the origin (if specified), or else sets the response max-age
        # directive to the lesser of the client_ttl and default_ttl, and also
        # ensures a "public" cache-control directive is present.
        # If a client TTL is not specified, a default value (1 hour) will be used.
        # The maximum allowed value is 31,622,400s (1 year).
        # Corresponds to the JSON property `clientTtl`
        # @return [Fixnum]
        attr_accessor :client_ttl
      
        # Specifies the default TTL for cached content served by this origin for
        # responses that do not have an existing valid TTL (max-age or s-maxage).
        # Setting a TTL of "0" means "always revalidate".
        # The value of defaultTTL cannot be set to a value greater than that of
        # maxTTL, but can be equal.
        # When the cacheMode is set to FORCE_CACHE_ALL, the defaultTTL
        # will overwrite the TTL set in all responses. The maximum allowed value is
        # 31,622,400s (1 year), noting that infrequently accessed objects may be
        # evicted from the cache before the defined TTL.
        # Corresponds to the JSON property `defaultTtl`
        # @return [Fixnum]
        attr_accessor :default_ttl
      
        # Specifies the maximum allowed TTL for cached content served by this
        # origin.
        # Cache directives that attempt to set a max-age or s-maxage higher than
        # this, or an Expires header more than maxTTL seconds in the future will
        # be capped at the value of maxTTL, as if it were the value of an
        # s-maxage Cache-Control directive.
        # Headers sent to the client will not be modified.
        # Setting a TTL of "0" means "always revalidate".
        # The maximum allowed value is 31,622,400s (1 year), noting that
        # infrequently accessed objects may be evicted from the cache before
        # the defined TTL.
        # Corresponds to the JSON property `maxTtl`
        # @return [Fixnum]
        attr_accessor :max_ttl
      
        # Negative caching allows per-status code TTLs to be set, in order
        # to apply fine-grained caching for common errors or redirects.
        # This can reduce the load on your origin and improve end-user
        # experience by reducing response latency.
        # When the cache mode is set to CACHE_ALL_STATIC or USE_ORIGIN_HEADERS,
        # negative caching applies to responses with the specified response code
        # that lack any Cache-Control, Expires, or Pragma: no-cache directives.
        # When the cache mode is set to FORCE_CACHE_ALL, negative caching applies
        # to all responses with the specified response code, and override any
        # caching headers.
        # By default, Cloud CDN will apply the following default TTLs to these
        # status codes:
        # HTTP 300 (Multiple Choice), 301, 308 (Permanent Redirects): 10m
        # HTTP 404 (Not Found), 410 (Gone),
        # 451 (Unavailable For Legal Reasons): 120s
        # HTTP 405 (Method Not Found), 501 (Not Implemented): 60s.
        # These defaults can be overridden in negative_caching_policy.
        # Corresponds to the JSON property `negativeCaching`
        # @return [Boolean]
        attr_accessor :negative_caching
        alias_method :negative_caching?, :negative_caching
      
        # Sets a cache TTL for the specified HTTP status code.
        # negative_caching must be enabled to configure negative_caching_policy.
        # Omitting the policy and leaving negative_caching enabled will use
        # Cloud CDN's default cache TTLs.
        # Note that when specifying an explicit negative_caching_policy, you
        # should take care to specify a cache TTL for all response codes
        # that you wish to cache. Cloud CDN will not apply any default
        # negative caching when a policy exists.
        # Corresponds to the JSON property `negativeCachingPolicy`
        # @return [Array<Google::Apis::ComputeV1::BackendServiceCdnPolicyNegativeCachingPolicy>]
        attr_accessor :negative_caching_policy
      
        # If true then Cloud CDN will combine multiple concurrent cache fill
        # requests into a small number of requests to the origin.
        # Corresponds to the JSON property `requestCoalescing`
        # @return [Boolean]
        attr_accessor :request_coalescing
        alias_method :request_coalescing?, :request_coalescing
      
        # Serve existing content from the cache (if available) when revalidating
        # content with the origin, or when an error is encountered when refreshing
        # the cache.
        # This setting defines the default "max-stale" duration for any cached
        # responses that do not specify a max-stale directive. Stale responses that
        # exceed the TTL configured here will not be served. The default limit
        # (max-stale) is 86400s (1 day), which will allow stale content to be
        # served up to this limit beyond the max-age (or s-maxage) of a cached
        # response.
        # The maximum allowed value is 604800 (1 week).
        # Set this to zero (0) to disable serve-while-stale.
        # Corresponds to the JSON property `serveWhileStale`
        # @return [Fixnum]
        attr_accessor :serve_while_stale
      
        # Maximum number of seconds the response to a signed URL request will be
        # considered fresh. After this time period, the response will be
        # revalidated before being served. Defaults to 1hr (3600s).  When serving
        # responses to signed URL requests, Cloud CDN will internally behave as
        # though all responses from this backend had a "Cache-Control:
        # public, max-age=[TTL]" header, regardless of any existing
        # Cache-Control header. The actual headers served in responses will not be
        # altered.
        # Corresponds to the JSON property `signedUrlCacheMaxAgeSec`
        # @return [Fixnum]
        attr_accessor :signed_url_cache_max_age_sec
      
        # [Output Only] Names of the keys for signing request URLs.
        # Corresponds to the JSON property `signedUrlKeyNames`
        # @return [Array<String>]
        attr_accessor :signed_url_key_names
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bypass_cache_on_request_headers = args[:bypass_cache_on_request_headers] if args.key?(:bypass_cache_on_request_headers)
          @cache_key_policy = args[:cache_key_policy] if args.key?(:cache_key_policy)
          @cache_mode = args[:cache_mode] if args.key?(:cache_mode)
          @client_ttl = args[:client_ttl] if args.key?(:client_ttl)
          @default_ttl = args[:default_ttl] if args.key?(:default_ttl)
          @max_ttl = args[:max_ttl] if args.key?(:max_ttl)
          @negative_caching = args[:negative_caching] if args.key?(:negative_caching)
          @negative_caching_policy = args[:negative_caching_policy] if args.key?(:negative_caching_policy)
          @request_coalescing = args[:request_coalescing] if args.key?(:request_coalescing)
          @serve_while_stale = args[:serve_while_stale] if args.key?(:serve_while_stale)
          @signed_url_cache_max_age_sec = args[:signed_url_cache_max_age_sec] if args.key?(:signed_url_cache_max_age_sec)
          @signed_url_key_names = args[:signed_url_key_names] if args.key?(:signed_url_key_names)
        end
      end
      
      # Bypass the cache when the specified request headers are present,
      # e.g. Pragma or Authorization headers. Values are case insensitive.
      # The presence of such a header overrides the cache_mode setting.
      class BackendServiceCdnPolicyBypassCacheOnRequestHeader
        include Google::Apis::Core::Hashable
      
        # The header field name to match on when bypassing cache.
        # Values are case-insensitive.
        # Corresponds to the JSON property `headerName`
        # @return [String]
        attr_accessor :header_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @header_name = args[:header_name] if args.key?(:header_name)
        end
      end
      
      # Specify CDN TTLs for response error codes.
      class BackendServiceCdnPolicyNegativeCachingPolicy
        include Google::Apis::Core::Hashable
      
        # The HTTP status code to define a TTL against. Only HTTP status codes
        # 300, 301, 302, 307, 308, 404, 405, 410, 421, 451 and 501 can be
        # specified as values, and you cannot specify a status code more than
        # once.
        # Corresponds to the JSON property `code`
        # @return [Fixnum]
        attr_accessor :code
      
        # The TTL (in seconds) for which to cache responses with the
        # corresponding status code.
        # The maximum allowed value is 1800s (30 minutes), noting that
        # infrequently accessed objects may be evicted from the cache before the
        # defined TTL.
        # Corresponds to the JSON property `ttl`
        # @return [Fixnum]
        attr_accessor :ttl
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @code = args[:code] if args.key?(:code)
          @ttl = args[:ttl] if args.key?(:ttl)
        end
      end
      
      # Connection Tracking configuration for this BackendService.
      class BackendServiceConnectionTrackingPolicy
        include Google::Apis::Core::Hashable
      
        # Specifies connection persistence when backends are unhealthy. The default
        # value is DEFAULT_FOR_PROTOCOL.
        # If set to DEFAULT_FOR_PROTOCOL, the existing connections
        # persist on unhealthy backends only for connection-oriented protocols
        # (TCP and SCTP) and only if the Tracking Mode isPER_CONNECTION (default
        # tracking mode) or the Session
        # Affinity is configured for 5-tuple. They do not persist forUDP.
        # If set to NEVER_PERSIST, after a backend becomes unhealthy,
        # the existing connections on the unhealthy backend are never persisted on
        # the unhealthy backend. They are always diverted to newly selected healthy
        # backends (unless all backends are unhealthy).
        # If set to ALWAYS_PERSIST, existing connections always
        # persist on unhealthy backends regardless of protocol and session
        # affinity. It is generally not recommended to use this mode overriding the
        # default.
        # For more details, see [Connection Persistence for Network Load
        # Balancing](https://cloud.google.com/load-balancing/docs/network/networklb-
        # backend-service#connection-persistence)
        # and [Connection Persistence for Internal TCP/UDP Load
        # Balancing](https://cloud.google.com/load-balancing/docs/internal#connection-
        # persistence).
        # Corresponds to the JSON property `connectionPersistenceOnUnhealthyBackends`
        # @return [String]
        attr_accessor :connection_persistence_on_unhealthy_backends
      
        # Enable Strong Session Affinity for external passthrough Network Load
        # Balancers. This option is not available publicly.
        # Corresponds to the JSON property `enableStrongAffinity`
        # @return [Boolean]
        attr_accessor :enable_strong_affinity
        alias_method :enable_strong_affinity?, :enable_strong_affinity
      
        # Specifies how long to keep a Connection Tracking entry while there is no
        # matching traffic (in seconds).
        # For internal passthrough Network Load Balancers:
        # 
        # - The minimum (default) is 10 minutes and the maximum is 16 hours.
        # - It can be set only if Connection Tracking is less than 5-tuple
        # (i.e. Session Affinity is CLIENT_IP_NO_DESTINATION,CLIENT_IP or
        # CLIENT_IP_PROTO, and Tracking
        # Mode is PER_SESSION).
        # For external passthrough Network Load Balancers the default is 60
        # seconds. This option is not available publicly.
        # Corresponds to the JSON property `idleTimeoutSec`
        # @return [Fixnum]
        attr_accessor :idle_timeout_sec
      
        # Specifies the key used for connection tracking. There are two
        # options:
        # 
        # - PER_CONNECTION: This is the default mode. The Connection
        # Tracking is performed as per the Connection Key (default Hash Method) for
        # the specific protocol.
        # - PER_SESSION: The Connection Tracking is performed as per
        # the configured Session Affinity. It matches the configured Session
        # Affinity.
        # For more details, see [Tracking Mode for Network Load
        # Balancing](https://cloud.google.com/load-balancing/docs/network/networklb-
        # backend-service#tracking-mode)
        # and [Tracking Mode for Internal TCP/UDP Load
        # Balancing](https://cloud.google.com/load-balancing/docs/internal#tracking-mode)
        # .
        # Corresponds to the JSON property `trackingMode`
        # @return [String]
        attr_accessor :tracking_mode
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @connection_persistence_on_unhealthy_backends = args[:connection_persistence_on_unhealthy_backends] if args.key?(:connection_persistence_on_unhealthy_backends)
          @enable_strong_affinity = args[:enable_strong_affinity] if args.key?(:enable_strong_affinity)
          @idle_timeout_sec = args[:idle_timeout_sec] if args.key?(:idle_timeout_sec)
          @tracking_mode = args[:tracking_mode] if args.key?(:tracking_mode)
        end
      end
      
      # Custom Metrics are used for WEIGHTED_ROUND_ROBIN
      # locality_lb_policy.
      class BackendServiceCustomMetric
        include Google::Apis::Core::Hashable
      
        # If true, the metric data is not used for load balancing.
        # Corresponds to the JSON property `dryRun`
        # @return [Boolean]
        attr_accessor :dry_run
        alias_method :dry_run?, :dry_run
      
        # Name of a custom utilization signal. The name must be 1-64 characters
        # long and match the regular expression
        # `[a-z]([-_.a-z0-9]*[a-z0-9])?` which means that the
        # first character must be a lowercase letter, and all following
        # characters must be a dash, period, underscore, lowercase letter, or
        # digit, except the last character, which cannot be a dash, period, or
        # underscore. For usage guidelines, see Custom Metrics balancing mode. This
        # field can only be used for a global or regional backend service with the
        # loadBalancingScheme set to EXTERNAL_MANAGED,INTERNAL_MANAGED
        # INTERNAL_SELF_MANAGED.
        # 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)
          @dry_run = args[:dry_run] if args.key?(:dry_run)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # For load balancers that have configurable
      # failover:
      # [Internal passthrough Network Load
      # Balancers](https://cloud.google.com/load-balancing/docs/internal/failover-
      # overview)
      # and [external passthrough
      # Network Load
      # Balancers](https://cloud.google.com/load-balancing/docs/network/networklb-
      # failover-overview).
      # On failover or failback, this field indicates whether connection draining
      # will be honored. Google Cloud has a fixed connection draining timeout of
      # 10 minutes. A setting of true terminates existing TCP
      # connections to the active pool during failover and failback, immediately
      # draining traffic. A setting of false allows existing TCP
      # connections to persist, even on VMs no longer in the active pool, for up
      # to the duration of the connection draining timeout (10 minutes).
      class BackendServiceFailoverPolicy
        include Google::Apis::Core::Hashable
      
        # This can be set to true only if the protocol isTCP.
        # The default is false.
        # Corresponds to the JSON property `disableConnectionDrainOnFailover`
        # @return [Boolean]
        attr_accessor :disable_connection_drain_on_failover
        alias_method :disable_connection_drain_on_failover?, :disable_connection_drain_on_failover
      
        # If set to true, connections to the
        # load balancer are dropped when all primary and all backup backend VMs are
        # unhealthy.If set to false, connections are distributed
        # among all primary VMs when all primary and all backup backend VMs are
        # unhealthy.
        # For load balancers that have configurable
        # failover:
        # [Internal passthrough
        # Network Load
        # Balancers](https://cloud.google.com/load-balancing/docs/internal/failover-
        # overview)
        # and [external passthrough
        # Network Load
        # Balancers](https://cloud.google.com/load-balancing/docs/network/networklb-
        # failover-overview).
        # The default is false.
        # Corresponds to the JSON property `dropTrafficIfUnhealthy`
        # @return [Boolean]
        attr_accessor :drop_traffic_if_unhealthy
        alias_method :drop_traffic_if_unhealthy?, :drop_traffic_if_unhealthy
      
        # The value of the field must be in the range[0, 1]. If the value is 0, the load
        # balancer performs a
        # failover when the number of healthy primary VMs equals zero.
        # For all other values, the load balancer performs a failover when the
        # total number of healthy primary VMs is less than this ratio.
        # For load balancers that have configurable
        # failover:
        # [Internal TCP/UDP Load
        # Balancing](https://cloud.google.com/load-balancing/docs/internal/failover-
        # overview)
        # and [external TCP/UDP Load
        # Balancing](https://cloud.google.com/load-balancing/docs/network/networklb-
        # failover-overview).
        # Corresponds to the JSON property `failoverRatio`
        # @return [Float]
        attr_accessor :failover_ratio
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disable_connection_drain_on_failover = args[:disable_connection_drain_on_failover] if args.key?(:disable_connection_drain_on_failover)
          @drop_traffic_if_unhealthy = args[:drop_traffic_if_unhealthy] if args.key?(:drop_traffic_if_unhealthy)
          @failover_ratio = args[:failover_ratio] if args.key?(:failover_ratio)
        end
      end
      
      # 
      class BackendServiceGroupHealth
        include Google::Apis::Core::Hashable
      
        # Metadata defined as annotations on the network endpoint group.
        # Corresponds to the JSON property `annotations`
        # @return [Hash<String,String>]
        attr_accessor :annotations
      
        # Health state of the backend instances or endpoints in requested instance or
        # network endpoint group, determined based on configured health checks.
        # Corresponds to the JSON property `healthStatus`
        # @return [Array<Google::Apis::ComputeV1::HealthStatus>]
        attr_accessor :health_status
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # backendServiceGroupHealth for the health of backend
        # services.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @annotations = args[:annotations] if args.key?(:annotations)
          @health_status = args[:health_status] if args.key?(:health_status)
          @kind = args[:kind] if args.key?(:kind)
        end
      end
      
      # 
      class BackendServiceHaPolicy
        include Google::Apis::Core::Hashable
      
        # Specifies whether fast IP move is enabled, and if so, the mechanism to
        # achieve it.
        # Supported values are:
        # 
        # - DISABLED: Fast IP Move is disabled. You can only use the
        # haPolicy.leader API to update the leader.
        # - >GARP_RA: Provides a method to very quickly define a new network
        # endpoint as the leader. This method is faster than updating the leader
        # using the haPolicy.leader API. Fast IP move works as follows: The VM
        # hosting the network endpoint that should become the new leader sends
        # either a Gratuitous ARP (GARP) packet (IPv4) or an ICMPv6 Router
        # Advertisement(RA) packet (IPv6).  Google Cloud immediately but
        # temporarily associates the forwarding rule IP address with that VM, and
        # both new and in-flight packets are quickly delivered to that VM.
        # Note the important properties of the Fast IP Move functionality:
        # 
        # - The GARP/RA-initiated re-routing stays active for approximately 20
        # minutes. After triggering fast failover, you must also
        # appropriately set the haPolicy.leader.
        # -  The new leader instance should continue to send GARP/RA packets
        # periodically every 10 seconds until at least 10 minutes after updating
        # the haPolicy.leader (but stop immediately if it is no longer the leader).
        # - After triggering a fast failover, we recommend that you wait at least
        # 3 seconds before sending another GARP/RA packet from a different VM
        # instance to avoid race conditions.
        # - Don't send GARP/RA packets from different VM
        # instances at the same time. If multiple instances continue to send
        # GARP/RA packets, traffic might be routed to different destinations in an
        # alternating order. This condition ceases when a single instance
        # issues a GARP/RA packet.
        # - The GARP/RA request always takes priority over the leader API.
        # Using the haPolicy.leader API to change the leader to a different
        # instance will have no effect until the GARP/RA request becomes
        # inactive.
        # - The GARP/RA packets should follow the GARP/RA
        # Packet Specifications..
        # -  When multiple forwarding rules refer to a regional backend service,
        # you need only send a GARP or RA packet for a single forwarding rule
        # virtual IP. The virtual IPs for all forwarding rules targeting the same
        # backend service will also be moved to the sender of the GARP or RA
        # packet.
        # The following are the Fast IP Move limitations (that is, when fastIPMove
        # is not DISABLED):
        # 
        # - Multiple forwarding rules cannot use the same IP address if one of
        # them refers to a regional backend service with fastIPMove.
        # - The regional backend service must set the network field, and all
        # NEGs must belong to that network. However, individual
        # NEGs can belong to different subnetworks of that network.
        # - The maximum number of network endpoints across all backends of a
        # backend service with fastIPMove is 32.
        # - The maximum number of backend services with fastIPMove that can have
        # the same network endpoint attached to one of its backends is 64.
        # - The maximum number of backend services with fastIPMove in a VPC in a
        # region is 64.
        # - The network endpoints that are attached to a backend of a backend
        # service with fastIPMove cannot resolve to Gen3+ machines for IPv6.
        # - Traffic directed to the leader by a static route next hop will not be
        # redirected to a new leader by fast failover. Such traffic will only be
        # redirected once an haPolicy.leader update has taken effect. Only traffic
        # to the forwarding rule's virtual IP will be redirected to a new leader by
        # fast failover.
        # haPolicy.fastIPMove can be set only at backend service creation time.
        # Once set, it cannot be updated.
        # By default, fastIpMove is set to DISABLED.
        # Corresponds to the JSON property `fastIPMove`
        # @return [String]
        attr_accessor :fast_ip_move
      
        # Selects one of the network endpoints attached to the backend NEGs of
        # this service as the active endpoint (the leader) that receives all
        # traffic.
        # When the leader changes, there is no connection draining to persist
        # existing connections on the old leader.
        # You are responsible for selecting a suitable endpoint as the
        # leader. For example, preferring a healthy endpoint over unhealthy ones.
        # Note that this service does not track backend endpoint health, and
        # selects the configured leader unconditionally.
        # Corresponds to the JSON property `leader`
        # @return [Google::Apis::ComputeV1::BackendServiceHaPolicyLeader]
        attr_accessor :leader
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @fast_ip_move = args[:fast_ip_move] if args.key?(:fast_ip_move)
          @leader = args[:leader] if args.key?(:leader)
        end
      end
      
      # 
      class BackendServiceHaPolicyLeader
        include Google::Apis::Core::Hashable
      
        # A fully-qualified URL (starting with https://www.googleapis.com/)
        # of the zonal Network Endpoint Group (NEG) with `GCE_VM_IP` endpoints
        # that the leader is attached to.
        # The leader's backendGroup must already be specified as a backend of
        # this backend service. Removing a backend that is designated as the
        # leader's backendGroup is not permitted.
        # Corresponds to the JSON property `backendGroup`
        # @return [String]
        attr_accessor :backend_group
      
        # The network endpoint within the leader.backendGroup that is
        # designated as the leader.
        # This network endpoint cannot be detached from the NEG specified in
        # the haPolicy.leader.backendGroup until the leader is updated with
        # another network endpoint, or the leader is removed from the haPolicy.
        # Corresponds to the JSON property `networkEndpoint`
        # @return [Google::Apis::ComputeV1::BackendServiceHaPolicyLeaderNetworkEndpoint]
        attr_accessor :network_endpoint
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @backend_group = args[:backend_group] if args.key?(:backend_group)
          @network_endpoint = args[:network_endpoint] if args.key?(:network_endpoint)
        end
      end
      
      # 
      class BackendServiceHaPolicyLeaderNetworkEndpoint
        include Google::Apis::Core::Hashable
      
        # The name of the VM instance of the leader network endpoint. The
        # instance must already be attached to the NEG specified in the
        # haPolicy.leader.backendGroup.
        # The name must be 1-63 characters long, and comply with RFC1035.
        # Authorization requires the following IAM permission on the
        # specified resource instance: compute.instances.use
        # Corresponds to the JSON property `instance`
        # @return [String]
        attr_accessor :instance
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance = args[:instance] if args.key?(:instance)
        end
      end
      
      # The HTTP cookie used for stateful session affinity.
      class BackendServiceHttpCookie
        include Google::Apis::Core::Hashable
      
        # Name of the cookie.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Path to set for the cookie.
        # Corresponds to the JSON property `path`
        # @return [String]
        attr_accessor :path
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `ttl`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :ttl
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @path = args[:path] if args.key?(:path)
          @ttl = args[:ttl] if args.key?(:ttl)
        end
      end
      
      # Identity-Aware Proxy
      class BackendServiceIap
        include Google::Apis::Core::Hashable
      
        # Whether the serving infrastructure will authenticate and authorize all
        # incoming requests.
        # 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
        # oauth2ClientSecretSha256 field.
        # @InputOnly
        # Corresponds to the JSON property `oauth2ClientSecret`
        # @return [String]
        attr_accessor :oauth2_client_secret
      
        # Output only. [Output Only] SHA256 hash value for the field
        # oauth2_client_secret above.
        # 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
      
      # Contains a list of BackendService resources.
      class BackendServiceList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of BackendService resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::BackendService>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#backendServiceList
        # for lists of backend services.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::BackendServiceList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::BackendServiceList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of usable BackendService resources.
      class BackendServiceListUsable
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of BackendService resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::BackendService>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # usableBackendServiceList for lists of usable backend
        # services.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::BackendServiceListUsable::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::BackendServiceListUsable::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Container for either a built-in LB policy supported by gRPC or Envoy or
      # a custom one implemented by the end user.
      class BackendServiceLocalityLoadBalancingPolicyConfig
        include Google::Apis::Core::Hashable
      
        # The configuration for a custom policy implemented by the user and
        # deployed with the client.
        # Corresponds to the JSON property `customPolicy`
        # @return [Google::Apis::ComputeV1::BackendServiceLocalityLoadBalancingPolicyConfigCustomPolicy]
        attr_accessor :custom_policy
      
        # The configuration for a built-in load balancing policy.
        # Corresponds to the JSON property `policy`
        # @return [Google::Apis::ComputeV1::BackendServiceLocalityLoadBalancingPolicyConfigPolicy]
        attr_accessor :policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_policy = args[:custom_policy] if args.key?(:custom_policy)
          @policy = args[:policy] if args.key?(:policy)
        end
      end
      
      # The configuration for a custom policy implemented by the user and
      # deployed with the client.
      class BackendServiceLocalityLoadBalancingPolicyConfigCustomPolicy
        include Google::Apis::Core::Hashable
      
        # An optional, arbitrary JSON object with configuration data, understood
        # by a locally installed custom policy implementation.
        # Corresponds to the JSON property `data`
        # @return [String]
        attr_accessor :data
      
        # Identifies the custom policy.
        # The value should match the name of a custom implementation registered
        # on the gRPC clients. It should follow protocol buffer message naming
        # conventions and include the full path (for example,
        # myorg.CustomLbPolicy). The maximum length is 256 characters.
        # Do not specify the same custom policy more than once for a
        # backend. If you do, the configuration is rejected.
        # For an example of how to use this field, seeUse
        # a custom policy.
        # 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)
          @data = args[:data] if args.key?(:data)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # The configuration for a built-in load balancing policy.
      class BackendServiceLocalityLoadBalancingPolicyConfigPolicy
        include Google::Apis::Core::Hashable
      
        # The name of a locality load-balancing policy. Valid values include
        # ROUND_ROBIN and, for Java clients, LEAST_REQUEST. For information
        # about these values, see the description of localityLbPolicy.
        # Do not specify the same policy more than once for a
        # backend. If you do, the configuration is rejected.
        # 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)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # The available logging options for the load balancer traffic served by this
      # backend service.
      class BackendServiceLogConfig
        include Google::Apis::Core::Hashable
      
        # Denotes whether to enable logging for the load balancer
        # traffic served by this backend service. The default value is false.
        # Corresponds to the JSON property `enable`
        # @return [Boolean]
        attr_accessor :enable
        alias_method :enable?, :enable
      
        # This field can only be specified if logging is enabled for this backend
        # service and "logConfig.optionalMode" was set to CUSTOM. Contains a list
        # of optional fields you want to include in the logs. For example:
        # serverInstance, serverGkeDetails.cluster,
        # serverGkeDetails.pod.podNamespace
        # Corresponds to the JSON property `optionalFields`
        # @return [Array<String>]
        attr_accessor :optional_fields
      
        # This field can only be specified if logging is enabled for this backend
        # service. Configures whether all, none or a subset of optional fields
        # should be added to the reported logs. One of [INCLUDE_ALL_OPTIONAL,
        # EXCLUDE_ALL_OPTIONAL, CUSTOM]. Default is EXCLUDE_ALL_OPTIONAL.
        # Corresponds to the JSON property `optionalMode`
        # @return [String]
        attr_accessor :optional_mode
      
        # This field can only be specified if logging is enabled for this backend
        # service. The value of the field must be in [0, 1]. This configures the
        # sampling rate of requests to the load balancer where 1.0 means all logged
        # requests are reported and 0.0 means no logged requests are reported. The
        # default value is 1.0.
        # Corresponds to the JSON property `sampleRate`
        # @return [Float]
        attr_accessor :sample_rate
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @enable = args[:enable] if args.key?(:enable)
          @optional_fields = args[:optional_fields] if args.key?(:optional_fields)
          @optional_mode = args[:optional_mode] if args.key?(:optional_mode)
          @sample_rate = args[:sample_rate] if args.key?(:sample_rate)
        end
      end
      
      # 
      class BackendServiceNetworkPassThroughLbTrafficPolicy
        include Google::Apis::Core::Hashable
      
        # When configured, new connections are load balanced across healthy backend
        # endpoints in the local zone.
        # Corresponds to the JSON property `zonalAffinity`
        # @return [Google::Apis::ComputeV1::BackendServiceNetworkPassThroughLbTrafficPolicyZonalAffinity]
        attr_accessor :zonal_affinity
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @zonal_affinity = args[:zonal_affinity] if args.key?(:zonal_affinity)
        end
      end
      
      # 
      class BackendServiceNetworkPassThroughLbTrafficPolicyZonalAffinity
        include Google::Apis::Core::Hashable
      
        # This field indicates whether zonal affinity is enabled or not. The
        # possible values are:
        # 
        # - ZONAL_AFFINITY_DISABLED: Default Value. Zonal Affinity
        # is disabled. The load balancer distributes new connections to all
        # healthy backend endpoints across all zones.
        # - ZONAL_AFFINITY_STAY_WITHIN_ZONE: Zonal Affinity is
        # enabled. The load balancer distributes new connections to all healthy
        # backend endpoints in the local zone only. If there are no healthy
        # backend endpoints in the local zone, the load balancer distributes
        # new connections to all backend endpoints in the local zone.
        # - ZONAL_AFFINITY_SPILL_CROSS_ZONE: Zonal Affinity is
        # enabled. The load balancer distributes new connections to all healthy
        # backend endpoints in the local zone only. If there aren't enough
        # healthy backend endpoints in the local zone, the load balancer
        # distributes new connections to all healthy backend endpoints across all
        # zones.
        # Corresponds to the JSON property `spillover`
        # @return [String]
        attr_accessor :spillover
      
        # The value of the field must be in [0, 1]. When the ratio of the count
        # of healthy backend endpoints in a zone to the count of backend
        # endpoints in that same zone is equal to or above this threshold, the
        # load balancer distributes new connections to all healthy endpoints in
        # the local zone only. When the ratio of the count of healthy backend
        # endpoints in a zone to the count of backend endpoints in that same
        # zone is below this threshold, the load balancer distributes all new
        # connections to all healthy endpoints across all zones.
        # Corresponds to the JSON property `spilloverRatio`
        # @return [Float]
        attr_accessor :spillover_ratio
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @spillover = args[:spillover] if args.key?(:spillover)
          @spillover_ratio = args[:spillover_ratio] if args.key?(:spillover_ratio)
        end
      end
      
      # Additional Backend Service parameters.
      class BackendServiceParams
        include Google::Apis::Core::Hashable
      
        # Tag keys/values directly bound to this resource.
        # Tag keys and values have the same definition as resource
        # manager tags. The field is allowed for INSERT
        # only. The keys/values to set on the resource should be specified in
        # either ID ` : ` or Namespaced format
        # ` : `.
        # For example the following are valid inputs:
        # * `"tagKeys/333" : "tagValues/444", "tagKeys/123" : "tagValues/456"`
        # * `"123/environment" : "production", "345/abc" : "xyz"`
        # Note:
        # * Invalid combinations of ID & namespaced format is not supported. For
        # instance: `"123/environment" : "tagValues/444"` is invalid.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # 
      class BackendServiceReference
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `backendService`
        # @return [String]
        attr_accessor :backend_service
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @backend_service = args[:backend_service] if args.key?(:backend_service)
        end
      end
      
      # 
      class BackendServiceTlsSettings
        include Google::Apis::Core::Hashable
      
        # Reference to the BackendAuthenticationConfig resource from the
        # networksecurity.googleapis.com namespace. Can be used in authenticating
        # TLS connections to the backend, as specified by the authenticationMode
        # field. Can only be specified if authenticationMode is not NONE.
        # Corresponds to the JSON property `authenticationConfig`
        # @return [String]
        attr_accessor :authentication_config
      
        # Server Name Indication - see RFC3546 section 3.1. If set, the load
        # balancer sends this string as the SNI hostname in the TLS connection to
        # the backend, and requires that this string match a Subject Alternative
        # Name (SAN) in the backend's server certificate. With a Regional Internet
        # NEG backend, if the SNI is specified here, the load balancer uses it
        # regardless of whether the Regional Internet NEG is specified with FQDN or
        # IP address and port. When both sni and subjectAltNames[] are specified,
        # the load balancer matches the backend certificate's SAN only to
        # subjectAltNames[].
        # Corresponds to the JSON property `sni`
        # @return [String]
        attr_accessor :sni
      
        # A list of Subject Alternative Names (SANs) that the Load Balancer
        # verifies during a TLS handshake with the backend. When the server
        # presents its X.509 certificate to the Load Balancer, the Load Balancer
        # inspects the certificate's SAN field, and requires that at least one SAN
        # match one of the subjectAltNames in the list. This field is limited to 5
        # entries. When both sni and subjectAltNames[] are specified, the load
        # balancer matches the backend certificate's SAN only to subjectAltNames[].
        # Corresponds to the JSON property `subjectAltNames`
        # @return [Array<Google::Apis::ComputeV1::BackendServiceTlsSettingsSubjectAltName>]
        attr_accessor :subject_alt_names
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @authentication_config = args[:authentication_config] if args.key?(:authentication_config)
          @sni = args[:sni] if args.key?(:sni)
          @subject_alt_names = args[:subject_alt_names] if args.key?(:subject_alt_names)
        end
      end
      
      # A Subject Alternative Name that the load balancer matches against the SAN
      # field in the TLS certificate provided by the backend, specified as either
      # a DNS name or a URI, in accordance with RFC 5280 4.2.1.6
      class BackendServiceTlsSettingsSubjectAltName
        include Google::Apis::Core::Hashable
      
        # The SAN specified as a DNS Name.
        # Corresponds to the JSON property `dnsName`
        # @return [String]
        attr_accessor :dns_name
      
        # The SAN specified as a URI.
        # Corresponds to the JSON property `uniformResourceIdentifier`
        # @return [String]
        attr_accessor :uniform_resource_identifier
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @dns_name = args[:dns_name] if args.key?(:dns_name)
          @uniform_resource_identifier = args[:uniform_resource_identifier] if args.key?(:uniform_resource_identifier)
        end
      end
      
      # 
      class BackendServiceUsedBy
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Server-defined URL for resources referencing given
        # BackendService like UrlMaps, TargetTcpProxies, TargetSslProxies
        # and ForwardingRule.
        # Corresponds to the JSON property `reference`
        # @return [String]
        attr_accessor :reference
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @reference = args[:reference] if args.key?(:reference)
        end
      end
      
      # 
      class BackendServicesScopedList
        include Google::Apis::Core::Hashable
      
        # A list of BackendServices contained in this scope.
        # Corresponds to the JSON property `backendServices`
        # @return [Array<Google::Apis::ComputeV1::BackendService>]
        attr_accessor :backend_services
      
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::BackendServicesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @backend_services = args[:backend_services] if args.key?(:backend_services)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::BackendServicesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class BfdPacket
        include Google::Apis::Core::Hashable
      
        # The Authentication Present bit of the BFD packet. This is specified in
        # section 4.1 ofRFC5880
        # Corresponds to the JSON property `authenticationPresent`
        # @return [Boolean]
        attr_accessor :authentication_present
        alias_method :authentication_present?, :authentication_present
      
        # The Control Plane Independent bit of the BFD packet. This is specified in
        # section 4.1 ofRFC5880
        # Corresponds to the JSON property `controlPlaneIndependent`
        # @return [Boolean]
        attr_accessor :control_plane_independent
        alias_method :control_plane_independent?, :control_plane_independent
      
        # The demand bit of the BFD packet. This is specified in section 4.1 ofRFC5880
        # Corresponds to the JSON property `demand`
        # @return [Boolean]
        attr_accessor :demand
        alias_method :demand?, :demand
      
        # The diagnostic code specifies the local system's reason for the last change
        # in session state. This allows remote systems to determine the reason that
        # the previous session failed, for example. These diagnostic codes are
        # specified in section 4.1 ofRFC5880
        # Corresponds to the JSON property `diagnostic`
        # @return [String]
        attr_accessor :diagnostic
      
        # The Final bit of the BFD packet. This is specified in section 4.1 ofRFC5880
        # Corresponds to the JSON property `final`
        # @return [Boolean]
        attr_accessor :final
        alias_method :final?, :final
      
        # The length of the BFD Control packet in bytes. This is specified in section
        # 4.1 ofRFC5880
        # Corresponds to the JSON property `length`
        # @return [Fixnum]
        attr_accessor :length
      
        # The Required Min Echo RX Interval value in the BFD packet. This is
        # specified in section 4.1 ofRFC5880
        # Corresponds to the JSON property `minEchoRxIntervalMs`
        # @return [Fixnum]
        attr_accessor :min_echo_rx_interval_ms
      
        # The Required Min RX Interval value in the BFD packet. This is specified in
        # section 4.1 ofRFC5880
        # Corresponds to the JSON property `minRxIntervalMs`
        # @return [Fixnum]
        attr_accessor :min_rx_interval_ms
      
        # The Desired Min TX Interval value in the BFD packet. This is specified in
        # section 4.1 ofRFC5880
        # Corresponds to the JSON property `minTxIntervalMs`
        # @return [Fixnum]
        attr_accessor :min_tx_interval_ms
      
        # The detection time multiplier of the BFD packet. This is specified in
        # section 4.1 ofRFC5880
        # Corresponds to the JSON property `multiplier`
        # @return [Fixnum]
        attr_accessor :multiplier
      
        # The multipoint bit of the BFD packet. This is specified in section 4.1
        # ofRFC5880
        # Corresponds to the JSON property `multipoint`
        # @return [Boolean]
        attr_accessor :multipoint
        alias_method :multipoint?, :multipoint
      
        # The My Discriminator value in the BFD packet. This is specified in section
        # 4.1 ofRFC5880
        # Corresponds to the JSON property `myDiscriminator`
        # @return [Fixnum]
        attr_accessor :my_discriminator
      
        # The Poll bit of the BFD packet. This is specified in section 4.1 ofRFC5880
        # Corresponds to the JSON property `poll`
        # @return [Boolean]
        attr_accessor :poll
        alias_method :poll?, :poll
      
        # The current BFD session state as seen by the transmitting system. These
        # states are specified in section 4.1 ofRFC5880
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # The version number of the BFD protocol, as specified in section 4.1 ofRFC5880.
        # Corresponds to the JSON property `version`
        # @return [Fixnum]
        attr_accessor :version
      
        # The Your Discriminator value in the BFD packet. This is specified in
        # section 4.1 ofRFC5880
        # Corresponds to the JSON property `yourDiscriminator`
        # @return [Fixnum]
        attr_accessor :your_discriminator
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @authentication_present = args[:authentication_present] if args.key?(:authentication_present)
          @control_plane_independent = args[:control_plane_independent] if args.key?(:control_plane_independent)
          @demand = args[:demand] if args.key?(:demand)
          @diagnostic = args[:diagnostic] if args.key?(:diagnostic)
          @final = args[:final] if args.key?(:final)
          @length = args[:length] if args.key?(:length)
          @min_echo_rx_interval_ms = args[:min_echo_rx_interval_ms] if args.key?(:min_echo_rx_interval_ms)
          @min_rx_interval_ms = args[:min_rx_interval_ms] if args.key?(:min_rx_interval_ms)
          @min_tx_interval_ms = args[:min_tx_interval_ms] if args.key?(:min_tx_interval_ms)
          @multiplier = args[:multiplier] if args.key?(:multiplier)
          @multipoint = args[:multipoint] if args.key?(:multipoint)
          @my_discriminator = args[:my_discriminator] if args.key?(:my_discriminator)
          @poll = args[:poll] if args.key?(:poll)
          @state = args[:state] if args.key?(:state)
          @version = args[:version] if args.key?(:version)
          @your_discriminator = args[:your_discriminator] if args.key?(:your_discriminator)
        end
      end
      
      # Next free: 15
      class BfdStatus
        include Google::Apis::Core::Hashable
      
        # The BFD session initialization mode for this BGP peer.
        # If set to ACTIVE, the Cloud Router will initiate the BFD session for
        # this BGP peer. If set to PASSIVE, the Cloud Router will wait for the
        # peer router to initiate the BFD session for this BGP peer. If set to
        # DISABLED, BFD is disabled for this BGP peer.
        # Corresponds to the JSON property `bfdSessionInitializationMode`
        # @return [String]
        attr_accessor :bfd_session_initialization_mode
      
        # Unix timestamp of the most recent config update.
        # Corresponds to the JSON property `configUpdateTimestampMicros`
        # @return [Fixnum]
        attr_accessor :config_update_timestamp_micros
      
        # Control packet counts for the current BFD session.
        # Corresponds to the JSON property `controlPacketCounts`
        # @return [Google::Apis::ComputeV1::BfdStatusPacketCounts]
        attr_accessor :control_packet_counts
      
        # Inter-packet time interval statistics for control packets.
        # Corresponds to the JSON property `controlPacketIntervals`
        # @return [Array<Google::Apis::ComputeV1::PacketIntervals>]
        attr_accessor :control_packet_intervals
      
        # The diagnostic code specifies the local system's reason for the last change
        # in session state. This allows remote systems to determine the reason that
        # the previous session failed, for example. These diagnostic codes are
        # specified in section 4.1 ofRFC5880
        # Corresponds to the JSON property `localDiagnostic`
        # @return [String]
        attr_accessor :local_diagnostic
      
        # The current BFD session state as seen by the transmitting system. These
        # states are specified in section 4.1 ofRFC5880
        # Corresponds to the JSON property `localState`
        # @return [String]
        attr_accessor :local_state
      
        # Negotiated transmit interval for control packets.
        # Corresponds to the JSON property `negotiatedLocalControlTxIntervalMs`
        # @return [Fixnum]
        attr_accessor :negotiated_local_control_tx_interval_ms
      
        # The most recent Rx control packet for this BFD session.
        # Corresponds to the JSON property `rxPacket`
        # @return [Google::Apis::ComputeV1::BfdPacket]
        attr_accessor :rx_packet
      
        # The most recent Tx control packet for this BFD session.
        # Corresponds to the JSON property `txPacket`
        # @return [Google::Apis::ComputeV1::BfdPacket]
        attr_accessor :tx_packet
      
        # Session uptime in milliseconds. Value will be 0 if session is not up.
        # Corresponds to the JSON property `uptimeMs`
        # @return [Fixnum]
        attr_accessor :uptime_ms
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bfd_session_initialization_mode = args[:bfd_session_initialization_mode] if args.key?(:bfd_session_initialization_mode)
          @config_update_timestamp_micros = args[:config_update_timestamp_micros] if args.key?(:config_update_timestamp_micros)
          @control_packet_counts = args[:control_packet_counts] if args.key?(:control_packet_counts)
          @control_packet_intervals = args[:control_packet_intervals] if args.key?(:control_packet_intervals)
          @local_diagnostic = args[:local_diagnostic] if args.key?(:local_diagnostic)
          @local_state = args[:local_state] if args.key?(:local_state)
          @negotiated_local_control_tx_interval_ms = args[:negotiated_local_control_tx_interval_ms] if args.key?(:negotiated_local_control_tx_interval_ms)
          @rx_packet = args[:rx_packet] if args.key?(:rx_packet)
          @tx_packet = args[:tx_packet] if args.key?(:tx_packet)
          @uptime_ms = args[:uptime_ms] if args.key?(:uptime_ms)
        end
      end
      
      # 
      class BfdStatusPacketCounts
        include Google::Apis::Core::Hashable
      
        # Number of packets received since the beginning of the current BFD
        # session.
        # Corresponds to the JSON property `numRx`
        # @return [Fixnum]
        attr_accessor :num_rx
      
        # Number of packets received that were rejected because of errors since the
        # beginning of the current BFD session.
        # Corresponds to the JSON property `numRxRejected`
        # @return [Fixnum]
        attr_accessor :num_rx_rejected
      
        # Number of packets received that were successfully processed since the
        # beginning of the current BFD session.
        # Corresponds to the JSON property `numRxSuccessful`
        # @return [Fixnum]
        attr_accessor :num_rx_successful
      
        # Number of packets transmitted since the beginning of the current BFD
        # session.
        # Corresponds to the JSON property `numTx`
        # @return [Fixnum]
        attr_accessor :num_tx
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @num_rx = args[:num_rx] if args.key?(:num_rx)
          @num_rx_rejected = args[:num_rx_rejected] if args.key?(:num_rx_rejected)
          @num_rx_successful = args[:num_rx_successful] if args.key?(:num_rx_successful)
          @num_tx = args[:num_tx] if args.key?(:num_tx)
        end
      end
      
      # 
      class BgpRoute
        include Google::Apis::Core::Hashable
      
        # Output only. [Output only] AS-PATH for the route
        # Corresponds to the JSON property `asPaths`
        # @return [Array<Google::Apis::ComputeV1::BgpRouteAsPath>]
        attr_accessor :as_paths
      
        # Output only. [Output only] BGP communities in human-readable A:B format.
        # Corresponds to the JSON property `communities`
        # @return [Array<String>]
        attr_accessor :communities
      
        # Network Layer Reachability Information (NLRI) for a route.
        # Corresponds to the JSON property `destination`
        # @return [Google::Apis::ComputeV1::BgpRouteNetworkLayerReachabilityInformation]
        attr_accessor :destination
      
        # Output only. [Output only] BGP multi-exit discriminator
        # Corresponds to the JSON property `med`
        # @return [Fixnum]
        attr_accessor :med
      
        # Output only. [Output only] BGP origin (EGP, IGP or INCOMPLETE)
        # Corresponds to the JSON property `origin`
        # @return [String]
        attr_accessor :origin
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @as_paths = args[:as_paths] if args.key?(:as_paths)
          @communities = args[:communities] if args.key?(:communities)
          @destination = args[:destination] if args.key?(:destination)
          @med = args[:med] if args.key?(:med)
          @origin = args[:origin] if args.key?(:origin)
        end
      end
      
      # 
      class BgpRouteAsPath
        include Google::Apis::Core::Hashable
      
        # Output only. [Output only] ASNs in the path segment. When type is SEQUENCE,
        # these are
        # ordered.
        # Corresponds to the JSON property `asns`
        # @return [Array<Fixnum>]
        attr_accessor :asns
      
        # Output only. [Output only] ASNs in the path segment. This field is for better
        # support of 32 bit ASNs as the other asns field suffers from overflow when
        # the ASN is larger. When type is SEQUENCE, these are ordered.
        # Corresponds to the JSON property `asns32`
        # @return [Array<Fixnum>]
        attr_accessor :asns32
      
        # Output only. [Output only] Type of AS-PATH segment (SEQUENCE or SET)
        # 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)
          @asns = args[:asns] if args.key?(:asns)
          @asns32 = args[:asns32] if args.key?(:asns32)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # Network Layer Reachability Information (NLRI) for a route.
      class BgpRouteNetworkLayerReachabilityInformation
        include Google::Apis::Core::Hashable
      
        # If the BGP session supports multiple paths (RFC 7911), the path
        # identifier for this route.
        # Corresponds to the JSON property `pathId`
        # @return [Fixnum]
        attr_accessor :path_id
      
        # Human readable CIDR notation for a prefix. E.g. 10.42.0.0/16.
        # Corresponds to the JSON property `prefix`
        # @return [String]
        attr_accessor :prefix
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @path_id = args[:path_id] if args.key?(:path_id)
          @prefix = args[:prefix] if args.key?(:prefix)
        end
      end
      
      # Associates `members`, or principals, with a `role`.
      class Binding
        include Google::Apis::Core::Hashable
      
        # Represents a textual expression in the Common Expression Language (CEL)
        # syntax. CEL is a C-like expression language. The syntax and semantics of CEL
        # are documented at https://github.com/google/cel-spec.
        # Example (Comparison):
        # title: "Summary size limit"
        # description: "Determines if a summary is less than 100 chars"
        # expression: "document.summary.size() < 100"
        # Example (Equality):
        # title: "Requestor is owner"
        # description: "Determines if requestor is the document owner"
        # expression: "document.owner == request.auth.claims.email"
        # Example (Logic):
        # title: "Public documents"
        # description: "Determine whether the document should be publicly visible"
        # expression: "document.type != 'private' && document.type != 'internal'"
        # Example (Data Manipulation):
        # title: "Notification string"
        # description: "Create a notification string with a timestamp."
        # expression: "'New message received at ' + string(document.create_time)"
        # The exact variables and functions that may be referenced within an expression
        # are determined by the service that evaluates it. See the service
        # documentation for additional information.
        # Corresponds to the JSON property `condition`
        # @return [Google::Apis::ComputeV1::Expr]
        attr_accessor :condition
      
        # Specifies the principals requesting access for a Google Cloud resource.
        # `members` can have the following values:
        # * `allUsers`: A special identifier that represents anyone who is
        # on the internet; with or without a Google account.
        # * `allAuthenticatedUsers`: A special identifier that represents anyone
        # who is authenticated with a Google account or a service account.
        # Does not include identities that come from external identity providers
        # (IdPs) through identity federation.
        # * `user:`emailid``: An email address that represents a specific Google
        # account. For example, `alice@example.com` .
        # * `serviceAccount:`emailid``: An email address that represents a Google
        # service account. For example,
        # `my-other-app@appspot.gserviceaccount.com`.
        # * `serviceAccount:`projectid`.svc.id.goog[`namespace`/`kubernetes-sa`]`: An
        # identifier for a
        # [Kubernetes service
        # account](https://cloud.google.com/kubernetes-engine/docs/how-to/kubernetes-
        # service-accounts).
        # For example, `my-project.svc.id.goog[my-namespace/my-kubernetes-sa]`.
        # * `group:`emailid``: An email address that represents a Google group.
        # For example, `admins@example.com`.
        # * `domain:`domain``: The G Suite domain (primary) that represents all the
        # users of that domain. For example, `google.com` or `example.com`.
        # * `principal://iam.googleapis.com/locations/global/workforcePools/`pool_id`/
        # subject/`subject_attribute_value``:
        # A single identity in a workforce identity pool.
        # * `principalSet://iam.googleapis.com/locations/global/workforcePools/`pool_id`/
        # group/`group_id``:
        # All workforce identities in a group.
        # * `principalSet://iam.googleapis.com/locations/global/workforcePools/`pool_id`/
        # attribute.`attribute_name`/`attribute_value``:
        # All workforce identities with a specific attribute value.
        # * `principalSet://iam.googleapis.com/locations/global/workforcePools/`pool_id`/
        # *`:
        # All identities in a workforce identity pool.
        # * `principal://iam.googleapis.com/projects/`project_number`/locations/global/
        # workloadIdentityPools/`pool_id`/subject/`subject_attribute_value``:
        # A single identity in a workload identity pool.
        # * `principalSet://iam.googleapis.com/projects/`project_number`/locations/
        # global/workloadIdentityPools/`pool_id`/group/`group_id``:
        # A workload identity pool group.
        # * `principalSet://iam.googleapis.com/projects/`project_number`/locations/
        # global/workloadIdentityPools/`pool_id`/attribute.`attribute_name`/`
        # attribute_value``:
        # All identities in a workload identity pool with a certain attribute.
        # * `principalSet://iam.googleapis.com/projects/`project_number`/locations/
        # global/workloadIdentityPools/`pool_id`/*`:
        # All identities in a workload identity pool.
        # * `deleted:user:`emailid`?uid=`uniqueid``: An email address (plus unique
        # identifier) representing a user that has been recently deleted. For
        # example, `alice@example.com?uid=123456789012345678901`. If the user is
        # recovered, this value reverts to `user:`emailid`` and the recovered user
        # retains the role in the binding.
        # * `deleted:serviceAccount:`emailid`?uid=`uniqueid``: An email address (plus
        # unique identifier) representing a service account that has been recently
        # deleted. For example,
        # `my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901`.
        # If the service account is undeleted, this value reverts to
        # `serviceAccount:`emailid`` and the undeleted service account retains the
        # role in the binding.
        # * `deleted:group:`emailid`?uid=`uniqueid``: An email address (plus unique
        # identifier) representing a Google group that has been recently
        # deleted. For example, `admins@example.com?uid=123456789012345678901`. If
        # the group is recovered, this value reverts to `group:`emailid`` and the
        # recovered group retains the role in the binding.
        # * `deleted:principal://iam.googleapis.com/locations/global/workforcePools/`
        # pool_id`/subject/`subject_attribute_value``:
        # Deleted single identity in a workforce identity pool. For example,
        # `deleted:principal://iam.googleapis.com/locations/global/workforcePools/my-
        # pool-id/subject/my-subject-attribute-value`.
        # Corresponds to the JSON property `members`
        # @return [Array<String>]
        attr_accessor :members
      
        # Role that is assigned to the list of `members`, or principals.
        # For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
        # For an overview of the IAM roles and permissions, see the
        # [IAM documentation](https://cloud.google.com/iam/docs/roles-overview). For
        # a list of the available pre-defined roles, see
        # [here](https://cloud.google.com/iam/docs/understanding-roles).
        # Corresponds to the JSON property `role`
        # @return [String]
        attr_accessor :role
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @condition = args[:condition] if args.key?(:condition)
          @members = args[:members] if args.key?(:members)
          @role = args[:role] if args.key?(:role)
        end
      end
      
      # A transient resource used in compute.disks.bulkInsert and
      # compute.regionDisks.bulkInsert. It is only used to process
      # requests and is not persisted.
      class BulkInsertDiskResource
        include Google::Apis::Core::Hashable
      
        # The URL of the DiskConsistencyGroupPolicy for the group of disks to clone.
        # This may be a full or partial URL, such as:
        # 
        # 
        # -
        # https://www.googleapis.com/compute/v1/projects/project/regions/region/
        # resourcePolicies/resourcePolicy
        # 
        # -
        # projects/project/regions/region/resourcePolicies/resourcePolicy
        # 
        # -
        # regions/region/resourcePolicies/resourcePolicy
        # Corresponds to the JSON property `sourceConsistencyGroupPolicy`
        # @return [String]
        attr_accessor :source_consistency_group_policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @source_consistency_group_policy = args[:source_consistency_group_policy] if args.key?(:source_consistency_group_policy)
        end
      end
      
      # A transient resource used in compute.instances.bulkInsert and
      # compute.regionInstances.bulkInsert . This resource is not persisted
      # anywhere, it is used only for processing the requests.
      class BulkInsertInstanceResource
        include Google::Apis::Core::Hashable
      
        # The maximum number of instances to create.
        # Corresponds to the JSON property `count`
        # @return [Fixnum]
        attr_accessor :count
      
        # A flexible specification of machine types for instances to create.
        # Corresponds to the JSON property `instanceFlexibilityPolicy`
        # @return [Google::Apis::ComputeV1::InstanceFlexibilityPolicy]
        attr_accessor :instance_flexibility_policy
      
        # The instance properties defining the VM instances to be created. Required
        # if sourceInstanceTemplate is not provided.
        # Corresponds to the JSON property `instanceProperties`
        # @return [Google::Apis::ComputeV1::InstanceProperties]
        attr_accessor :instance_properties
      
        # Configuration for location policy among multiple possible locations
        # (e.g. preferences for zone selection among zones in a single region).
        # Corresponds to the JSON property `locationPolicy`
        # @return [Google::Apis::ComputeV1::LocationPolicy]
        attr_accessor :location_policy
      
        # The minimum number of instances to create. If no min_count is
        # specified then count is used as the default value. Ifmin_count instances
        # cannot be created, then no instances will
        # be created and instances already created will be deleted.
        # Corresponds to the JSON property `minCount`
        # @return [Fixnum]
        attr_accessor :min_count
      
        # The string pattern used for the names of the VMs.
        # Either name_pattern or per_instance_properties
        # must be set. The pattern must contain one continuous sequence of
        # placeholder hash characters (#) with each character corresponding to one
        # digit of the generated instance name. Example: a name_pattern
        # of inst-#### generates instance names such asinst-0001 and inst-0002. If
        # existing instances
        # in the same project and zone have names that match the name pattern
        # then the generated instance numbers start after the biggest
        # existing number. For example, if there exists an instance with nameinst-0050,
        # then instance names generated using the patterninst-#### begin with inst-0051.
        # The name pattern
        # placeholder #...# can contain up to 18 characters.
        # Corresponds to the JSON property `namePattern`
        # @return [String]
        attr_accessor :name_pattern
      
        # Per-instance properties to be set on individual instances.
        # Keys of this map specify requested instance names.
        # Can be empty if name_pattern is used.
        # Corresponds to the JSON property `perInstanceProperties`
        # @return [Hash<String,Google::Apis::ComputeV1::BulkInsertInstanceResourcePerInstanceProperties>]
        attr_accessor :per_instance_properties
      
        # Specifies the instance template from which to create instances. You may
        # combine sourceInstanceTemplate withinstanceProperties to override specific
        # values from an
        # existing instance template. Bulk API follows the semantics of JSON Merge
        # Patch described by RFC
        # 7396.
        # It can be a full or partial URL. For example, the following are
        # all valid URLs to an instance template:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/global/
        # instanceTemplates/instanceTemplate
        # - projects/project/global/instanceTemplates/instanceTemplate
        # - global/instanceTemplates/instanceTemplate
        # This field is optional.
        # Corresponds to the JSON property `sourceInstanceTemplate`
        # @return [String]
        attr_accessor :source_instance_template
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @count = args[:count] if args.key?(:count)
          @instance_flexibility_policy = args[:instance_flexibility_policy] if args.key?(:instance_flexibility_policy)
          @instance_properties = args[:instance_properties] if args.key?(:instance_properties)
          @location_policy = args[:location_policy] if args.key?(:location_policy)
          @min_count = args[:min_count] if args.key?(:min_count)
          @name_pattern = args[:name_pattern] if args.key?(:name_pattern)
          @per_instance_properties = args[:per_instance_properties] if args.key?(:per_instance_properties)
          @source_instance_template = args[:source_instance_template] if args.key?(:source_instance_template)
        end
      end
      
      # Per-instance properties to be set on individual instances.
      # To be extended in the future.
      class BulkInsertInstanceResourcePerInstanceProperties
        include Google::Apis::Core::Hashable
      
        # Specifies the hostname of the instance. More details in:
        # https://cloud.google.com/compute/docs/instances/custom-hostname-vm#
        # naming_convention
        # Corresponds to the JSON property `hostname`
        # @return [String]
        attr_accessor :hostname
      
        # Output only. This field is only temporary. It will be removed. Do not use it.
        # 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)
          @hostname = args[:hostname] if args.key?(:hostname)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # 
      class BulkInsertOperationStatus
        include Google::Apis::Core::Hashable
      
        # [Output Only] Count of VMs successfully created so far.
        # Corresponds to the JSON property `createdVmCount`
        # @return [Fixnum]
        attr_accessor :created_vm_count
      
        # [Output Only] Count of VMs that got deleted during rollback.
        # Corresponds to the JSON property `deletedVmCount`
        # @return [Fixnum]
        attr_accessor :deleted_vm_count
      
        # [Output Only] Count of VMs that started creating but encountered an
        # error.
        # Corresponds to the JSON property `failedToCreateVmCount`
        # @return [Fixnum]
        attr_accessor :failed_to_create_vm_count
      
        # [Output Only] Creation status of BulkInsert operation - information
        # if the flow is rolling forward or rolling back.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # [Output Only] Count of VMs originally planned to be created.
        # Corresponds to the JSON property `targetVmCount`
        # @return [Fixnum]
        attr_accessor :target_vm_count
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @created_vm_count = args[:created_vm_count] if args.key?(:created_vm_count)
          @deleted_vm_count = args[:deleted_vm_count] if args.key?(:deleted_vm_count)
          @failed_to_create_vm_count = args[:failed_to_create_vm_count] if args.key?(:failed_to_create_vm_count)
          @status = args[:status] if args.key?(:status)
          @target_vm_count = args[:target_vm_count] if args.key?(:target_vm_count)
        end
      end
      
      # 
      class BulkSetLabelsRequest
        include Google::Apis::Core::Hashable
      
        # The fingerprint of the previous set of labels for this resource,
        # used to detect conflicts. The fingerprint is initially generated by Compute
        # Engine and changes after every request to modify or update labels. You may
        # optionally provide an up-to-date fingerprint hash in order to update or
        # change labels. Make a get() request to the resource to get the
        # latest fingerprint.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # The labels to set for this resource.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
        end
      end
      
      # 
      class BulkZoneSetLabelsRequest
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `requests`
        # @return [Array<Google::Apis::ComputeV1::BulkSetLabelsRequest>]
        attr_accessor :requests
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @requests = args[:requests] if args.key?(:requests)
        end
      end
      
      # 
      class BundledLocalSsds
        include Google::Apis::Core::Hashable
      
        # The default disk interface if the interface is not specified.
        # Corresponds to the JSON property `defaultInterface`
        # @return [String]
        attr_accessor :default_interface
      
        # The number of partitions.
        # Corresponds to the JSON property `partitionCount`
        # @return [Fixnum]
        attr_accessor :partition_count
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @default_interface = args[:default_interface] if args.key?(:default_interface)
          @partition_count = args[:partition_count] if args.key?(:partition_count)
        end
      end
      
      # 
      class CacheInvalidationRule
        include Google::Apis::Core::Hashable
      
        # A list of cache tags used to identify cached objects.
        # 
        # - Cache tags are specified when the response is first cached, by setting
        # the `Cache-Tag` response header at the origin.
        # - Multiple cache tags in the same invalidation request are treated as
        # Boolean `OR` - for example, `tag1 OR tag2 OR tag3`.
        # - If other fields are also specified, these are treated as Boolean `AND`
        # with any tags.
        # Up to 10 tags can be specified in a single invalidation request.
        # Corresponds to the JSON property `cacheTags`
        # @return [Array<String>]
        attr_accessor :cache_tags
      
        # If set, this invalidation rule will only apply to requests with a Host
        # header matching host.
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # 
        # Corresponds to the JSON property `path`
        # @return [String]
        attr_accessor :path
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cache_tags = args[:cache_tags] if args.key?(:cache_tags)
          @host = args[:host] if args.key?(:host)
          @path = args[:path] if args.key?(:path)
        end
      end
      
      # Message containing what to include in the cache key for a request for Cloud
      # CDN.
      class CacheKeyPolicy
        include Google::Apis::Core::Hashable
      
        # If true, requests to different hosts will be cached separately.
        # Corresponds to the JSON property `includeHost`
        # @return [Boolean]
        attr_accessor :include_host
        alias_method :include_host?, :include_host
      
        # Allows HTTP request headers (by name) to be used in the cache key.
        # Corresponds to the JSON property `includeHttpHeaders`
        # @return [Array<String>]
        attr_accessor :include_http_headers
      
        # Allows HTTP cookies (by name) to be used in the cache key.
        # The name=value pair will be used in the cache key Cloud CDN generates.
        # Corresponds to the JSON property `includeNamedCookies`
        # @return [Array<String>]
        attr_accessor :include_named_cookies
      
        # If true, http and https requests will be cached separately.
        # Corresponds to the JSON property `includeProtocol`
        # @return [Boolean]
        attr_accessor :include_protocol
        alias_method :include_protocol?, :include_protocol
      
        # If true, include query string parameters in the cache key according to
        # query_string_whitelist and query_string_blacklist. If neither is set, the
        # entire query string will be included. If false, the query string will be
        # excluded from the cache key entirely.
        # Corresponds to the JSON property `includeQueryString`
        # @return [Boolean]
        attr_accessor :include_query_string
        alias_method :include_query_string?, :include_query_string
      
        # Names of query string parameters to exclude in cache keys. All other
        # parameters will be included. Either specify query_string_whitelist or
        # query_string_blacklist, not both. '&' and '=' will be percent encoded and
        # not treated as delimiters.
        # Corresponds to the JSON property `queryStringBlacklist`
        # @return [Array<String>]
        attr_accessor :query_string_blacklist
      
        # Names of query string parameters to include in cache keys. All other
        # parameters will be excluded. Either specify query_string_whitelist or
        # query_string_blacklist, not both. '&' and '=' will be percent encoded and
        # not treated as delimiters.
        # Corresponds to the JSON property `queryStringWhitelist`
        # @return [Array<String>]
        attr_accessor :query_string_whitelist
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @include_host = args[:include_host] if args.key?(:include_host)
          @include_http_headers = args[:include_http_headers] if args.key?(:include_http_headers)
          @include_named_cookies = args[:include_named_cookies] if args.key?(:include_named_cookies)
          @include_protocol = args[:include_protocol] if args.key?(:include_protocol)
          @include_query_string = args[:include_query_string] if args.key?(:include_query_string)
          @query_string_blacklist = args[:query_string_blacklist] if args.key?(:query_string_blacklist)
          @query_string_whitelist = args[:query_string_whitelist] if args.key?(:query_string_whitelist)
        end
      end
      
      # A request to recommend the best way to consume the specified resources in the
      # future.
      class CalendarModeAdviceRequest
        include Google::Apis::Core::Hashable
      
        # Specification of resources to create in the future.
        # The key of the map is an arbitrary string specified by the caller.
        # Value of the map is a specification of required resources and their
        # constraints. Currently only one value is allowed in this map.
        # Corresponds to the JSON property `futureResourcesSpecs`
        # @return [Hash<String,Google::Apis::ComputeV1::FutureResourcesSpec>]
        attr_accessor :future_resources_specs
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @future_resources_specs = args[:future_resources_specs] if args.key?(:future_resources_specs)
        end
      end
      
      # A response containing the recommended way of creating the specified resources
      # in the future. It contains (will contain) multiple recommendations that can
      # be analyzed by the customer and the best one can be picked.
      class CalendarModeAdviceResponse
        include Google::Apis::Core::Hashable
      
        # Recommendations where, how and when to create the requested resources
        # in order to maximize their obtainability and minimize cost.
        # Corresponds to the JSON property `recommendations`
        # @return [Array<Google::Apis::ComputeV1::CalendarModeRecommendation>]
        attr_accessor :recommendations
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @recommendations = args[:recommendations] if args.key?(:recommendations)
        end
      end
      
      # A single recommendation to create requested resources. Contains detailed
      # recommendations for every future resources specification specified in
      # CalendarModeAdviceRequest.
      class CalendarModeRecommendation
        include Google::Apis::Core::Hashable
      
        # Recommendations for every future resource specification passed in
        # CalendarModeAdviceRequest. Keys of the map correspond to keys
        # specified in the request.
        # Corresponds to the JSON property `recommendationsPerSpec`
        # @return [Hash<String,Google::Apis::ComputeV1::FutureResourcesRecommendation>]
        attr_accessor :recommendations_per_spec
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @recommendations_per_spec = args[:recommendations_per_spec] if args.key?(:recommendations_per_spec)
        end
      end
      
      # Settings controlling the volume of requests, connections and retries to this
      # backend service.
      class CircuitBreakers
        include Google::Apis::Core::Hashable
      
        # The maximum number of connections to the backend service. If not specified,
        # there is no limit.
        # Not supported when the backend service is referenced by a URL map that is
        # bound to target gRPC proxy that has validateForProxyless field set to true.
        # Corresponds to the JSON property `maxConnections`
        # @return [Fixnum]
        attr_accessor :max_connections
      
        # The maximum number of pending requests allowed to the backend service. If
        # not specified, there is no limit.
        # Not supported when the backend service is referenced by a URL map that is
        # bound to target gRPC proxy that has validateForProxyless field set to true.
        # Corresponds to the JSON property `maxPendingRequests`
        # @return [Fixnum]
        attr_accessor :max_pending_requests
      
        # The maximum number of parallel requests that allowed to the backend
        # service. If not specified, there is no limit.
        # Corresponds to the JSON property `maxRequests`
        # @return [Fixnum]
        attr_accessor :max_requests
      
        # Maximum requests for a single connection to the backend service.
        # This parameter is respected by both the HTTP/1.1 and HTTP/2
        # implementations. If not specified, there is no limit. Setting this
        # parameter to 1 will effectively disable keep alive.
        # Not supported when the backend service is referenced by a URL map that is
        # bound to target gRPC proxy that has validateForProxyless field set to true.
        # Corresponds to the JSON property `maxRequestsPerConnection`
        # @return [Fixnum]
        attr_accessor :max_requests_per_connection
      
        # The maximum number of parallel retries allowed to the backend cluster. If
        # not specified, the default is 1.
        # Not supported when the backend service is referenced by a URL map that is
        # bound to target gRPC proxy that has validateForProxyless field set to true.
        # Corresponds to the JSON property `maxRetries`
        # @return [Fixnum]
        attr_accessor :max_retries
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max_connections = args[:max_connections] if args.key?(:max_connections)
          @max_pending_requests = args[:max_pending_requests] if args.key?(:max_pending_requests)
          @max_requests = args[:max_requests] if args.key?(:max_requests)
          @max_requests_per_connection = args[:max_requests_per_connection] if args.key?(:max_requests_per_connection)
          @max_retries = args[:max_retries] if args.key?(:max_retries)
        end
      end
      
      # Represents a regional resource-based commitment resource.
      # Creating this commitment resource means that you are purchasing a
      # resource-based committed use contract, with an explicit start and end time.
      # You can purchase resource-based commitments for both hardware and software
      # resources. For more information, read
      # Resource-based committed use discounts
      class Commitment
        include Google::Apis::Core::Hashable
      
        # Specifies whether to automatically renew the commitment at the end of its
        # current term. The default value is false. If you set the field
        # to true, each time your commitment reaches the end of its
        # term, Compute Engine automatically renews it for another term. You can
        # update this field anytime before the commitment expires. For example, if
        # the commitment is set to expire at 12 AM UTC-8 on January 3, 2027, you can
        # update this field until 11:59 PM UTC-8 on January 2, 2027.
        # Corresponds to the JSON property `autoRenew`
        # @return [Boolean]
        attr_accessor :auto_renew
        alias_method :auto_renew?, :auto_renew
      
        # The category of the commitment; specifies whether the commitment is for
        # hardware or software resources. Category MACHINE specifies
        # that you are committing to hardware machine resources such asVCPU or MEMORY,
        # listed in resources.
        # Category LICENSE specifies that you are committing to software
        # licenses, listed in licenseResources.
        # Note that if you specify MACHINE commitments, then you must
        # also specify a type to indicate the machine series of the
        # hardware resource that you are committing to.
        # Corresponds to the JSON property `category`
        # @return [String]
        attr_accessor :category
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # [Input Only] Optional, specifies the requested commitment end time inRFC3339
        # text format. Use this option when the desired
        # commitment's end date is later than the start date + term duration.
        # Corresponds to the JSON property `customEndTimestamp`
        # @return [String]
        attr_accessor :custom_end_timestamp
      
        # An optional description of the commitment. You can provide this property
        # when you create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] Commitment end time inRFC3339
        # text format.
        # Corresponds to the JSON property `endTimestamp`
        # @return [String]
        attr_accessor :end_timestamp
      
        # 
        # Corresponds to the JSON property `existingReservations`
        # @return [Array<String>]
        attr_accessor :existing_reservations
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Always compute#commitment
        # for commitments.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Commitment for a particular license resource.
        # Corresponds to the JSON property `licenseResource`
        # @return [Google::Apis::ComputeV1::LicenseResourceCommitment]
        attr_accessor :license_resource
      
        # The list of source commitments that you are merging to create the new
        # merged commitment. For more information, see
        # Merging commitments.
        # Corresponds to the JSON property `mergeSourceCommitments`
        # @return [Array<String>]
        attr_accessor :merge_source_commitments
      
        # Name of the commitment. You must specify a name when you purchase the
        # commitment. The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The minimum time duration that you commit to purchasing resources.
        # The plan that you choose determines the preset term length of the
        # commitment (which is 1 year or 3 years) and affects the discount rate that
        # you receive for your resources. Committing to a longer time duration
        # typically gives you a higher discount rate. The supported values for this
        # field are TWELVE_MONTH (1 year), andTHIRTY_SIX_MONTH (3 years).
        # Corresponds to the JSON property `plan`
        # @return [String]
        attr_accessor :plan
      
        # Output only. [Output Only] URL of the region where the commitment and
        # committed
        # resources are located.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # The list of new reservations that you want to create and attach to this
        # commitment.
        # You must attach reservations to your commitment if your commitment
        # specifies any GPUs or Local SSD disks. For more information, see
        # Attach reservations to resource-based commitments.
        # Specify this property only if you want to create new
        # reservations to attach. To attach existing reservations, specify
        # theexistingReservations property instead.
        # Corresponds to the JSON property `reservations`
        # @return [Array<Google::Apis::ComputeV1::Reservation>]
        attr_accessor :reservations
      
        # [Output Only] Contains output only fields.
        # Corresponds to the JSON property `resourceStatus`
        # @return [Google::Apis::ComputeV1::CommitmentResourceStatus]
        attr_accessor :resource_status
      
        # The list of all the hardware resources, with their types and amounts, that
        # you want to commit to. Specify as a separate entry in the list for each
        # individual resource type.
        # Corresponds to the JSON property `resources`
        # @return [Array<Google::Apis::ComputeV1::ResourceCommitment>]
        attr_accessor :resources
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # The source commitment from which you are transferring resources to create
        # the new split commitment. For more information, see
        # Split commitments.
        # Corresponds to the JSON property `splitSourceCommitment`
        # @return [String]
        attr_accessor :split_source_commitment
      
        # Output only. [Output Only] Commitment start time inRFC3339
        # text format.
        # Corresponds to the JSON property `startTimestamp`
        # @return [String]
        attr_accessor :start_timestamp
      
        # Output only. [Output Only] Status of the commitment with regards to eventual
        # expiration
        # (each commitment has an end date defined). Status can be one of the
        # following values: NOT_YET_ACTIVE, ACTIVE, orEXPIRED.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Output only. [Output Only] An optional, human-readable explanation of the
        # status.
        # Corresponds to the JSON property `statusMessage`
        # @return [String]
        attr_accessor :status_message
      
        # The type of commitment; specifies the
        # machine series for which you want to commit to purchasing resources.
        # The choice of machine series affects the discount rate and the eligible
        # resource types.
        # The type must be one of the following:ACCELERATOR_OPTIMIZED,
        # ACCELERATOR_OPTIMIZED_A3,ACCELERATOR_OPTIMIZED_A3_MEGA,COMPUTE_OPTIMIZED,
        # COMPUTE_OPTIMIZED_C2D,
        # COMPUTE_OPTIMIZED_C3, COMPUTE_OPTIMIZED_C3D,COMPUTE_OPTIMIZED_H3,
        # GENERAL_PURPOSE,GENERAL_PURPOSE_C4, GENERAL_PURPOSE_E2,GENERAL_PURPOSE_N2,
        # GENERAL_PURPOSE_N2D,GENERAL_PURPOSE_N4, GENERAL_PURPOSE_T2D,GRAPHICS_OPTIMIZED,
        # GRAPHICS_OPTIMIZED_G4,MEMORY_OPTIMIZED, MEMORY_OPTIMIZED_M3,
        # MEMORY_OPTIMIZED_X4, STORAGE_OPTIMIZED_Z3. For
        # example, type MEMORY_OPTIMIZED specifies a commitment that
        # applies only to eligible resources of memory optimized M1 and M2 machine
        # series. Type GENERAL_PURPOSE specifies a commitment that
        # applies only to eligible resources of general purpose N1 machine series.
        # 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)
          @auto_renew = args[:auto_renew] if args.key?(:auto_renew)
          @category = args[:category] if args.key?(:category)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @custom_end_timestamp = args[:custom_end_timestamp] if args.key?(:custom_end_timestamp)
          @description = args[:description] if args.key?(:description)
          @end_timestamp = args[:end_timestamp] if args.key?(:end_timestamp)
          @existing_reservations = args[:existing_reservations] if args.key?(:existing_reservations)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @license_resource = args[:license_resource] if args.key?(:license_resource)
          @merge_source_commitments = args[:merge_source_commitments] if args.key?(:merge_source_commitments)
          @name = args[:name] if args.key?(:name)
          @plan = args[:plan] if args.key?(:plan)
          @region = args[:region] if args.key?(:region)
          @reservations = args[:reservations] if args.key?(:reservations)
          @resource_status = args[:resource_status] if args.key?(:resource_status)
          @resources = args[:resources] if args.key?(:resources)
          @self_link = args[:self_link] if args.key?(:self_link)
          @split_source_commitment = args[:split_source_commitment] if args.key?(:split_source_commitment)
          @start_timestamp = args[:start_timestamp] if args.key?(:start_timestamp)
          @status = args[:status] if args.key?(:status)
          @status_message = args[:status_message] if args.key?(:status_message)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # 
      class CommitmentAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of CommitmentsScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::CommitmentsScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # commitmentAggregatedList for aggregated lists of
        # commitments.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::CommitmentAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::CommitmentAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of Commitment resources.
      class CommitmentList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Commitment resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Commitment>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#commitmentList
        # for lists of commitments.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::CommitmentList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::CommitmentList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # [Output Only] Contains output only fields.
      class CommitmentResourceStatus
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Indicates the end time of customer's eligibility to
        # send
        # custom term requests in RFC3339 text format. Term extension requests that
        # (not the end time in the request) after this time will be rejected.
        # Corresponds to the JSON property `customTermEligibilityEndTimestamp`
        # @return [String]
        attr_accessor :custom_term_eligibility_end_timestamp
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_term_eligibility_end_timestamp = args[:custom_term_eligibility_end_timestamp] if args.key?(:custom_term_eligibility_end_timestamp)
        end
      end
      
      # 
      class CommitmentsScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] The list of commitments contained in this scope.
        # Corresponds to the JSON property `commitments`
        # @return [Array<Google::Apis::ComputeV1::Commitment>]
        attr_accessor :commitments
      
        # [Output Only] Informational warning which replaces the list of commitments
        # when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::CommitmentsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @commitments = args[:commitments] if args.key?(:commitments)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning which replaces the list of commitments
        # when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::CommitmentsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # A set of Confidential Instance options.
      class ConfidentialInstanceConfig
        include Google::Apis::Core::Hashable
      
        # Defines the type of technology used by the confidential instance.
        # Corresponds to the JSON property `confidentialInstanceType`
        # @return [String]
        attr_accessor :confidential_instance_type
      
        # Defines whether the instance should have confidential compute enabled.
        # Corresponds to the JSON property `enableConfidentialCompute`
        # @return [Boolean]
        attr_accessor :enable_confidential_compute
        alias_method :enable_confidential_compute?, :enable_confidential_compute
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @confidential_instance_type = args[:confidential_instance_type] if args.key?(:confidential_instance_type)
          @enable_confidential_compute = args[:enable_confidential_compute] if args.key?(:enable_confidential_compute)
        end
      end
      
      # Message containing connection draining configuration.
      class ConnectionDraining
        include Google::Apis::Core::Hashable
      
        # Configures a duration timeout for existing requests on a removed backend
        # instance. For supported load balancers and protocols, as described inEnabling
        # connection draining.
        # Corresponds to the JSON property `drainingTimeoutSec`
        # @return [Fixnum]
        attr_accessor :draining_timeout_sec
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @draining_timeout_sec = args[:draining_timeout_sec] if args.key?(:draining_timeout_sec)
        end
      end
      
      # This message defines settings for a consistent hash style load balancer.
      class ConsistentHashLoadBalancerSettings
        include Google::Apis::Core::Hashable
      
        # The information about the HTTP Cookie on which the hash function is based
        # for load balancing policies that use a consistent hash.
        # Corresponds to the JSON property `httpCookie`
        # @return [Google::Apis::ComputeV1::ConsistentHashLoadBalancerSettingsHttpCookie]
        attr_accessor :http_cookie
      
        # The hash based on the value of the specified header field. This field is
        # applicable if the sessionAffinity is set toHEADER_FIELD.
        # Corresponds to the JSON property `httpHeaderName`
        # @return [String]
        attr_accessor :http_header_name
      
        # The minimum number of virtual nodes to use for the hash ring. Defaults to
        # 1024. Larger ring sizes result in more granular load distributions. If the
        # number of hosts in the load balancing pool is larger than the ring size,
        # each host will be assigned a single virtual node.
        # Corresponds to the JSON property `minimumRingSize`
        # @return [Fixnum]
        attr_accessor :minimum_ring_size
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @http_cookie = args[:http_cookie] if args.key?(:http_cookie)
          @http_header_name = args[:http_header_name] if args.key?(:http_header_name)
          @minimum_ring_size = args[:minimum_ring_size] if args.key?(:minimum_ring_size)
        end
      end
      
      # The information about the HTTP Cookie on which the hash function is based
      # for load balancing policies that use a consistent hash.
      class ConsistentHashLoadBalancerSettingsHttpCookie
        include Google::Apis::Core::Hashable
      
        # Name of the cookie.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Path to set for the cookie.
        # Corresponds to the JSON property `path`
        # @return [String]
        attr_accessor :path
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `ttl`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :ttl
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @path = args[:path] if args.key?(:path)
          @ttl = args[:ttl] if args.key?(:ttl)
        end
      end
      
      # The specification for allowing client-side cross-origin requests. For more
      # information about the W3C recommendation for cross-origin resource sharing
      # (CORS), see Fetch API Living
      # Standard.
      class CorsPolicy
        include Google::Apis::Core::Hashable
      
        # In response to a preflight request, setting this to true
        # indicates that
        # the actual request can include user credentials. This field translates to
        # the Access-Control-Allow-Credentials header.
        # Default is false.
        # Corresponds to the JSON property `allowCredentials`
        # @return [Boolean]
        attr_accessor :allow_credentials
        alias_method :allow_credentials?, :allow_credentials
      
        # Specifies the content for the Access-Control-Allow-Headers
        # header.
        # Corresponds to the JSON property `allowHeaders`
        # @return [Array<String>]
        attr_accessor :allow_headers
      
        # Specifies the content for the Access-Control-Allow-Methods
        # header.
        # Corresponds to the JSON property `allowMethods`
        # @return [Array<String>]
        attr_accessor :allow_methods
      
        # Specifies a regular expression that matches allowed origins. For
        # more information, see regular expression syntax.
        # An origin is allowed if it matches either an item inallowOrigins or an item
        # inallowOriginRegexes.
        # Regular expressions can only be used when the loadBalancingScheme is
        # set to INTERNAL_SELF_MANAGED.
        # Corresponds to the JSON property `allowOriginRegexes`
        # @return [Array<String>]
        attr_accessor :allow_origin_regexes
      
        # Specifies the list of origins that is allowed to do CORS requests.
        # An origin is allowed if it matches either an item inallowOrigins or an item
        # inallowOriginRegexes.
        # Corresponds to the JSON property `allowOrigins`
        # @return [Array<String>]
        attr_accessor :allow_origins
      
        # If true, disables the CORS policy.
        # The default value is false, which indicates that the CORS
        # policy is in effect.
        # Corresponds to the JSON property `disabled`
        # @return [Boolean]
        attr_accessor :disabled
        alias_method :disabled?, :disabled
      
        # Specifies the content for the Access-Control-Expose-Headers
        # header.
        # Corresponds to the JSON property `exposeHeaders`
        # @return [Array<String>]
        attr_accessor :expose_headers
      
        # Specifies how long results of a preflight request can be cached in
        # seconds. This field translates to the Access-Control-Max-Age
        # header.
        # Corresponds to the JSON property `maxAge`
        # @return [Fixnum]
        attr_accessor :max_age
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @allow_credentials = args[:allow_credentials] if args.key?(:allow_credentials)
          @allow_headers = args[:allow_headers] if args.key?(:allow_headers)
          @allow_methods = args[:allow_methods] if args.key?(:allow_methods)
          @allow_origin_regexes = args[:allow_origin_regexes] if args.key?(:allow_origin_regexes)
          @allow_origins = args[:allow_origins] if args.key?(:allow_origins)
          @disabled = args[:disabled] if args.key?(:disabled)
          @expose_headers = args[:expose_headers] if args.key?(:expose_headers)
          @max_age = args[:max_age] if args.key?(:max_age)
        end
      end
      
      # A resource that represents a cross-site network.
      # You can use cross-site networks to connect your on-premises networks to
      # each other through Interconnect connections.
      class CrossSiteNetwork
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of the cross-site network.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] The unique identifier for the resource type. The
        # server
        # generates this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # crossSiteNetwork for cross-site networks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @self_link = args[:self_link] if args.key?(:self_link)
        end
      end
      
      # Response to the list request that contains a list of cross-site networks.
      class CrossSiteNetworkList
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of CrossSiteNetwork resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::CrossSiteNetwork>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # crossSiteNetwork for cross-site networks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # end_interface: MixerListResponseWithEtagBuilder
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::CrossSiteNetworkList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::CrossSiteNetworkList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Specifies the custom error response policy that must be applied when the
      # backend service or backend bucket responds with an error.
      class CustomErrorResponsePolicy
        include Google::Apis::Core::Hashable
      
        # Specifies rules for returning error responses.
        # In a given policy, if you specify rules for both a range of error codes
        # as well as rules for specific error codes then rules with specific error
        # codes have a higher priority. For example, assume that you configure a rule
        # for 401 (Un-authorized) code, and another for all 4 series
        # error codes (4XX). If the backend service returns a401, then the rule for 401
        # will be applied.
        # However if the backend service returns a 403, the rule for4xx takes effect.
        # Corresponds to the JSON property `errorResponseRules`
        # @return [Array<Google::Apis::ComputeV1::CustomErrorResponsePolicyCustomErrorResponseRule>]
        attr_accessor :error_response_rules
      
        # The full or partial URL to the BackendBucket resource that
        # contains the custom error content. Examples are:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/global/
        # backendBuckets/myBackendBucket
        # - compute/v1/projects/project/global/backendBuckets/myBackendBucket
        # - global/backendBuckets/myBackendBucket
        # If errorService is not specified at lower levels likepathMatcher, pathRule and
        # routeRule,
        # an errorService specified at a higher level in theUrlMap will be used.
        # IfUrlMap.defaultCustomErrorResponsePolicy contains one or
        # moreerrorResponseRules[], it must specifyerrorService.
        # If load balancer cannot reach
        # the backendBucket, a simple Not Found Error will
        # be returned, with the original response code (oroverrideResponseCode if
        # configured).
        # errorService is not supported for internal or regionalHTTP/HTTPS load
        # balancers.
        # Corresponds to the JSON property `errorService`
        # @return [String]
        attr_accessor :error_service
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @error_response_rules = args[:error_response_rules] if args.key?(:error_response_rules)
          @error_service = args[:error_service] if args.key?(:error_service)
        end
      end
      
      # Specifies the mapping between the response code that will be returned along
      # with the custom error content and the response code returned by the backend
      # service.
      class CustomErrorResponsePolicyCustomErrorResponseRule
        include Google::Apis::Core::Hashable
      
        # Valid values include:
        # 
        # 
        # - A number between 400 and 599: For example
        # 401 or 503, in which case the load balancer
        # applies the policy if the error code exactly matches this value.
        # - 5xx: Load Balancer will apply the policy if the
        # backend service responds with any response code in the range of
        # 500 to 599.
        # - 4xx: Load
        # Balancer will apply the policy if the backend service responds with any
        # response code in the range of 400 to
        # 499.
        # Values must be unique within matchResponseCodes and across
        # allerrorResponseRules ofCustomErrorResponsePolicy.
        # Corresponds to the JSON property `matchResponseCodes`
        # @return [Array<String>]
        attr_accessor :match_response_codes
      
        # The HTTP status code returned with the response containing the custom
        # error content. If overrideResponseCode is not supplied, the
        # same response code returned by the original backend bucket or backend
        # service is returned to the client.
        # Corresponds to the JSON property `overrideResponseCode`
        # @return [Fixnum]
        attr_accessor :override_response_code
      
        # The full path to a file within backendBucket . For example:/errors/
        # defaultError.html
        # path must start
        # with a leading slash. path cannot have trailing slashes.
        # If the file is not available in backendBucket  or the
        # load balancer cannot reach the BackendBucket, a simpleNot Found Error is
        # returned to the client.
        # The value must
        # be from 1 to 1024 characters
        # Corresponds to the JSON property `path`
        # @return [String]
        attr_accessor :path
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @match_response_codes = args[:match_response_codes] if args.key?(:match_response_codes)
          @override_response_code = args[:override_response_code] if args.key?(:override_response_code)
          @path = args[:path] if args.key?(:path)
        end
      end
      
      # 
      class CustomerEncryptionKey
        include Google::Apis::Core::Hashable
      
        # The name of the encryption key that is stored in Google Cloud KMS.
        # For example:
        # "kmsKeyName": "projects/kms_project_id/locations/region/keyRings/
        # key_region/cryptoKeys/key
        # The fully-qualifed key name may be returned for resource GET requests. For
        # example:
        # "kmsKeyName": "projects/kms_project_id/locations/region/keyRings/
        # key_region/cryptoKeys/key
        # /cryptoKeyVersions/1
        # Corresponds to the JSON property `kmsKeyName`
        # @return [String]
        attr_accessor :kms_key_name
      
        # The service account being used for the encryption request for the given KMS
        # key. If absent, the Compute Engine default service account is used.
        # For example:
        # "kmsKeyServiceAccount": "name@project_id.iam.gserviceaccount.com/
        # Corresponds to the JSON property `kmsKeyServiceAccount`
        # @return [String]
        attr_accessor :kms_key_service_account
      
        # Specifies a 256-bit customer-supplied
        # encryption key, encoded in RFC
        # 4648 base64 to either encrypt or decrypt this resource. You can
        # provide either the rawKey or thersaEncryptedKey.
        # For example:
        # "rawKey":
        # "SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0="
        # Corresponds to the JSON property `rawKey`
        # @return [String]
        attr_accessor :raw_key
      
        # Specifies an RFC 4648 base64 encoded, RSA-wrapped 2048-bit
        # customer-supplied encryption key to either encrypt or decrypt this
        # resource. You can provide either the rawKey or thersaEncryptedKey.
        # For example:
        # "rsaEncryptedKey":
        # "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFH
        # z0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoD
        # D6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oe=="
        # The key must meet the following requirements before you can provide it to
        # Compute Engine:
        # 
        # 1. The key is wrapped using a RSA public key certificate provided by
        # Google.
        # 2. After being wrapped, the key must be encoded in RFC 4648 base64
        # encoding.
        # Gets the RSA public key certificate provided by Google at:
        # https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem
        # Corresponds to the JSON property `rsaEncryptedKey`
        # @return [String]
        attr_accessor :rsa_encrypted_key
      
        # [Output only] TheRFC
        # 4648 base64 encoded SHA-256 hash of the customer-supplied
        # encryption key that protects this resource.
        # Corresponds to the JSON property `sha256`
        # @return [String]
        attr_accessor :sha256
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @kms_key_name = args[:kms_key_name] if args.key?(:kms_key_name)
          @kms_key_service_account = args[:kms_key_service_account] if args.key?(:kms_key_service_account)
          @raw_key = args[:raw_key] if args.key?(:raw_key)
          @rsa_encrypted_key = args[:rsa_encrypted_key] if args.key?(:rsa_encrypted_key)
          @sha256 = args[:sha256] if args.key?(:sha256)
        end
      end
      
      # 
      class CustomerEncryptionKeyProtectedDisk
        include Google::Apis::Core::Hashable
      
        # Decrypts data associated with the disk with acustomer-supplied
        # encryption key.
        # Corresponds to the JSON property `diskEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :disk_encryption_key
      
        # Specifies a valid partial or full URL to an existing Persistent Disk
        # resource. This field is only applicable for persistent disks.
        # For example:
        # "source": "/compute/v1/projects/project_id/zones/zone/disks/
        # disk_name
        # Corresponds to the JSON property `source`
        # @return [String]
        attr_accessor :source
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disk_encryption_key = args[:disk_encryption_key] if args.key?(:disk_encryption_key)
          @source = args[:source] if args.key?(:source)
        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
      
      # Deprecation status for a public resource.
      class DeprecationStatus
        include Google::Apis::Core::Hashable
      
        # An optional RFC3339 timestamp on or after which the state of this
        # resource is intended to change to DELETED. This is only
        # informational and the status will not change unless the client explicitly
        # changes it.
        # Corresponds to the JSON property `deleted`
        # @return [String]
        attr_accessor :deleted
      
        # An optional RFC3339 timestamp on or after which the state of this
        # resource is intended to change to DEPRECATED. This is only
        # informational and the status will not change unless the client explicitly
        # changes it.
        # Corresponds to the JSON property `deprecated`
        # @return [String]
        attr_accessor :deprecated
      
        # An optional RFC3339 timestamp on or after which the state of this
        # resource is intended to change to OBSOLETE. This is only
        # informational and the status will not change unless the client explicitly
        # changes it.
        # Corresponds to the JSON property `obsolete`
        # @return [String]
        attr_accessor :obsolete
      
        # The URL of the suggested replacement for a deprecated resource.
        # The suggested replacement resource must be the same kind of resource as the
        # deprecated resource.
        # Corresponds to the JSON property `replacement`
        # @return [String]
        attr_accessor :replacement
      
        # The deprecation state of this resource. This can be ACTIVE,DEPRECATED,
        # OBSOLETE, or DELETED.
        # Operations which communicate the end of life date for an image, can useACTIVE.
        # Operations which create a new resource using aDEPRECATED resource will return
        # successfully, but with a
        # warning indicating the deprecated resource and recommending its
        # replacement. Operations which use OBSOLETE orDELETED resources will be
        # rejected and result in an error.
        # 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)
          @deleted = args[:deleted] if args.key?(:deleted)
          @deprecated = args[:deprecated] if args.key?(:deprecated)
          @obsolete = args[:obsolete] if args.key?(:obsolete)
          @replacement = args[:replacement] if args.key?(:replacement)
          @state = args[:state] if args.key?(:state)
        end
      end
      
      # Represents a Persistent Disk resource.
      # Google Compute Engine has two Disk resources:
      # * [Zonal](/compute/docs/reference/rest/v1/disks)
      # * [Regional](/compute/docs/reference/rest/v1/regionDisks)
      # Persistent disks are required for running your VM instances.
      # Create both boot and non-boot (data) persistent disks. For more information,
      # read Persistent Disks. For more
      # storage options, read Storage options.
      # The disks resource represents a zonal persistent disk.
      # For more information, readZonal persistent disks.
      # The regionDisks resource represents a
      # regional persistent disk.  For more information, read
      # Regional resources.
      class Disk
        include Google::Apis::Core::Hashable
      
        # The access mode of the disk.
        # 
        # 
        # - READ_WRITE_SINGLE: The default AccessMode, means the
        # disk can be attached to single instance in RW mode.
        # - READ_WRITE_MANY: The AccessMode means the disk can be
        # attached to multiple instances in RW mode.
        # - READ_ONLY_MANY: The AccessMode means the disk can be
        # attached to multiple instances in RO mode.
        # The AccessMode is only valid for Hyperdisk disk types.
        # Corresponds to the JSON property `accessMode`
        # @return [String]
        attr_accessor :access_mode
      
        # The architecture of the disk. Valid values are
        # ARM64 or X86_64.
        # Corresponds to the JSON property `architecture`
        # @return [String]
        attr_accessor :architecture
      
        # Disk asynchronously replicated into this disk.
        # Corresponds to the JSON property `asyncPrimaryDisk`
        # @return [Google::Apis::ComputeV1::DiskAsyncReplication]
        attr_accessor :async_primary_disk
      
        # Output only. [Output Only] A list of disks this disk is asynchronously
        # replicated to.
        # Corresponds to the JSON property `asyncSecondaryDisks`
        # @return [Hash<String,Google::Apis::ComputeV1::DiskAsyncReplicationList>]
        attr_accessor :async_secondary_disks
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Encrypts the disk using a
        # customer-supplied encryption key or a
        # customer-managed encryption key.
        # Encryption keys do not protect access to metadata of the disk.
        # After you encrypt a disk with a customer-supplied key, you must provide the
        # same key if you use the disk later. For example, to create a disk snapshot,
        # to create a disk image, to create a machine image, or to attach the disk to
        # a virtual machine.
        # After you encrypt a disk with a customer-managed key, thediskEncryptionKey.
        # kmsKeyName is set to a key *version*
        # name once the disk is created. The disk is encrypted with this version of
        # the key. In the response, diskEncryptionKey.kmsKeyName appears
        # in the following format:
        # "diskEncryptionKey.kmsKeyName":
        # "projects/kms_project_id/locations/region/keyRings/
        # key_region/cryptoKeys/key
        # /cryptoKeysVersions/version
        # If you do not provide an encryption key when creating the disk, then the
        # disk is encrypted using an automatically generated key and you don't need
        # to provide a key to use the disk later.
        # Corresponds to the JSON property `diskEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :disk_encryption_key
      
        # Whether this disk is using confidential compute mode.
        # Corresponds to the JSON property `enableConfidentialCompute`
        # @return [Boolean]
        attr_accessor :enable_confidential_compute
        alias_method :enable_confidential_compute?, :enable_confidential_compute
      
        # A list of features to enable on the guest operating system. Applicable
        # only for bootable images. Read
        # Enabling guest operating system features to see a list of available
        # options.
        # Corresponds to the JSON property `guestOsFeatures`
        # @return [Array<Google::Apis::ComputeV1::GuestOsFeature>]
        attr_accessor :guest_os_features
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Always compute#disk for
        # disks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this disk, which is
        # essentially a hash of the labels set used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a disk.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels to apply to this disk. These can be later modified by
        # the setLabels method.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Output only. [Output Only] Last attach timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `lastAttachTimestamp`
        # @return [String]
        attr_accessor :last_attach_timestamp
      
        # Output only. [Output Only] Last detach timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `lastDetachTimestamp`
        # @return [String]
        attr_accessor :last_detach_timestamp
      
        # Integer license codes indicating which licenses are attached to this disk.
        # Corresponds to the JSON property `licenseCodes`
        # @return [Array<Fixnum>]
        attr_accessor :license_codes
      
        # A list of publicly visible licenses. Reserved for Google's use.
        # Corresponds to the JSON property `licenses`
        # @return [Array<String>]
        attr_accessor :licenses
      
        # An opaque location hint used to place the disk close to other resources.
        # This field is for use by internal tools that use the public API.
        # Corresponds to the JSON property `locationHint`
        # @return [String]
        attr_accessor :location_hint
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?`
        # which means the first character must be a lowercase letter, and all
        # following characters must be a dash, lowercase letter, or digit, except
        # the last character, which cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Internal use only.
        # Corresponds to the JSON property `options`
        # @return [String]
        attr_accessor :options
      
        # Additional disk params.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::DiskParams]
        attr_accessor :params
      
        # Physical block size of the persistent disk, in bytes.
        # If not present in a request, a default value is used.
        # The currently supported size is 4096, other sizes may be added in
        # the future.
        # If an unsupported value is requested, the error message will list
        # the supported values for the caller's project.
        # Corresponds to the JSON property `physicalBlockSizeBytes`
        # @return [Fixnum]
        attr_accessor :physical_block_size_bytes
      
        # Indicates how many IOPS to provision for the disk. This sets the number
        # of I/O operations per second that the disk can handle. Values must be
        # between 10,000 and 120,000. For more details, see theExtreme persistent
        # disk documentation.
        # Corresponds to the JSON property `provisionedIops`
        # @return [Fixnum]
        attr_accessor :provisioned_iops
      
        # Indicates how much throughput to provision for the disk. This sets the
        # number of throughput mb per second that the disk can handle. Values must be
        # greater than or equal to 1.
        # Corresponds to the JSON property `provisionedThroughput`
        # @return [Fixnum]
        attr_accessor :provisioned_throughput
      
        # Output only. [Output Only] URL of the region where the disk resides. Only
        # applicable for
        # regional resources.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # URLs of the zones where the disk should be replicated to. Only applicable
        # for regional resources.
        # Corresponds to the JSON property `replicaZones`
        # @return [Array<String>]
        attr_accessor :replica_zones
      
        # Resource policies applied to this disk for automatic snapshot creations.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Array<String>]
        attr_accessor :resource_policies
      
        # Output only. [Output Only] Status information for the disk resource.
        # Corresponds to the JSON property `resourceStatus`
        # @return [Google::Apis::ComputeV1::DiskResourceStatus]
        attr_accessor :resource_status
      
        # Output only. Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzi`
        # @return [Boolean]
        attr_accessor :satisfies_pzi
        alias_method :satisfies_pzi?, :satisfies_pzi
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # Output only. [Output Only] Server-defined fully-qualified URL for this
        # resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Size, in GB, of the persistent disk. You can specify
        # this field when creating a persistent disk using thesourceImage,
        # sourceSnapshot, orsourceDisk parameter, or specify it alone to create an empty
        # persistent disk.
        # If you specify this field along with a source, the value ofsizeGb must not be
        # less than the size of the
        # source.
        # Acceptable values are greater than 0.
        # Corresponds to the JSON property `sizeGb`
        # @return [Fixnum]
        attr_accessor :size_gb
      
        # Output only. [Output Only] URL of the DiskConsistencyGroupPolicy for a
        # secondary disk
        # that was created using a consistency group.
        # Corresponds to the JSON property `sourceConsistencyGroupPolicy`
        # @return [String]
        attr_accessor :source_consistency_group_policy
      
        # Output only. [Output Only] ID of the DiskConsistencyGroupPolicy for a
        # secondary disk
        # that was created using a consistency group.
        # Corresponds to the JSON property `sourceConsistencyGroupPolicyId`
        # @return [String]
        attr_accessor :source_consistency_group_policy_id
      
        # The source disk used to create this disk. You can provide this as a
        # partial or full URL to the resource. For example, the following are valid
        # values:
        # 
        # 
        # -
        # https://www.googleapis.com/compute/v1/projects/project/zones/zone/disks/
        # disk
        # 
        # -
        # https://www.googleapis.com/compute/v1/projects/project/regions/region/
        # disks/disk
        # 
        # -
        # projects/project/zones/zone/disks/disk
        # 
        # -
        # projects/project/regions/region/disks/disk
        # 
        # -
        # zones/zone/disks/disk
        # 
        # -
        # regions/region/disks/disk
        # Corresponds to the JSON property `sourceDisk`
        # @return [String]
        attr_accessor :source_disk
      
        # Output only. [Output Only] The unique ID of the disk used to create this disk.
        # This
        # value identifies the exact disk that was used to create this persistent
        # disk. For example, if you created the persistent disk from a disk that
        # was later deleted and recreated under the same name, the source disk ID
        # would identify the exact version of the disk that was used.
        # Corresponds to the JSON property `sourceDiskId`
        # @return [String]
        attr_accessor :source_disk_id
      
        # The source image used to create this disk. If the source image is
        # deleted, this field will not be set.
        # To create a disk with one of the public operating system images, specify
        # the image by its family name. For example, specifyfamily/debian-9 to use the
        # latest Debian 9 image:
        # projects/debian-cloud/global/images/family/debian-9
        # Alternatively, use a specific version of a public operating system image:
        # projects/debian-cloud/global/images/debian-9-stretch-vYYYYMMDD
        # To create a disk with a custom image that you created, specify the
        # image name in the following format:
        # global/images/my-custom-image
        # You can also specify a custom image by its image family, which returns
        # the latest version of the image in that family. Replace the image name
        # with family/family-name:
        # global/images/family/my-image-family
        # Corresponds to the JSON property `sourceImage`
        # @return [String]
        attr_accessor :source_image
      
        # Thecustomer-supplied
        # encryption key of the source image. Required if the source image is
        # protected by a customer-supplied encryption key.
        # Corresponds to the JSON property `sourceImageEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :source_image_encryption_key
      
        # Output only. [Output Only] The ID value of the image used to create this disk.
        # This
        # value identifies the exact image that was used to create this persistent
        # disk. For example, if you created the persistent disk from an image that
        # was later deleted and recreated under the same name, the source image ID
        # would identify the exact version of the image that was used.
        # Corresponds to the JSON property `sourceImageId`
        # @return [String]
        attr_accessor :source_image_id
      
        # The source instant snapshot used to create this disk. You can provide
        # this as a partial or full URL to the resource. For example, the following
        # are valid values:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/
        # instantSnapshots/instantSnapshot
        # - projects/project/zones/zone/instantSnapshots/instantSnapshot
        # - zones/zone/instantSnapshots/instantSnapshot
        # Corresponds to the JSON property `sourceInstantSnapshot`
        # @return [String]
        attr_accessor :source_instant_snapshot
      
        # Output only. [Output Only] The unique ID of the instant snapshot used to
        # create this
        # disk. This value identifies the exact instant snapshot that was used to
        # create this persistent disk. For example, if you created the persistent
        # disk from an instant snapshot that was later deleted and recreated under
        # the same name, the source instant snapshot ID would identify the exact
        # version of the instant snapshot that was used.
        # Corresponds to the JSON property `sourceInstantSnapshotId`
        # @return [String]
        attr_accessor :source_instant_snapshot_id
      
        # The source snapshot used to create this disk. You can provide this as a
        # partial or full URL to the resource. For example, the following are valid
        # values:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/global/snapshots/
        # snapshot
        # - projects/project/global/snapshots/snapshot
        # - global/snapshots/snapshot
        # Corresponds to the JSON property `sourceSnapshot`
        # @return [String]
        attr_accessor :source_snapshot
      
        # Thecustomer-supplied
        # encryption key of the source snapshot. Required if the source snapshot
        # is protected by a customer-supplied encryption key.
        # Corresponds to the JSON property `sourceSnapshotEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :source_snapshot_encryption_key
      
        # Output only. [Output Only] The unique ID of the snapshot used to create this
        # disk. This
        # value identifies the exact snapshot that was used to create this persistent
        # disk. For example, if you created the persistent disk from a snapshot that
        # was later deleted and recreated under the same name, the source snapshot ID
        # would identify the exact version of the snapshot that was used.
        # Corresponds to the JSON property `sourceSnapshotId`
        # @return [String]
        attr_accessor :source_snapshot_id
      
        # The full Google Cloud Storage URI where the disk image is stored. This file
        # must be a gzip-compressed tarball whose name ends in .tar.gz or virtual
        # machine disk whose name ends in vmdk. Valid URIs may start with gs:// or
        # https://storage.googleapis.com/. This flag is not optimized for creating
        # multiple disks from a source storage object. To create many disks from a
        # source storage object, use gcloud compute images
        # import instead.
        # Corresponds to the JSON property `sourceStorageObject`
        # @return [String]
        attr_accessor :source_storage_object
      
        # Output only. [Output Only] The status of disk creation.
        # 
        # 
        # - CREATING: Disk is provisioning.
        # - RESTORING: Source data is being copied into the
        # disk.
        # - FAILED: Disk creation failed.
        # - READY: Disk is ready for use.
        # - DELETING: Disk is deleting.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # The storage pool in which the new disk is created. You can provide
        # this as a partial or full URL to the resource. For example, the following
        # are valid values:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/
        # storagePools/storagePool
        # - projects/project/zones/zone/storagePools/storagePool
        # - zones/zone/storagePools/storagePool
        # Corresponds to the JSON property `storagePool`
        # @return [String]
        attr_accessor :storage_pool
      
        # URL of the disk type resource describing which disk type to use to create
        # the disk. Provide this when creating the disk. For example:projects/project/
        # zones/zone/diskTypes/pd-ssd. See Persistent disk
        # types.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # Output only. [Output Only] Links to the users of the disk (attached instances)
        # in form:projects/project/zones/zone/instances/instance
        # Corresponds to the JSON property `users`
        # @return [Array<String>]
        attr_accessor :users
      
        # Output only. [Output Only] URL of the zone where the disk resides.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @access_mode = args[:access_mode] if args.key?(:access_mode)
          @architecture = args[:architecture] if args.key?(:architecture)
          @async_primary_disk = args[:async_primary_disk] if args.key?(:async_primary_disk)
          @async_secondary_disks = args[:async_secondary_disks] if args.key?(:async_secondary_disks)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @disk_encryption_key = args[:disk_encryption_key] if args.key?(:disk_encryption_key)
          @enable_confidential_compute = args[:enable_confidential_compute] if args.key?(:enable_confidential_compute)
          @guest_os_features = args[:guest_os_features] if args.key?(:guest_os_features)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @last_attach_timestamp = args[:last_attach_timestamp] if args.key?(:last_attach_timestamp)
          @last_detach_timestamp = args[:last_detach_timestamp] if args.key?(:last_detach_timestamp)
          @license_codes = args[:license_codes] if args.key?(:license_codes)
          @licenses = args[:licenses] if args.key?(:licenses)
          @location_hint = args[:location_hint] if args.key?(:location_hint)
          @name = args[:name] if args.key?(:name)
          @options = args[:options] if args.key?(:options)
          @params = args[:params] if args.key?(:params)
          @physical_block_size_bytes = args[:physical_block_size_bytes] if args.key?(:physical_block_size_bytes)
          @provisioned_iops = args[:provisioned_iops] if args.key?(:provisioned_iops)
          @provisioned_throughput = args[:provisioned_throughput] if args.key?(:provisioned_throughput)
          @region = args[:region] if args.key?(:region)
          @replica_zones = args[:replica_zones] if args.key?(:replica_zones)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
          @resource_status = args[:resource_status] if args.key?(:resource_status)
          @satisfies_pzi = args[:satisfies_pzi] if args.key?(:satisfies_pzi)
          @satisfies_pzs = args[:satisfies_pzs] if args.key?(:satisfies_pzs)
          @self_link = args[:self_link] if args.key?(:self_link)
          @size_gb = args[:size_gb] if args.key?(:size_gb)
          @source_consistency_group_policy = args[:source_consistency_group_policy] if args.key?(:source_consistency_group_policy)
          @source_consistency_group_policy_id = args[:source_consistency_group_policy_id] if args.key?(:source_consistency_group_policy_id)
          @source_disk = args[:source_disk] if args.key?(:source_disk)
          @source_disk_id = args[:source_disk_id] if args.key?(:source_disk_id)
          @source_image = args[:source_image] if args.key?(:source_image)
          @source_image_encryption_key = args[:source_image_encryption_key] if args.key?(:source_image_encryption_key)
          @source_image_id = args[:source_image_id] if args.key?(:source_image_id)
          @source_instant_snapshot = args[:source_instant_snapshot] if args.key?(:source_instant_snapshot)
          @source_instant_snapshot_id = args[:source_instant_snapshot_id] if args.key?(:source_instant_snapshot_id)
          @source_snapshot = args[:source_snapshot] if args.key?(:source_snapshot)
          @source_snapshot_encryption_key = args[:source_snapshot_encryption_key] if args.key?(:source_snapshot_encryption_key)
          @source_snapshot_id = args[:source_snapshot_id] if args.key?(:source_snapshot_id)
          @source_storage_object = args[:source_storage_object] if args.key?(:source_storage_object)
          @status = args[:status] if args.key?(:status)
          @storage_pool = args[:storage_pool] if args.key?(:storage_pool)
          @type = args[:type] if args.key?(:type)
          @users = args[:users] if args.key?(:users)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class DiskAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of DisksScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::DisksScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#diskAggregatedList
        # for aggregated lists of persistent
        # disks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::DiskAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::DiskAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class DiskAsyncReplication
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] URL of the DiskConsistencyGroupPolicy if
        # replication was
        # started on the disk as a member of a group.
        # Corresponds to the JSON property `consistencyGroupPolicy`
        # @return [String]
        attr_accessor :consistency_group_policy
      
        # Output only. [Output Only] ID of the DiskConsistencyGroupPolicy if replication
        # was
        # started on the disk as a member of a group.
        # Corresponds to the JSON property `consistencyGroupPolicyId`
        # @return [String]
        attr_accessor :consistency_group_policy_id
      
        # The other disk asynchronously replicated to or from the current disk.
        # You can provide this as a partial or full URL to the resource.
        # For example, the following are valid values:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/disks/
        # disk
        # - projects/project/zones/zone/disks/disk
        # - zones/zone/disks/disk
        # Corresponds to the JSON property `disk`
        # @return [String]
        attr_accessor :disk
      
        # Output only. [Output Only] The unique ID of the other disk asynchronously
        # replicated
        # to or from the current disk. This value identifies the exact disk that
        # was used to create this replication. For example, if you started
        # replicating the persistent disk from a disk that was later deleted and
        # recreated under the same name, the disk ID would identify the exact
        # version of the disk that was used.
        # Corresponds to the JSON property `diskId`
        # @return [String]
        attr_accessor :disk_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @consistency_group_policy = args[:consistency_group_policy] if args.key?(:consistency_group_policy)
          @consistency_group_policy_id = args[:consistency_group_policy_id] if args.key?(:consistency_group_policy_id)
          @disk = args[:disk] if args.key?(:disk)
          @disk_id = args[:disk_id] if args.key?(:disk_id)
        end
      end
      
      # 
      class DiskAsyncReplicationList
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `asyncReplicationDisk`
        # @return [Google::Apis::ComputeV1::DiskAsyncReplication]
        attr_accessor :async_replication_disk
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @async_replication_disk = args[:async_replication_disk] if args.key?(:async_replication_disk)
        end
      end
      
      # A specification of the desired way to instantiate a disk in the instance
      # template when its created from a source instance.
      class DiskInstantiationConfig
        include Google::Apis::Core::Hashable
      
        # Specifies whether the disk will be auto-deleted when the instance is
        # deleted (but not when the disk is detached from the instance).
        # Corresponds to the JSON property `autoDelete`
        # @return [Boolean]
        attr_accessor :auto_delete
        alias_method :auto_delete?, :auto_delete
      
        # The custom source image to be used to restore this disk when instantiating
        # this instance template.
        # Corresponds to the JSON property `customImage`
        # @return [String]
        attr_accessor :custom_image
      
        # Specifies the device name of the disk to which the configurations apply to.
        # Corresponds to the JSON property `deviceName`
        # @return [String]
        attr_accessor :device_name
      
        # Specifies whether to include the disk and what image to use. Possible
        # values are:
        # 
        # 
        # - source-image: to use the same image that was used to
        # create the source instance's corresponding disk. Applicable to the boot
        # disk and additional read-write disks.
        # - source-image-family: to use the same image family that
        # was used to create the source instance's corresponding disk. Applicable
        # to the boot disk and additional read-write disks.
        # - custom-image: to use a user-provided image url for disk
        # creation. Applicable to the boot disk and additional read-write
        # disks.
        # - attach-read-only: to attach a read-only
        # disk. Applicable to read-only disks.
        # - do-not-include: to exclude a disk from the template.
        # Applicable to additional read-write disks, local SSDs, and read-only
        # disks.
        # Corresponds to the JSON property `instantiateFrom`
        # @return [String]
        attr_accessor :instantiate_from
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auto_delete = args[:auto_delete] if args.key?(:auto_delete)
          @custom_image = args[:custom_image] if args.key?(:custom_image)
          @device_name = args[:device_name] if args.key?(:device_name)
          @instantiate_from = args[:instantiate_from] if args.key?(:instantiate_from)
        end
      end
      
      # A list of Disk resources.
      class DiskList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Disk resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Disk>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#diskList for
        # lists of disks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::DiskList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::DiskList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class MoveDiskRequest
        include Google::Apis::Core::Hashable
      
        # The URL of the destination zone to move the disk. This can be a full or
        # partial URL. For example, the following are all valid URLs to a zone:
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone
        # - projects/project/zones/zone
        # - zones/zone
        # Corresponds to the JSON property `destinationZone`
        # @return [String]
        attr_accessor :destination_zone
      
        # The URL of the target disk to move. This can be a full or partial URL.
        # For example, the following are all valid URLs to a disk:
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/disks/
        # disk
        # - projects/project/zones/zone/disks/disk
        # - zones/zone/disks/disk
        # Corresponds to the JSON property `targetDisk`
        # @return [String]
        attr_accessor :target_disk
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @destination_zone = args[:destination_zone] if args.key?(:destination_zone)
          @target_disk = args[:target_disk] if args.key?(:target_disk)
        end
      end
      
      # Additional disk params.
      class DiskParams
        include Google::Apis::Core::Hashable
      
        # Resource manager tags to be bound to the disk. Tag keys and values
        # have the same definition as resource
        # manager tags. Keys and values can be either in numeric format,
        # such as `tagKeys/`tag_key_id`` and `tagValues/456` or in namespaced
        # format such as ``org_id|project_id`/`tag_key_short_name`` and
        # ``tag_value_short_name``. The field is ignored (both PUT &
        # PATCH) when empty.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # 
      class DiskResourceStatus
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `asyncPrimaryDisk`
        # @return [Google::Apis::ComputeV1::DiskResourceStatusAsyncReplicationStatus]
        attr_accessor :async_primary_disk
      
        # Key: disk, value: AsyncReplicationStatus message
        # Corresponds to the JSON property `asyncSecondaryDisks`
        # @return [Hash<String,Google::Apis::ComputeV1::DiskResourceStatusAsyncReplicationStatus>]
        attr_accessor :async_secondary_disks
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @async_primary_disk = args[:async_primary_disk] if args.key?(:async_primary_disk)
          @async_secondary_disks = args[:async_secondary_disks] if args.key?(:async_secondary_disks)
        end
      end
      
      # 
      class DiskResourceStatusAsyncReplicationStatus
        include Google::Apis::Core::Hashable
      
        # 
        # 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)
          @state = args[:state] if args.key?(:state)
        end
      end
      
      # Represents a Disk Type resource.
      # Google Compute Engine has two Disk Type resources:
      # * [Regional](/compute/docs/reference/rest/v1/regionDiskTypes)
      # * [Zonal](/compute/docs/reference/rest/v1/diskTypes)
      # You can choose from a variety of disk types based on your needs.
      # For more information, readStorage options.
      # The diskTypes resource represents disk types for a zonal
      # persistent disk.
      # For more information, readZonal persistent disks.
      # The regionDiskTypes resource represents disk types for a
      # regional persistent disk. For more information, read Regional persistent disks.
      class DiskType
        include Google::Apis::Core::Hashable
      
        # [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # [Output Only] Server-defined default disk size in GB.
        # Corresponds to the JSON property `defaultDiskSizeGb`
        # @return [Fixnum]
        attr_accessor :default_disk_size_gb
      
        # Deprecation status for a public resource.
        # Corresponds to the JSON property `deprecated`
        # @return [Google::Apis::ComputeV1::DeprecationStatus]
        attr_accessor :deprecated
      
        # [Output Only] An optional description of this resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Always compute#diskType
        # for disk types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] Name of the resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # [Output Only] URL of the region where the disk type resides. Only
        # applicable for regional resources.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] An optional textual description of the valid disk size,
        # such as "10GB-10TB".
        # Corresponds to the JSON property `validDiskSize`
        # @return [String]
        attr_accessor :valid_disk_size
      
        # [Output Only] URL of the zone where the disk type resides.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @default_disk_size_gb = args[:default_disk_size_gb] if args.key?(:default_disk_size_gb)
          @deprecated = args[:deprecated] if args.key?(:deprecated)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @valid_disk_size = args[:valid_disk_size] if args.key?(:valid_disk_size)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class DiskTypeAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of DiskTypesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::DiskTypesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # diskTypeAggregatedList.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::DiskTypeAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::DiskTypeAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of disk types.
      class DiskTypeList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of DiskType resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::DiskType>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#diskTypeList
        # for disk types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::DiskTypeList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::DiskTypeList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class DiskTypesScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of disk types contained in this scope.
        # Corresponds to the JSON property `diskTypes`
        # @return [Array<Google::Apis::ComputeV1::DiskType>]
        attr_accessor :disk_types
      
        # [Output Only] Informational warning which replaces the list of disk types
        # when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::DiskTypesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disk_types = args[:disk_types] if args.key?(:disk_types)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning which replaces the list of disk types
        # when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::DiskTypesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class DisksAddResourcePoliciesRequest
        include Google::Apis::Core::Hashable
      
        # Full or relative path to the resource policy to be added to this disk. You
        # can only specify one resource policy.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Array<String>]
        attr_accessor :resource_policies
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
        end
      end
      
      # 
      class DisksRemoveResourcePoliciesRequest
        include Google::Apis::Core::Hashable
      
        # Resource policies to be removed from this disk.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Array<String>]
        attr_accessor :resource_policies
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
        end
      end
      
      # 
      class DisksResizeRequest
        include Google::Apis::Core::Hashable
      
        # The new size of the persistent disk, which is specified in GB.
        # Corresponds to the JSON property `sizeGb`
        # @return [Fixnum]
        attr_accessor :size_gb
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @size_gb = args[:size_gb] if args.key?(:size_gb)
        end
      end
      
      # 
      class DisksScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of disks contained in this scope.
        # Corresponds to the JSON property `disks`
        # @return [Array<Google::Apis::ComputeV1::Disk>]
        attr_accessor :disks
      
        # [Output Only] Informational warning which replaces the list of disks when
        # the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::DisksScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disks = args[:disks] if args.key?(:disks)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning which replaces the list of disks when
        # the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::DisksScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class DisksStartAsyncReplicationRequest
        include Google::Apis::Core::Hashable
      
        # The secondary disk to start asynchronous replication to.
        # You can provide this as a partial or full URL to the resource. For example,
        # the following are valid values:
        # 
        # 
        # -
        # https://www.googleapis.com/compute/v1/projects/project/zones/zone/disks/
        # disk
        # 
        # -
        # https://www.googleapis.com/compute/v1/projects/project/regions/region/
        # disks/disk
        # 
        # -
        # projects/project/zones/zone/disks/disk
        # 
        # -
        # projects/project/regions/region/disks/disk
        # 
        # -
        # zones/zone/disks/disk
        # 
        # -
        # regions/region/disks/disk
        # Corresponds to the JSON property `asyncSecondaryDisk`
        # @return [String]
        attr_accessor :async_secondary_disk
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @async_secondary_disk = args[:async_secondary_disk] if args.key?(:async_secondary_disk)
        end
      end
      
      # A transient resource used in compute.disks.stopGroupAsyncReplication and
      # compute.regionDisks.stopGroupAsyncReplication. It is only used to process
      # requests and is not persisted.
      class DisksStopGroupAsyncReplicationResource
        include Google::Apis::Core::Hashable
      
        # The URL of the DiskConsistencyGroupPolicy for the group of disks to stop.
        # This may be a full or partial URL, such as:
        # 
        # 
        # -
        # https://www.googleapis.com/compute/v1/projects/project/regions/region/
        # resourcePolicies/resourcePolicy
        # 
        # -
        # projects/project/regions/region/resourcePolicies/resourcePolicy
        # 
        # -
        # regions/region/resourcePolicies/resourcePolicy
        # Corresponds to the JSON property `resourcePolicy`
        # @return [String]
        attr_accessor :resource_policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_policy = args[:resource_policy] if args.key?(:resource_policy)
        end
      end
      
      # A set of Display Device options
      class DisplayDevice
        include Google::Apis::Core::Hashable
      
        # Defines whether the instance has Display enabled.
        # Corresponds to the JSON property `enableDisplay`
        # @return [Boolean]
        attr_accessor :enable_display
        alias_method :enable_display?, :enable_display
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @enable_display = args[:enable_display] if args.key?(:enable_display)
        end
      end
      
      # 
      class DistributionPolicy
        include Google::Apis::Core::Hashable
      
        # The distribution shape to which the group converges either proactively or
        # on resize events (depending on the value set inupdatePolicy.
        # instanceRedistributionType).
        # Corresponds to the JSON property `targetShape`
        # @return [String]
        attr_accessor :target_shape
      
        # Zones where the regional managed instance group will create and manage
        # its instances.
        # Corresponds to the JSON property `zones`
        # @return [Array<Google::Apis::ComputeV1::DistributionPolicyZoneConfiguration>]
        attr_accessor :zones
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @target_shape = args[:target_shape] if args.key?(:target_shape)
          @zones = args[:zones] if args.key?(:zones)
        end
      end
      
      # 
      class DistributionPolicyZoneConfiguration
        include Google::Apis::Core::Hashable
      
        # The URL of thezone.
        # The zone must exist in the region where the managed instance group is
        # located.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # A Duration represents a fixed-length span of time represented
      # as a count of seconds and fractions of seconds at nanosecond
      # resolution. It is independent of any calendar and concepts like "day"
      # or "month". Range is approximately 10,000 years.
      class Duration
        include Google::Apis::Core::Hashable
      
        # Span of time that's a fraction of a second at nanosecond resolution.
        # Durations less than one second are represented with a 0
        # `seconds` field and a positive `nanos` field. Must be from 0
        # to 999,999,999 inclusive.
        # Corresponds to the JSON property `nanos`
        # @return [Fixnum]
        attr_accessor :nanos
      
        # Span of time at a resolution of a second. Must be from 0
        # to 315,576,000,000 inclusive. Note: these bounds are computed from:
        # 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
        # Corresponds to the JSON property `seconds`
        # @return [Fixnum]
        attr_accessor :seconds
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @nanos = args[:nanos] if args.key?(:nanos)
          @seconds = args[:seconds] if args.key?(:seconds)
        end
      end
      
      # Describes the cause of the error with structured details.
      # Example of an error when contacting the "pubsub.googleapis.com" API when it
      # is not enabled:
      # ` "reason": "API_DISABLED"
      # "domain": "googleapis.com"
      # "metadata": `
      # "resource": "projects/123",
      # "service": "pubsub.googleapis.com"
      # `
      # `
      # This response indicates that the pubsub.googleapis.com API is not enabled.
      # Example of an error that is returned when attempting to create a Spanner
      # instance in a region that is out of stock:
      # ` "reason": "STOCKOUT"
      # "domain": "spanner.googleapis.com",
      # "metadata": `
      # "availableRegions": "us-central1,us-east2"
      # `
      # `
      class ErrorInfo
        include Google::Apis::Core::Hashable
      
        # The logical grouping to which the "reason" belongs. The error domain
        # is typically the registered service name of the tool or product that
        # generates the error. Example: "pubsub.googleapis.com". If the error is
        # generated by some common infrastructure, the error domain must be a
        # globally unique value that identifies the infrastructure. For Google API
        # infrastructure, the error domain is "googleapis.com".
        # Corresponds to the JSON property `domain`
        # @return [String]
        attr_accessor :domain
      
        # Additional structured details about this error.
        # Keys must match a regular expression of `a-z+` but should
        # ideally be lowerCamelCase. Also, they must be limited to 64 characters in
        # length. When identifying the current value of an exceeded limit, the units
        # should be contained in the key, not the value.  For example, rather than
        # ``"instanceLimit": "100/request"``, should be returned as,
        # ``"instanceLimitPerRequest": "100"``, if the client exceeds the number of
        # instances that can be created in a single (batch) request.
        # Corresponds to the JSON property `metadatas`
        # @return [Hash<String,String>]
        attr_accessor :metadatas
      
        # The reason of the error. This is a constant value that identifies the
        # proximate cause of the error. Error reasons are unique within a particular
        # domain of errors. This should be at most 63 characters and match a
        # regular expression of `A-Z+[A-Z0-9]`, which represents
        # UPPER_SNAKE_CASE.
        # Corresponds to the JSON property `reason`
        # @return [String]
        attr_accessor :reason
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @domain = args[:domain] if args.key?(:domain)
          @metadatas = args[:metadatas] if args.key?(:metadatas)
          @reason = args[:reason] if args.key?(:reason)
        end
      end
      
      # 
      class ExchangedPeeringRoute
        include Google::Apis::Core::Hashable
      
        # The destination range of the route.
        # Corresponds to the JSON property `destRange`
        # @return [String]
        attr_accessor :dest_range
      
        # True if the peering route has been imported from a peer. The actual import
        # happens if the field networkPeering.importCustomRoutes is true
        # for this network, and networkPeering.exportCustomRoutes is
        # true for the peer network, and the import does not result in a route
        # conflict.
        # Corresponds to the JSON property `imported`
        # @return [Boolean]
        attr_accessor :imported
        alias_method :imported?, :imported
      
        # The region of peering route next hop, only applies to dynamic routes.
        # Corresponds to the JSON property `nextHopRegion`
        # @return [String]
        attr_accessor :next_hop_region
      
        # The priority of the peering route.
        # Corresponds to the JSON property `priority`
        # @return [Fixnum]
        attr_accessor :priority
      
        # The type of the peering route.
        # 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)
          @dest_range = args[:dest_range] if args.key?(:dest_range)
          @imported = args[:imported] if args.key?(:imported)
          @next_hop_region = args[:next_hop_region] if args.key?(:next_hop_region)
          @priority = args[:priority] if args.key?(:priority)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # 
      class ExchangedPeeringRoutesList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of ExchangedPeeringRoute resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::ExchangedPeeringRoute>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # exchangedPeeringRoutesList for exchanged peering
        # routes lists.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ExchangedPeeringRoutesList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ExchangedPeeringRoutesList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a textual expression in the Common Expression Language (CEL)
      # syntax. CEL is a C-like expression language. The syntax and semantics of CEL
      # are documented at https://github.com/google/cel-spec.
      # Example (Comparison):
      # title: "Summary size limit"
      # description: "Determines if a summary is less than 100 chars"
      # expression: "document.summary.size() < 100"
      # Example (Equality):
      # title: "Requestor is owner"
      # description: "Determines if requestor is the document owner"
      # expression: "document.owner == request.auth.claims.email"
      # Example (Logic):
      # title: "Public documents"
      # description: "Determine whether the document should be publicly visible"
      # expression: "document.type != 'private' && document.type != 'internal'"
      # Example (Data Manipulation):
      # title: "Notification string"
      # description: "Create a notification string with a timestamp."
      # expression: "'New message received at ' + string(document.create_time)"
      # The exact variables and functions that may be referenced within an expression
      # are determined by the service that evaluates it. See the service
      # documentation for additional information.
      class Expr
        include Google::Apis::Core::Hashable
      
        # Optional. Description of the expression. This is a longer text which
        # describes the expression, e.g. when hovered over it in a UI.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Textual representation of an expression in Common Expression Language
        # syntax.
        # Corresponds to the JSON property `expression`
        # @return [String]
        attr_accessor :expression
      
        # Optional. String indicating the location of the expression for error
        # reporting, e.g. a file name and a position in the file.
        # Corresponds to the JSON property `location`
        # @return [String]
        attr_accessor :location
      
        # Optional. Title for the expression, i.e. a short string describing
        # its purpose. This can be used e.g. in UIs which allow to enter the
        # expression.
        # Corresponds to the JSON property `title`
        # @return [String]
        attr_accessor :title
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @description = args[:description] if args.key?(:description)
          @expression = args[:expression] if args.key?(:expression)
          @location = args[:location] if args.key?(:location)
          @title = args[:title] if args.key?(:title)
        end
      end
      
      # Represents an external VPN gateway.
      # External VPN gateway is the on-premises VPN gateway(s) or another cloud
      # provider's VPN gateway that connects to your Google Cloud VPN gateway.
      # To create a highly available VPN from Google Cloud Platform to your
      # VPN gateway or another cloud provider's VPN gateway, you must create a
      # external VPN gateway resource with information about the other gateway.
      # For more information about using external VPN gateways, see
      # Creating an HA VPN gateway and tunnel pair to a peer VPN.
      class ExternalVpnGateway
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # A list of interfaces for this external VPN gateway.
        # If your peer-side gateway is an on-premises gateway and non-AWS cloud
        # providers' gateway, at most two interfaces can be provided for an external
        # VPN gateway. If your peer side is an AWS virtual private gateway, four
        # interfaces should be provided for an external VPN gateway.
        # Corresponds to the JSON property `interfaces`
        # @return [Array<Google::Apis::ComputeV1::ExternalVpnGatewayInterface>]
        attr_accessor :interfaces
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # externalVpnGateway for externalVpnGateways.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this ExternalVpnGateway,
        # which is essentially a hash of the labels set used for optimistic locking.
        # The fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve an ExternalVpnGateway.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels for this resource. These can only be added or modified by thesetLabels
        # method. Each label key/value pair must comply withRFC1035.
        # Label values may be empty.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Indicates the user-supplied redundancy type of this external VPN gateway.
        # Corresponds to the JSON property `redundancyType`
        # @return [String]
        attr_accessor :redundancy_type
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @interfaces = args[:interfaces] if args.key?(:interfaces)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @name = args[:name] if args.key?(:name)
          @redundancy_type = args[:redundancy_type] if args.key?(:redundancy_type)
          @self_link = args[:self_link] if args.key?(:self_link)
        end
      end
      
      # The interface for the external VPN gateway.
      class ExternalVpnGatewayInterface
        include Google::Apis::Core::Hashable
      
        # The numeric ID of this interface.
        # The allowed input values for this id for different redundancy types of
        # external VPN gateway:
        # 
        # - SINGLE_IP_INTERNALLY_REDUNDANT - 0
        # - TWO_IPS_REDUNDANCY - 0, 1
        # - FOUR_IPS_REDUNDANCY - 0, 1, 2, 3
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # IP address of the interface in the external VPN gateway. Only IPv4 is
        # supported. This IP address can be either from your on-premise gateway or
        # another Cloud provider's VPN gateway, it cannot be an IP address from
        # Google Compute Engine.
        # Corresponds to the JSON property `ipAddress`
        # @return [String]
        attr_accessor :ip_address
      
        # IPv6 address of the interface in the external VPN gateway. This IPv6
        # address can be either from your on-premise gateway or another Cloud
        # provider's VPN gateway, it cannot be an IP address from Google Compute
        # Engine. Must specify an IPv6 address (not IPV4-mapped) using any format
        # described in RFC 4291 (e.g. 2001:db8:0:0:2d9:51:0:0). The output format
        # is RFC 5952 format (e.g. 2001:db8::2d9:51:0:0).
        # Corresponds to the JSON property `ipv6Address`
        # @return [String]
        attr_accessor :ipv6_address
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @ip_address = args[:ip_address] if args.key?(:ip_address)
          @ipv6_address = args[:ipv6_address] if args.key?(:ipv6_address)
        end
      end
      
      # Response to the list request, and contains a list of externalVpnGateways.
      class ExternalVpnGatewayList
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of ExternalVpnGateway resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::ExternalVpnGateway>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#
        # externalVpnGatewayList for lists of externalVpnGateways.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ExternalVpnGatewayList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ExternalVpnGatewayList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class FileContentBuffer
        include Google::Apis::Core::Hashable
      
        # The raw content in the secure keys file.
        # Corresponds to the JSON property `content`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :content
      
        # The file type of source file.
        # Corresponds to the JSON property `fileType`
        # @return [String]
        attr_accessor :file_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content = args[:content] if args.key?(:content)
          @file_type = args[:file_type] if args.key?(:file_type)
        end
      end
      
      # Represents a Firewall Rule resource.
      # Firewall rules allow or deny ingress traffic to, and egress traffic from your
      # instances. For more information, readFirewall rules.
      class Firewall
        include Google::Apis::Core::Hashable
      
        # The list of ALLOW rules specified by this firewall. Each rule specifies a
        # protocol and port-range tuple that describes a permitted connection.
        # Corresponds to the JSON property `allowed`
        # @return [Array<Google::Apis::ComputeV1::Firewall::Allowed>]
        attr_accessor :allowed
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # The list of DENY rules specified by this firewall. Each rule specifies a
        # protocol and port-range tuple that describes a denied connection.
        # Corresponds to the JSON property `denied`
        # @return [Array<Google::Apis::ComputeV1::Firewall::Denied>]
        attr_accessor :denied
      
        # An optional description of this resource. Provide this field when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # If destination ranges are specified, the firewall rule applies only to
        # traffic that has destination IP address in these ranges. These ranges must
        # be expressed inCIDR format. Both IPv4 and IPv6 are supported.
        # Corresponds to the JSON property `destinationRanges`
        # @return [Array<String>]
        attr_accessor :destination_ranges
      
        # Direction of traffic to which this firewall applies, either `INGRESS` or
        # `EGRESS`. The default is `INGRESS`. For `EGRESS` traffic, you cannot
        # specify the sourceTags fields.
        # Corresponds to the JSON property `direction`
        # @return [String]
        attr_accessor :direction
      
        # Denotes whether the firewall rule is disabled. When set to true, the
        # firewall rule is not enforced and the network behaves as if it did not
        # exist. If this is unspecified, the firewall rule will be enabled.
        # Corresponds to the JSON property `disabled`
        # @return [Boolean]
        attr_accessor :disabled
        alias_method :disabled?, :disabled
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Always compute#firewall
        # for firewall rules.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The available logging options for a firewall rule.
        # Corresponds to the JSON property `logConfig`
        # @return [Google::Apis::ComputeV1::FirewallLogConfig]
        attr_accessor :log_config
      
        # Name of the resource; provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?`. The first character
        # must be a lowercase letter, and all following characters (except for the
        # last character) must be a dash, lowercase letter, or digit. The last
        # character must be a lowercase letter or digit.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # URL of the network resource for this firewall rule. If not
        # specified when creating a firewall rule, the default network
        # is used:
        # global/networks/default
        # If you choose to specify this field, you can specify the network as a full
        # or partial URL. For example, the following are all valid URLs:
        # 
        # -
        # https://www.googleapis.com/compute/v1/projects/myproject/global/networks/my-
        # network
        # - projects/myproject/global/networks/my-network
        # - global/networks/default
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # Additional firewall parameters.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::FirewallParams]
        attr_accessor :params
      
        # Priority for this rule.
        # This is an integer between `0` and `65535`, both inclusive.
        # The default value is `1000`.
        # Relative priorities determine which rule takes effect if multiple rules
        # apply. Lower values indicate higher priority. For example, a rule with
        # priority `0` has higher precedence than a rule with priority `1`.
        # DENY rules take precedence over ALLOW rules if they have equal priority.
        # Note that VPC networks have implied
        # rules with a priority of `65535`. To avoid conflicts with the implied
        # rules, use a priority number less than `65535`.
        # Corresponds to the JSON property `priority`
        # @return [Fixnum]
        attr_accessor :priority
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # If source ranges are specified, the firewall rule applies only to traffic
        # that has a source IP address in these ranges. These ranges must be
        # expressed inCIDR format. One or both of sourceRanges
        # and sourceTags may be set.
        # If both fields are set, the rule applies to traffic that has a
        # source IP address within sourceRanges OR a source IP
        # from a resource with a matching tag listed in thesourceTags field. The
        # connection does not need to match
        # both fields for the rule to
        # apply. Both IPv4 and IPv6 are supported.
        # Corresponds to the JSON property `sourceRanges`
        # @return [Array<String>]
        attr_accessor :source_ranges
      
        # If source service accounts are specified, the firewall rules apply only to
        # traffic originating from an instance with a service account in this list.
        # Source service accounts cannot be used to control traffic to an instance's
        # external IP address because service accounts are associated with an
        # instance, not an IP address.sourceRanges can be set at the same time
        # assourceServiceAccounts.
        # If both are set, the firewall applies to traffic that
        # has a source IP address within the sourceRanges OR a source
        # IP that belongs to an instance with service account listed
        # insourceServiceAccount. The connection does not need to match
        # both fields for the firewall to apply.sourceServiceAccounts cannot be used at
        # the same time assourceTags or targetTags.
        # Corresponds to the JSON property `sourceServiceAccounts`
        # @return [Array<String>]
        attr_accessor :source_service_accounts
      
        # If source tags are specified, the firewall rule applies only to traffic
        # with source IPs that match the primary network interfaces of VM instances
        # that have the tag and are in the same VPC network.
        # Source tags cannot be used to control traffic to an instance's external IP
        # address, it only applies to traffic between instances in the same virtual
        # network. Because tags are associated with instances, not IP addresses.
        # One or both of sourceRanges and sourceTags may be
        # set. If both fields are set, the firewall applies to traffic that has a
        # source IP address within sourceRanges OR a source IP from a
        # resource with a matching tag listed in the sourceTags
        # field. The connection does not need to match both fields for the
        # firewall to apply.
        # Corresponds to the JSON property `sourceTags`
        # @return [Array<String>]
        attr_accessor :source_tags
      
        # A list of service accounts indicating sets of instances located in the
        # network that may make network connections as specified inallowed[].
        # targetServiceAccounts cannot be used at the same time astargetTags or
        # sourceTags.
        # If neither targetServiceAccounts nor targetTags
        # are specified, the firewall rule applies to all instances on the specified
        # network.
        # Corresponds to the JSON property `targetServiceAccounts`
        # @return [Array<String>]
        attr_accessor :target_service_accounts
      
        # A list of tags that controls which instances the firewall rule
        # applies to. If targetTags are specified, then the firewall
        # rule applies only to instances in the VPC network that have one of those
        # tags. If no targetTags are specified, the firewall rule
        # applies to all instances on the specified network.
        # Corresponds to the JSON property `targetTags`
        # @return [Array<String>]
        attr_accessor :target_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @allowed = args[:allowed] if args.key?(:allowed)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @denied = args[:denied] if args.key?(:denied)
          @description = args[:description] if args.key?(:description)
          @destination_ranges = args[:destination_ranges] if args.key?(:destination_ranges)
          @direction = args[:direction] if args.key?(:direction)
          @disabled = args[:disabled] if args.key?(:disabled)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @log_config = args[:log_config] if args.key?(:log_config)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @params = args[:params] if args.key?(:params)
          @priority = args[:priority] if args.key?(:priority)
          @self_link = args[:self_link] if args.key?(:self_link)
          @source_ranges = args[:source_ranges] if args.key?(:source_ranges)
          @source_service_accounts = args[:source_service_accounts] if args.key?(:source_service_accounts)
          @source_tags = args[:source_tags] if args.key?(:source_tags)
          @target_service_accounts = args[:target_service_accounts] if args.key?(:target_service_accounts)
          @target_tags = args[:target_tags] if args.key?(:target_tags)
        end
        
        # 
        class Allowed
          include Google::Apis::Core::Hashable
        
          # The IP protocol to which this rule applies. The protocol type is
          # required when creating a firewall rule. This value can either be one of the
          # following well known protocol strings (tcp, udp,icmp, esp, ah, ipip,sctp) or
          # the IP protocol number.
          # Corresponds to the JSON property `IPProtocol`
          # @return [String]
          attr_accessor :ip_protocol
        
          # An optional list of ports to which this rule applies.
          # This field is only applicable for the UDP or TCP protocol.
          # Each entry must be either an integer or a range.
          # If not specified, this rule applies to connections through any port.
          # Example inputs include: ["22"], ["80","443"],
          # and ["12345-12349"].
          # Corresponds to the JSON property `ports`
          # @return [Array<String>]
          attr_accessor :ports
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @ip_protocol = args[:ip_protocol] if args.key?(:ip_protocol)
            @ports = args[:ports] if args.key?(:ports)
          end
        end
        
        # 
        class Denied
          include Google::Apis::Core::Hashable
        
          # The IP protocol to which this rule applies. The protocol type is
          # required when creating a firewall rule. This value can either be one of the
          # following well known protocol strings (tcp, udp,icmp, esp, ah, ipip,sctp) or
          # the IP protocol number.
          # Corresponds to the JSON property `IPProtocol`
          # @return [String]
          attr_accessor :ip_protocol
        
          # An optional list of ports to which this rule applies.
          # This field is only applicable for the UDP or TCP protocol.
          # Each entry must be either an integer or a range.
          # If not specified, this rule applies to connections through any port.
          # Example inputs include: ["22"], ["80","443"],
          # and ["12345-12349"].
          # Corresponds to the JSON property `ports`
          # @return [Array<String>]
          attr_accessor :ports
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @ip_protocol = args[:ip_protocol] if args.key?(:ip_protocol)
            @ports = args[:ports] if args.key?(:ports)
          end
        end
      end
      
      # Contains a list of firewalls.
      class FirewallList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Firewall resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Firewall>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#firewallList
        # for lists of firewalls.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::FirewallList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::FirewallList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # The available logging options for a firewall rule.
      class FirewallLogConfig
        include Google::Apis::Core::Hashable
      
        # This field denotes whether to enable logging for a particular firewall
        # rule.
        # Corresponds to the JSON property `enable`
        # @return [Boolean]
        attr_accessor :enable
        alias_method :enable?, :enable
      
        # This field can only be specified for a particular firewall rule if
        # logging is enabled for that rule. This field denotes whether to include
        # or exclude metadata for firewall logs.
        # Corresponds to the JSON property `metadata`
        # @return [String]
        attr_accessor :metadata
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @enable = args[:enable] if args.key?(:enable)
          @metadata = args[:metadata] if args.key?(:metadata)
        end
      end
      
      # Additional firewall parameters.
      class FirewallParams
        include Google::Apis::Core::Hashable
      
        # Tag keys/values directly bound to this resource.
        # Tag keys and values have the same definition as resource
        # manager tags. The field is allowed for INSERT
        # only. The keys/values to set on the resource should be specified in
        # either ID ` : ` or Namespaced format
        # ` : `.
        # For example the following are valid inputs:
        # * `"tagKeys/333" : "tagValues/444", "tagKeys/123" : "tagValues/456"`
        # * `"123/environment" : "production", "345/abc" : "xyz"`
        # Note:
        # * Invalid combinations of ID & namespaced format is not supported. For
        # instance: `"123/environment" : "tagValues/444"` is invalid.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # 
      class FirewallPoliciesListAssociationsResponse
        include Google::Apis::Core::Hashable
      
        # A list of associations.
        # Corresponds to the JSON property `associations`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicyAssociation>]
        attr_accessor :associations
      
        # Output only. [Output Only] Type of firewallPolicy associations. Alwayscompute#
        # FirewallPoliciesListAssociations for lists of
        # firewallPolicy associations.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @associations = args[:associations] if args.key?(:associations)
          @kind = args[:kind] if args.key?(:kind)
        end
      end
      
      # 
      class FirewallPoliciesScopedList
        include Google::Apis::Core::Hashable
      
        # A list of firewall policies contained in this scope.
        # Corresponds to the JSON property `firewallPolicies`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicy>]
        attr_accessor :firewall_policies
      
        # Informational warning which replaces the list of firewall policies when
        # the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::FirewallPoliciesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @firewall_policies = args[:firewall_policies] if args.key?(:firewall_policies)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of firewall policies when
        # the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::FirewallPoliciesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a Firewall Policy resource.
      class FirewallPolicy
        include Google::Apis::Core::Hashable
      
        # A list of associations that belong to this firewall policy.
        # Corresponds to the JSON property `associations`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicyAssociation>]
        attr_accessor :associations
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Deprecated, please use short name instead. User-provided name of the
        # Organization firewall policy. The name should be unique in the organization
        # in which the firewall policy is created.
        # This field is not applicable to network firewall policies.
        # This name must be set on creation and cannot be changed.
        # The name must be 1-63 characters long, and comply
        # with RFC1035. Specifically, the name must be 1-63 characters
        # long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which
        # means the first character must be a lowercase letter, and all following
        # characters must be a dash, lowercase letter, or digit, except the last
        # character, which cannot be a dash.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Specifies a fingerprint for this resource, which is essentially a hash of
        # the metadata's contents and used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update metadata. You must always provide an
        # up-to-date fingerprint hash in order to update or change metadata,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make get() request to the
        # firewall policy.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output only] Type of the resource. Alwayscompute#
        # firewallPolicyfor firewall policies
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. For Organization Firewall Policies it's a
        # [Output Only] numeric ID allocated by Google Cloud which uniquely
        # identifies the Organization Firewall Policy.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A list of packet mirroring rules that belong to this policy.
        # Corresponds to the JSON property `packetMirroringRules`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicyRule>]
        attr_accessor :packet_mirroring_rules
      
        # Output only. [Output Only] The parent of the firewall policy.
        # This field is not applicable to network firewall policies.
        # Corresponds to the JSON property `parent`
        # @return [String]
        attr_accessor :parent
      
        # The type of the firewall policy. This field can be eitherVPC_POLICY or
        # RDMA_ROCE_POLICY.
        # Note: if not specified then VPC_POLICY will be used.
        # Corresponds to the JSON property `policyType`
        # @return [String]
        attr_accessor :policy_type
      
        # Output only. [Output Only] URL of the region where the regional firewall
        # policy resides.
        # This field is not applicable to global firewall policies.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] Total count of all firewall policy rule tuples. A
        # firewall
        # policy can not exceed a set number of tuples.
        # Corresponds to the JSON property `ruleTupleCount`
        # @return [Fixnum]
        attr_accessor :rule_tuple_count
      
        # A list of rules that belong to this policy.
        # There must always be a default rule (rule with priority 2147483647 and
        # match "*"). If no rules are provided when creating a firewall policy, a
        # default rule with action "allow" will be added.
        # Corresponds to the JSON property `rules`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicyRule>]
        attr_accessor :rules
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource with the
        # resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # User-provided name of the Organization firewall policy. The name should be
        # unique in the organization in which the firewall policy is created.
        # This field is not applicable to network firewall policies.
        # This name must be set on creation and cannot be changed. The name must be
        # 1-63 characters long, and comply with RFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `shortName`
        # @return [String]
        attr_accessor :short_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @associations = args[:associations] if args.key?(:associations)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @display_name = args[:display_name] if args.key?(:display_name)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @packet_mirroring_rules = args[:packet_mirroring_rules] if args.key?(:packet_mirroring_rules)
          @parent = args[:parent] if args.key?(:parent)
          @policy_type = args[:policy_type] if args.key?(:policy_type)
          @region = args[:region] if args.key?(:region)
          @rule_tuple_count = args[:rule_tuple_count] if args.key?(:rule_tuple_count)
          @rules = args[:rules] if args.key?(:rules)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @short_name = args[:short_name] if args.key?(:short_name)
        end
      end
      
      # 
      class FirewallPolicyAssociation
        include Google::Apis::Core::Hashable
      
        # The target that the firewall policy is attached to.
        # Corresponds to the JSON property `attachmentTarget`
        # @return [String]
        attr_accessor :attachment_target
      
        # [Output Only] Deprecated, please use short name instead. The display name
        # of the firewall policy of the association.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. [Output Only] The firewall policy ID of the association.
        # Corresponds to the JSON property `firewallPolicyId`
        # @return [String]
        attr_accessor :firewall_policy_id
      
        # The name for an association.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The short name of the firewall policy of the
        # association.
        # Corresponds to the JSON property `shortName`
        # @return [String]
        attr_accessor :short_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @attachment_target = args[:attachment_target] if args.key?(:attachment_target)
          @display_name = args[:display_name] if args.key?(:display_name)
          @firewall_policy_id = args[:firewall_policy_id] if args.key?(:firewall_policy_id)
          @name = args[:name] if args.key?(:name)
          @short_name = args[:short_name] if args.key?(:short_name)
        end
      end
      
      # 
      class FirewallPolicyList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of FirewallPolicy resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicy>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#firewallPolicyList
        # for listsof FirewallPolicies
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::FirewallPolicyList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::FirewallPolicyList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a rule that describes one or more match conditions along with
      # the action to be taken when traffic matches this condition (allow or deny).
      class FirewallPolicyRule
        include Google::Apis::Core::Hashable
      
        # The Action to perform when the client connection triggers the rule.
        # Valid actions for firewall rules are: "allow", "deny",
        # "apply_security_profile_group" and "goto_next".
        # Valid actions for packet mirroring rules are: "mirror", "do_not_mirror"
        # and "goto_next".
        # Corresponds to the JSON property `action`
        # @return [String]
        attr_accessor :action
      
        # An optional description for this resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # The direction in which this rule applies.
        # Corresponds to the JSON property `direction`
        # @return [String]
        attr_accessor :direction
      
        # Denotes whether the firewall policy rule is disabled. When set to true,
        # the firewall policy rule is not enforced and traffic behaves as if it did
        # not exist. If this is unspecified, the firewall policy rule will be
        # enabled.
        # Corresponds to the JSON property `disabled`
        # @return [Boolean]
        attr_accessor :disabled
        alias_method :disabled?, :disabled
      
        # Denotes whether to enable logging for a particular rule. If logging is
        # enabled, logs will be exported to the configured export destination in
        # Stackdriver. Logs may be exported to BigQuery or Pub/Sub. Note: you
        # cannot enable logging on "goto_next" rules.
        # Corresponds to the JSON property `enableLogging`
        # @return [Boolean]
        attr_accessor :enable_logging
        alias_method :enable_logging?, :enable_logging
      
        # Output only. [Output only] Type of the resource. Returnscompute#
        # firewallPolicyRule for firewall rules andcompute#packetMirroringRule for
        # packet mirroring rules.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Represents a match condition that incoming traffic is evaluated against.
        # Exactly one field must be specified.
        # Corresponds to the JSON property `match`
        # @return [Google::Apis::ComputeV1::FirewallPolicyRuleMatcher]
        attr_accessor :match
      
        # An integer indicating the priority of a rule in the list. The priority
        # must be a positive value between 0 and 2147483647.
        # Rules are evaluated from highest to lowest priority where 0 is the
        # highest priority and 2147483647 is the lowest priority.
        # Corresponds to the JSON property `priority`
        # @return [Fixnum]
        attr_accessor :priority
      
        # An optional name for the rule. This field is not a unique identifier
        # and can be updated.
        # Corresponds to the JSON property `ruleName`
        # @return [String]
        attr_accessor :rule_name
      
        # Output only. [Output Only] Calculation of the complexity of a single firewall
        # policy
        # rule.
        # Corresponds to the JSON property `ruleTupleCount`
        # @return [Fixnum]
        attr_accessor :rule_tuple_count
      
        # A fully-qualified URL of a SecurityProfile resource instance.
        # Example:
        # https://networksecurity.googleapis.com/v1/projects/`project`/locations/`
        # location`/securityProfileGroups/my-security-profile-group
        # Must be specified if action is one of 'apply_security_profile_group' or
        # 'mirror'. Cannot be specified for other actions.
        # Corresponds to the JSON property `securityProfileGroup`
        # @return [String]
        attr_accessor :security_profile_group
      
        # A list of network resource URLs to which this rule applies.  This field
        # allows you to control which network's VMs get this rule.  If this field
        # is left blank, all VMs within the organization will receive the rule.
        # Corresponds to the JSON property `targetResources`
        # @return [Array<String>]
        attr_accessor :target_resources
      
        # A list of secure tags that controls which instances the firewall rule
        # applies to. If targetSecureTag are specified, then the
        # firewall rule applies only to instances in the VPC network that have one
        # of those EFFECTIVE secure tags, if all the target_secure_tag are in
        # INEFFECTIVE state, then this rule will be ignored.targetSecureTag may not be
        # set at the same time astargetServiceAccounts.
        # If neither targetServiceAccounts nortargetSecureTag are specified, the
        # firewall rule applies
        # to all instances on the specified network.
        # Maximum number of target label tags allowed is 256.
        # Corresponds to the JSON property `targetSecureTags`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicyRuleSecureTag>]
        attr_accessor :target_secure_tags
      
        # A list of service accounts indicating the sets of instances that are
        # applied with this rule.
        # Corresponds to the JSON property `targetServiceAccounts`
        # @return [Array<String>]
        attr_accessor :target_service_accounts
      
        # Boolean flag indicating if the traffic should be TLS decrypted.
        # Can be set only if action = 'apply_security_profile_group' and cannot
        # be set for other actions.
        # Corresponds to the JSON property `tlsInspect`
        # @return [Boolean]
        attr_accessor :tls_inspect
        alias_method :tls_inspect?, :tls_inspect
      
        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)
          @direction = args[:direction] if args.key?(:direction)
          @disabled = args[:disabled] if args.key?(:disabled)
          @enable_logging = args[:enable_logging] if args.key?(:enable_logging)
          @kind = args[:kind] if args.key?(:kind)
          @match = args[:match] if args.key?(:match)
          @priority = args[:priority] if args.key?(:priority)
          @rule_name = args[:rule_name] if args.key?(:rule_name)
          @rule_tuple_count = args[:rule_tuple_count] if args.key?(:rule_tuple_count)
          @security_profile_group = args[:security_profile_group] if args.key?(:security_profile_group)
          @target_resources = args[:target_resources] if args.key?(:target_resources)
          @target_secure_tags = args[:target_secure_tags] if args.key?(:target_secure_tags)
          @target_service_accounts = args[:target_service_accounts] if args.key?(:target_service_accounts)
          @tls_inspect = args[:tls_inspect] if args.key?(:tls_inspect)
        end
      end
      
      # Represents a match condition that incoming traffic is evaluated against.
      # Exactly one field must be specified.
      class FirewallPolicyRuleMatcher
        include Google::Apis::Core::Hashable
      
        # Address groups which should be matched against the traffic destination.
        # Maximum number of destination address groups is 10.
        # Corresponds to the JSON property `destAddressGroups`
        # @return [Array<String>]
        attr_accessor :dest_address_groups
      
        # Fully Qualified Domain Name (FQDN) which should be matched against
        # traffic destination.
        # Maximum number of destination fqdn allowed is 100.
        # Corresponds to the JSON property `destFqdns`
        # @return [Array<String>]
        attr_accessor :dest_fqdns
      
        # CIDR IP address range.
        # Maximum number of destination CIDR IP ranges allowed is 5000.
        # Corresponds to the JSON property `destIpRanges`
        # @return [Array<String>]
        attr_accessor :dest_ip_ranges
      
        # Network context of the traffic destination. Allowed values are:
        # 
        # 
        # - UNSPECIFIED
        # - INTERNET
        # - NON_INTERNET
        # Corresponds to the JSON property `destNetworkContext`
        # @return [String]
        attr_accessor :dest_network_context
      
        # Network type of the traffic destination. Allowed values are:
        # 
        # 
        # - UNSPECIFIED
        # - INTERNET
        # - NON_INTERNET
        # Corresponds to the JSON property `destNetworkType`
        # @return [String]
        attr_accessor :dest_network_type
      
        # Region codes whose IP addresses will be used to match for destination
        # of traffic. Should be specified as 2 letter country code defined as per
        # ISO 3166 alpha-2 country codes. ex."US"
        # Maximum number of dest region codes allowed is 5000.
        # Corresponds to the JSON property `destRegionCodes`
        # @return [Array<String>]
        attr_accessor :dest_region_codes
      
        # Names of Network Threat Intelligence lists.
        # The IPs in these lists will be matched against traffic destination.
        # Corresponds to the JSON property `destThreatIntelligences`
        # @return [Array<String>]
        attr_accessor :dest_threat_intelligences
      
        # Pairs of IP protocols and ports that the rule should match.
        # Corresponds to the JSON property `layer4Configs`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicyRuleMatcherLayer4Config>]
        attr_accessor :layer4_configs
      
        # Address groups which should be matched against the traffic source.
        # Maximum number of source address groups is 10.
        # Corresponds to the JSON property `srcAddressGroups`
        # @return [Array<String>]
        attr_accessor :src_address_groups
      
        # Fully Qualified Domain Name (FQDN) which should be matched against
        # traffic source.
        # Maximum number of source fqdn allowed is 100.
        # Corresponds to the JSON property `srcFqdns`
        # @return [Array<String>]
        attr_accessor :src_fqdns
      
        # CIDR IP address range.
        # Maximum number of source CIDR IP ranges allowed is 5000.
        # Corresponds to the JSON property `srcIpRanges`
        # @return [Array<String>]
        attr_accessor :src_ip_ranges
      
        # Network context of the traffic source. Allowed values are:
        # 
        # 
        # - UNSPECIFIED
        # - INTERNET
        # - INTRA_VPC
        # - NON_INTERNET
        # - VPC_NETWORKS
        # Corresponds to the JSON property `srcNetworkContext`
        # @return [String]
        attr_accessor :src_network_context
      
        # Network type of the traffic source. Allowed values are:
        # 
        # 
        # - UNSPECIFIED
        # - INTERNET
        # - INTRA_VPC
        # - NON_INTERNET
        # - VPC_NETWORKS
        # Corresponds to the JSON property `srcNetworkType`
        # @return [String]
        attr_accessor :src_network_type
      
        # Networks of the traffic source. It can be either a full or partial url.
        # Corresponds to the JSON property `srcNetworks`
        # @return [Array<String>]
        attr_accessor :src_networks
      
        # Region codes whose IP addresses will be used to match for source
        # of traffic. Should be specified as 2 letter country code defined as per
        # ISO 3166 alpha-2 country codes. ex."US"
        # Maximum number of source region codes allowed is 5000.
        # Corresponds to the JSON property `srcRegionCodes`
        # @return [Array<String>]
        attr_accessor :src_region_codes
      
        # List of secure tag values, which should be matched at the source
        # of the traffic.
        # For INGRESS rule, if all the srcSecureTag are INEFFECTIVE,
        # and there is no srcIpRange, this rule will be ignored.
        # Maximum number of source tag values allowed is 256.
        # Corresponds to the JSON property `srcSecureTags`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicyRuleSecureTag>]
        attr_accessor :src_secure_tags
      
        # Names of Network Threat Intelligence lists.
        # The IPs in these lists will be matched against traffic source.
        # Corresponds to the JSON property `srcThreatIntelligences`
        # @return [Array<String>]
        attr_accessor :src_threat_intelligences
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @dest_address_groups = args[:dest_address_groups] if args.key?(:dest_address_groups)
          @dest_fqdns = args[:dest_fqdns] if args.key?(:dest_fqdns)
          @dest_ip_ranges = args[:dest_ip_ranges] if args.key?(:dest_ip_ranges)
          @dest_network_context = args[:dest_network_context] if args.key?(:dest_network_context)
          @dest_network_type = args[:dest_network_type] if args.key?(:dest_network_type)
          @dest_region_codes = args[:dest_region_codes] if args.key?(:dest_region_codes)
          @dest_threat_intelligences = args[:dest_threat_intelligences] if args.key?(:dest_threat_intelligences)
          @layer4_configs = args[:layer4_configs] if args.key?(:layer4_configs)
          @src_address_groups = args[:src_address_groups] if args.key?(:src_address_groups)
          @src_fqdns = args[:src_fqdns] if args.key?(:src_fqdns)
          @src_ip_ranges = args[:src_ip_ranges] if args.key?(:src_ip_ranges)
          @src_network_context = args[:src_network_context] if args.key?(:src_network_context)
          @src_network_type = args[:src_network_type] if args.key?(:src_network_type)
          @src_networks = args[:src_networks] if args.key?(:src_networks)
          @src_region_codes = args[:src_region_codes] if args.key?(:src_region_codes)
          @src_secure_tags = args[:src_secure_tags] if args.key?(:src_secure_tags)
          @src_threat_intelligences = args[:src_threat_intelligences] if args.key?(:src_threat_intelligences)
        end
      end
      
      # 
      class FirewallPolicyRuleMatcherLayer4Config
        include Google::Apis::Core::Hashable
      
        # The IP protocol to which this rule applies. The protocol type is
        # required when creating a firewall rule. This value can either be
        # one of the following well known protocol strings (tcp,udp, icmp, esp,ah, ipip,
        # sctp), or the IP
        # protocol number.
        # Corresponds to the JSON property `ipProtocol`
        # @return [String]
        attr_accessor :ip_protocol
      
        # An optional list of ports to which this rule applies. This field is
        # only applicable for UDP or TCP protocol. Each entry must be either
        # an integer or a range. If not specified, this rule applies to
        # connections through any port.
        # Example inputs include: ["22"],["80","443"], and ["12345-12349"].
        # Corresponds to the JSON property `ports`
        # @return [Array<String>]
        attr_accessor :ports
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ip_protocol = args[:ip_protocol] if args.key?(:ip_protocol)
          @ports = args[:ports] if args.key?(:ports)
        end
      end
      
      # 
      class FirewallPolicyRuleSecureTag
        include Google::Apis::Core::Hashable
      
        # Name of the secure tag, created with TagManager's TagValue API.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] State of the secure tag, either `EFFECTIVE` or
        # `INEFFECTIVE`. A secure tag is `INEFFECTIVE` when it is deleted
        # or its network is deleted.
        # 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)
          @name = args[:name] if args.key?(:name)
          @state = args[:state] if args.key?(:state)
        end
      end
      
      # Encapsulates numeric value that can be either absolute or relative.
      class FixedOrPercent
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Absolute value of VM instances calculated based on
        # the
        # specific mode.
        # 
        # 
        # - If the value is fixed, then the calculated
        # value is equal to the fixed value.
        # - If the value is a percent, then the
        # calculated
        # value is percent/100 * targetSize. For example,
        # the calculated value of a 80% of a managed instance group
        # with 150 instances would be (80/100 * 150) = 120 VM instances. If there
        # is a remainder, the number is rounded.
        # Corresponds to the JSON property `calculated`
        # @return [Fixnum]
        attr_accessor :calculated
      
        # Specifies a fixed number of VM instances. This must be a positive integer.
        # Corresponds to the JSON property `fixed`
        # @return [Fixnum]
        attr_accessor :fixed
      
        # Specifies a percentage of instances between 0 to 100%, inclusive. For
        # example, specify 80 for 80%.
        # Corresponds to the JSON property `percent`
        # @return [Fixnum]
        attr_accessor :percent
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @calculated = args[:calculated] if args.key?(:calculated)
          @fixed = args[:fixed] if args.key?(:fixed)
          @percent = args[:percent] if args.key?(:percent)
        end
      end
      
      # Specifies a flexible time range with flexible start time and duration.
      # It is possible to specify a contradictory time range that cannot be matched
      # by any Interval. This causes a validation error.
      class FlexibleTimeRange
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `maxDuration`
        # @return [String]
        attr_accessor :max_duration
      
        # 
        # Corresponds to the JSON property `minDuration`
        # @return [String]
        attr_accessor :min_duration
      
        # 
        # Corresponds to the JSON property `startTimeNotEarlierThan`
        # @return [String]
        attr_accessor :start_time_not_earlier_than
      
        # 
        # Corresponds to the JSON property `startTimeNotLaterThan`
        # @return [String]
        attr_accessor :start_time_not_later_than
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max_duration = args[:max_duration] if args.key?(:max_duration)
          @min_duration = args[:min_duration] if args.key?(:min_duration)
          @start_time_not_earlier_than = args[:start_time_not_earlier_than] if args.key?(:start_time_not_earlier_than)
          @start_time_not_later_than = args[:start_time_not_later_than] if args.key?(:start_time_not_later_than)
        end
      end
      
      # Represents a Forwarding Rule resource.
      # Forwarding rule resources in Google Cloud can be either regional or global in
      # scope:
      # * [Global](https://cloud.google.com/compute/docs/reference/rest/v1/
      # globalForwardingRules)
      # * [Regional](https://cloud.google.com/compute/docs/reference/rest/v1/
      # forwardingRules)
      # A forwarding rule and its corresponding IP address represent the frontend
      # configuration of a Google Cloud load balancer.
      # Forwarding rules can also reference target instances and Cloud VPN Classic
      # gateways (targetVpnGateway).
      # For more information, read
      # Forwarding rule concepts and
      # Using protocol forwarding.
      class ForwardingRule
        include Google::Apis::Core::Hashable
      
        # IP address for which this forwarding rule accepts traffic. When a client
        # sends traffic to this IP address, the forwarding rule directs the traffic
        # to the referenced target or backendService.
        # While creating a forwarding rule, specifying an IPAddress is
        # required under the following circumstances:
        # 
        # - When the target is set to targetGrpcProxy andvalidateForProxyless is set
        # to true, theIPAddress should be set to 0.0.0.0.
        # - When the target is a Private Service Connect Google APIs
        # bundle, you must specify an IPAddress.
        # Otherwise, you can optionally specify an IP address that references an
        # existing static (reserved) IP address resource. When omitted, Google Cloud
        # assigns an ephemeral IP address.
        # Use one of the following formats to specify an IP address while creating a
        # forwarding rule:
        # * IP address number, as in `100.1.2.3`
        # * IPv6 address range, as in `2600:1234::/96`
        # * Full resource URL, as inhttps://www.googleapis.com/compute/v1/projects/
        # project_id/regions/region/addresses/address-name
        # * Partial URL or by name, as in:
        # 
        # - projects/project_id/regions/region/addresses/address-name
        # - regions/region/addresses/address-name
        # - global/addresses/address-name
        # - address-name
        # The forwarding rule's target or backendService,
        # and in most cases, also the loadBalancingScheme, determine the
        # type of IP address that you can use. For detailed information, see
        # [IP address
        # specifications](https://cloud.google.com/load-balancing/docs/forwarding-rule-
        # concepts#ip_address_specifications).
        # When reading an IPAddress, the API always returns the IP
        # address number.
        # Corresponds to the JSON property `IPAddress`
        # @return [String]
        attr_accessor :ip_address
      
        # The IP protocol to which this rule applies.
        # For protocol forwarding, valid
        # options are TCP, UDP, ESP,AH, SCTP, ICMP andL3_DEFAULT.
        # The valid IP protocols are different for different load balancing products
        # as described in [Load balancing
        # features](https://cloud.google.com/load-balancing/docs/features#
        # protocols_from_the_load_balancer_to_the_backends).
        # Corresponds to the JSON property `IPProtocol`
        # @return [String]
        attr_accessor :ip_protocol
      
        # The ports, portRange, and allPorts
        # fields are mutually exclusive. Only packets addressed to ports in the
        # specified range will be forwarded to the backends configured with this
        # forwarding rule.
        # The allPorts field has the following limitations:
        # 
        # - It requires that the forwarding rule IPProtocol be TCP,
        # UDP, SCTP, or L3_DEFAULT.
        # - It's applicable only to the following products: internal passthrough
        # Network Load Balancers, backend service-based external passthrough Network
        # Load Balancers, and internal and external protocol forwarding.
        # - Set this field to true to allow packets addressed to any port or
        # packets lacking destination port information (for example, UDP fragments
        # after the first fragment) to be forwarded to the backends configured with
        # this forwarding rule. The L3_DEFAULT protocol requiresallPorts be set to
        # true.
        # Corresponds to the JSON property `allPorts`
        # @return [Boolean]
        attr_accessor :all_ports
        alias_method :all_ports?, :all_ports
      
        # If set to true, clients can access the internal passthrough Network Load
        # Balancers, the regional internal Application Load Balancer, and the
        # regional internal proxy Network Load Balancer from all regions.
        # If false, only allows access from the local region the load balancer is
        # located at. Note that for INTERNAL_MANAGED forwarding rules, this field
        # cannot be changed after the forwarding rule is created.
        # Corresponds to the JSON property `allowGlobalAccess`
        # @return [Boolean]
        attr_accessor :allow_global_access
        alias_method :allow_global_access?, :allow_global_access
      
        # This is used in PSC consumer ForwardingRule to control whether the PSC
        # endpoint can be accessed from another region.
        # Corresponds to the JSON property `allowPscGlobalAccess`
        # @return [Boolean]
        attr_accessor :allow_psc_global_access
        alias_method :allow_psc_global_access?, :allow_psc_global_access
      
        # Identifies the backend service to which the forwarding rule sends traffic.
        # Required for internal and external passthrough Network Load Balancers;
        # must be omitted for all other load balancer types.
        # Corresponds to the JSON property `backendService`
        # @return [String]
        attr_accessor :backend_service
      
        # Output only. [Output Only] The URL for the corresponding base forwarding rule.
        # By base
        # forwarding rule, we mean the forwarding rule that has the same IP address,
        # protocol, and port settings with the current forwarding rule, but without
        # sourceIPRanges specified.
        # Always empty if the current forwarding rule does not have sourceIPRanges
        # specified.
        # Corresponds to the JSON property `baseForwardingRule`
        # @return [String]
        attr_accessor :base_forwarding_rule
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Specifies the canary migration state for the backend buckets attached to
        # this forwarding rule. Possible values are PREPARE, TEST_BY_PERCENTAGE, and
        # TEST_ALL_TRAFFIC.
        # To begin the migration from EXTERNAL to EXTERNAL_MANAGED, the state must be
        # changed to PREPARE. The state must be changed to TEST_ALL_TRAFFIC before
        # the loadBalancingScheme can be changed to EXTERNAL_MANAGED. Optionally, the
        # TEST_BY_PERCENTAGE state can be used to migrate traffic to backend buckets
        # attached to this forwarding rule by percentage using
        # externalManagedBackendBucketMigrationTestingPercentage.
        # Rolling back a migration requires the states to be set in reverse order. So
        # changing the scheme from EXTERNAL_MANAGED to EXTERNAL requires the state to
        # be set to TEST_ALL_TRAFFIC at the same time. Optionally, the
        # TEST_BY_PERCENTAGE state can be used to migrate some traffic back to
        # EXTERNAL or PREPARE can be used to migrate all traffic back to EXTERNAL.
        # Corresponds to the JSON property `externalManagedBackendBucketMigrationState`
        # @return [String]
        attr_accessor :external_managed_backend_bucket_migration_state
      
        # Determines the fraction of requests to backend buckets that should be
        # processed by the global external Application Load Balancer.
        # The value of this field must be in the range [0, 100].
        # This value can only be set if the loadBalancingScheme in the BackendService
        # is set to EXTERNAL (when using the classic Application Load Balancer) and
        # the migration state is TEST_BY_PERCENTAGE.
        # Corresponds to the JSON property `externalManagedBackendBucketMigrationTestingPercentage`
        # @return [Float]
        attr_accessor :external_managed_backend_bucket_migration_testing_percentage
      
        # Fingerprint of this resource. A hash of the contents stored in this object.
        # This field is used in optimistic locking. This field will be ignored when
        # inserting a ForwardingRule. Include the fingerprint in patch request to
        # ensure that you do not overwrite changes that were applied from another
        # concurrent request.
        # To see the latest fingerprint, make a get() request to
        # retrieve a ForwardingRule.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Resource reference of a PublicDelegatedPrefix. The PDP must
        # be a sub-PDP in EXTERNAL_IPV6_FORWARDING_RULE_CREATION mode.
        # Use one of the following formats to specify a sub-PDP when creating an IPv6
        # NetLB forwarding rule using BYOIP:
        # Full resource URL, as inhttps://www.googleapis.com/compute/v1/projects/
        # project_id/regions/region/publicDelegatedPrefixes/sub-pdp-name
        # Partial URL, as in:
        # 
        # - projects/project_id/regions/region/publicDelegatedPrefixes/sub-pdp-name
        # - regions/region/publicDelegatedPrefixes/sub-pdp-name
        # Corresponds to the JSON property `ipCollection`
        # @return [String]
        attr_accessor :ip_collection
      
        # The IP Version that will be used by this forwarding rule.  Valid options
        # are IPV4 or IPV6.
        # Corresponds to the JSON property `ipVersion`
        # @return [String]
        attr_accessor :ip_version
      
        # Indicates whether or not this load balancer can be used as a collector for
        # packet mirroring. To prevent mirroring loops, instances behind this
        # load balancer will not have their traffic mirrored even if aPacketMirroring
        # rule applies to them.
        # This can only be set to true for load balancers that have
        # theirloadBalancingScheme set to INTERNAL.
        # Corresponds to the JSON property `isMirroringCollector`
        # @return [Boolean]
        attr_accessor :is_mirroring_collector
        alias_method :is_mirroring_collector?, :is_mirroring_collector
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#forwardingRule
        # for forwarding rule resources.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this resource, which is
        # essentially a hash of the labels set used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a ForwardingRule.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels for this resource. These can only be added or modified by thesetLabels
        # method. Each label key/value pair must comply withRFC1035.
        # Label values may be empty.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Specifies the forwarding rule type.
        # For more information about forwarding rules, refer to
        # Forwarding rule concepts.
        # Corresponds to the JSON property `loadBalancingScheme`
        # @return [String]
        attr_accessor :load_balancing_scheme
      
        # Opaque filter criteria used by load balancer to restrict routing
        # configuration to a limited set of xDS
        # compliant clients. In their xDS requests to load balancer, xDS clients
        # present node
        # metadata. When there is a match, the relevant configuration
        # is made available to those proxies. Otherwise, all the resources (e.g.
        # TargetHttpProxy, UrlMap)
        # referenced by the ForwardingRule are not visible to
        # those proxies.
        # For each metadataFilter in this list, if itsfilterMatchCriteria is set to
        # MATCH_ANY, at least one of thefilterLabels must match the corresponding label
        # provided in
        # the metadata. If its filterMatchCriteria is set to
        # MATCH_ALL, then all of its filterLabels must match with
        # corresponding labels provided in the metadata. If multiplemetadataFilters are
        # specified, all of them need to be satisfied
        # in order to be considered a match.
        # metadataFilters specified here will be applifed before
        # those specified in the UrlMap that thisForwardingRule references.
        # metadataFilters only applies to Loadbalancers that have
        # their loadBalancingScheme set toINTERNAL_SELF_MANAGED.
        # Corresponds to the JSON property `metadataFilters`
        # @return [Array<Google::Apis::ComputeV1::MetadataFilter>]
        attr_accessor :metadata_filters
      
        # Name of the resource; provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # For Private Service Connect forwarding rules that forward traffic to Google
        # APIs, the forwarding rule name must be a 1-20 characters string with
        # lowercase letters and numbers and must start with a letter.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # This field is not used for global external load balancing.
        # For internal passthrough Network Load Balancers, this field identifies the
        # network that the load balanced IP should belong to for this forwarding
        # rule.
        # If the subnetwork is specified, the network of the subnetwork will be used.
        # If neither subnetwork nor this field is specified, the default network will
        # be used.
        # For Private Service Connect forwarding rules that forward traffic to Google
        # APIs, a network must be provided.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # This signifies the networking tier used for configuring
        # this load balancer and can only take the following values:PREMIUM, STANDARD.
        # For regional ForwardingRule, the valid values are PREMIUM andSTANDARD. For
        # GlobalForwardingRule, the valid value isPREMIUM.
        # If this field is not specified, it is assumed to be PREMIUM.
        # If IPAddress is specified, this value must be equal to the
        # networkTier of the Address.
        # Corresponds to the JSON property `networkTier`
        # @return [String]
        attr_accessor :network_tier
      
        # This is used in PSC consumer ForwardingRule to control whether it should
        # try to auto-generate a DNS zone or not. Non-PSC forwarding rules do not use
        # this field. Once set, this field is not mutable.
        # Corresponds to the JSON property `noAutomateDnsZone`
        # @return [Boolean]
        attr_accessor :no_automate_dns_zone
        alias_method :no_automate_dns_zone?, :no_automate_dns_zone
      
        # The ports, portRange, and allPorts
        # fields are mutually exclusive. Only packets addressed to ports in the
        # specified range will be forwarded to the backends configured with this
        # forwarding rule.
        # The portRange field has the following limitations:
        # 
        # - It requires that the forwarding rule IPProtocol be TCP,
        # UDP, or SCTP, and
        # - It's applicable only to the following products: external passthrough
        # Network Load Balancers, internal and external proxy Network Load Balancers,
        # internal and external Application Load Balancers, external protocol
        # forwarding, and Classic VPN.
        # - Some products have restrictions on what ports can be used. See
        # port specifications for details.
        # For external forwarding rules, two or more forwarding rules cannot use the
        # same [IPAddress, IPProtocol] pair, and cannot have overlappingportRanges.
        # For internal forwarding rules within the same VPC network, two or more
        # forwarding rules cannot use the same [IPAddress, IPProtocol]
        # pair, and cannot have overlapping portRanges.
        # @pattern: \\d+(?:-\\d+)?
        # Corresponds to the JSON property `portRange`
        # @return [String]
        attr_accessor :port_range
      
        # The ports, portRange, and allPorts
        # fields are mutually exclusive. Only packets addressed to ports in the
        # specified range will be forwarded to the backends configured with this
        # forwarding rule.
        # The ports field has the following limitations:
        # 
        # - It requires that the forwarding rule IPProtocol be TCP,
        # UDP, or SCTP, and
        # - It's applicable only to the following products: internal passthrough
        # Network Load Balancers, backend service-based external passthrough Network
        # Load Balancers, and internal protocol forwarding.
        # - You can specify a list of up to five ports by number, separated by
        # commas. The ports can be contiguous or discontiguous.
        # For external forwarding rules, two or more forwarding rules cannot use the
        # same [IPAddress, IPProtocol] pair if they share at least one
        # port number.
        # For internal forwarding rules within the same VPC network, two or more
        # forwarding rules cannot use the same [IPAddress, IPProtocol]
        # pair if they share at least one port number.
        # @pattern: \\d+(?:-\\d+)?
        # Corresponds to the JSON property `ports`
        # @return [Array<String>]
        attr_accessor :ports
      
        # [Output Only] The PSC connection id of the PSC forwarding rule.
        # Corresponds to the JSON property `pscConnectionId`
        # @return [Fixnum]
        attr_accessor :psc_connection_id
      
        # 
        # Corresponds to the JSON property `pscConnectionStatus`
        # @return [String]
        attr_accessor :psc_connection_status
      
        # Output only. [Output Only] URL of the region where the regional forwarding
        # rule resides.
        # This field is not applicable to global forwarding rules.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource with the
        # resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # Service Directory resources to register this forwarding rule with.
        # Currently, only supports a single Service Directory resource.
        # Corresponds to the JSON property `serviceDirectoryRegistrations`
        # @return [Array<Google::Apis::ComputeV1::ForwardingRuleServiceDirectoryRegistration>]
        attr_accessor :service_directory_registrations
      
        # An optional prefix to the service name for this forwarding rule.
        # If specified, the prefix is the first label of the fully qualified service
        # name.
        # The label must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the label must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # This field is only used for internal load balancing.
        # Corresponds to the JSON property `serviceLabel`
        # @return [String]
        attr_accessor :service_label
      
        # [Output Only]
        # The internal fully qualified service name for this forwarding rule.
        # This field is only used for internal load balancing.
        # Corresponds to the JSON property `serviceName`
        # @return [String]
        attr_accessor :service_name
      
        # If not empty, this forwarding rule will only forward the traffic when the
        # source IP address matches one of the IP addresses or CIDR ranges set here.
        # Note that a forwarding rule can only have up to 64 source IP ranges, and
        # this field can only be used with a regional forwarding rule whose scheme
        # isEXTERNAL.
        # Each source_ip_range entry should be either an IP address (for
        # example, 1.2.3.4) or a CIDR range (for example, 1.2.3.0/24).
        # Corresponds to the JSON property `sourceIpRanges`
        # @return [Array<String>]
        attr_accessor :source_ip_ranges
      
        # This field identifies the subnetwork that the load balanced IP should
        # belong to for this forwarding rule, used with internal load balancers and
        # external passthrough Network Load Balancers with IPv6.
        # If the network specified is in auto subnet mode, this field is optional.
        # However, a subnetwork must be specified if the network is in custom subnet
        # mode or when creating external forwarding rule with IPv6.
        # Corresponds to the JSON property `subnetwork`
        # @return [String]
        attr_accessor :subnetwork
      
        # The URL of the target resource to receive the matched traffic.  For
        # regional forwarding rules, this target must be in the same region as the
        # forwarding rule. For global forwarding rules, this target must be a global
        # load balancing resource.
        # The forwarded traffic must be of a type appropriate to the target object.
        # 
        # 
        # -  For load balancers, see the "Target" column in [Port specifications](
        # https://cloud.google.com/load-balancing/docs/forwarding-rule-concepts#
        # ip_address_specifications).
        # -  For Private Service Connect forwarding rules that forward traffic to
        # Google APIs, provide the name of a supported Google API bundle:
        # 
        # 
        # -  vpc-sc -  APIs that support VPC Service Controls.
        # -  all-apis - All supported Google APIs.
        # 
        # 
        # -  For Private Service Connect forwarding rules that forward traffic to
        # managed services, the target must be a service attachment. The target is not
        # mutable once set as a service attachment.
        # Corresponds to the JSON property `target`
        # @return [String]
        attr_accessor :target
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ip_address = args[:ip_address] if args.key?(:ip_address)
          @ip_protocol = args[:ip_protocol] if args.key?(:ip_protocol)
          @all_ports = args[:all_ports] if args.key?(:all_ports)
          @allow_global_access = args[:allow_global_access] if args.key?(:allow_global_access)
          @allow_psc_global_access = args[:allow_psc_global_access] if args.key?(:allow_psc_global_access)
          @backend_service = args[:backend_service] if args.key?(:backend_service)
          @base_forwarding_rule = args[:base_forwarding_rule] if args.key?(:base_forwarding_rule)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @external_managed_backend_bucket_migration_state = args[:external_managed_backend_bucket_migration_state] if args.key?(:external_managed_backend_bucket_migration_state)
          @external_managed_backend_bucket_migration_testing_percentage = args[:external_managed_backend_bucket_migration_testing_percentage] if args.key?(:external_managed_backend_bucket_migration_testing_percentage)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @id = args[:id] if args.key?(:id)
          @ip_collection = args[:ip_collection] if args.key?(:ip_collection)
          @ip_version = args[:ip_version] if args.key?(:ip_version)
          @is_mirroring_collector = args[:is_mirroring_collector] if args.key?(:is_mirroring_collector)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @load_balancing_scheme = args[:load_balancing_scheme] if args.key?(:load_balancing_scheme)
          @metadata_filters = args[:metadata_filters] if args.key?(:metadata_filters)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @network_tier = args[:network_tier] if args.key?(:network_tier)
          @no_automate_dns_zone = args[:no_automate_dns_zone] if args.key?(:no_automate_dns_zone)
          @port_range = args[:port_range] if args.key?(:port_range)
          @ports = args[:ports] if args.key?(:ports)
          @psc_connection_id = args[:psc_connection_id] if args.key?(:psc_connection_id)
          @psc_connection_status = args[:psc_connection_status] if args.key?(:psc_connection_status)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @service_directory_registrations = args[:service_directory_registrations] if args.key?(:service_directory_registrations)
          @service_label = args[:service_label] if args.key?(:service_label)
          @service_name = args[:service_name] if args.key?(:service_name)
          @source_ip_ranges = args[:source_ip_ranges] if args.key?(:source_ip_ranges)
          @subnetwork = args[:subnetwork] if args.key?(:subnetwork)
          @target = args[:target] if args.key?(:target)
        end
      end
      
      # 
      class ForwardingRuleAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of ForwardingRulesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::ForwardingRulesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # forwardingRuleAggregatedList for lists of forwarding rules.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ForwardingRuleAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ForwardingRuleAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of ForwardingRule resources.
      class ForwardingRuleList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of ForwardingRule resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::ForwardingRule>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ForwardingRuleList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ForwardingRuleList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class ForwardingRuleReference
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `forwardingRule`
        # @return [String]
        attr_accessor :forwarding_rule
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @forwarding_rule = args[:forwarding_rule] if args.key?(:forwarding_rule)
        end
      end
      
      # Describes the auto-registration of the forwarding rule to Service Directory.
      # The region and project of the Service Directory resource generated from
      # this registration will be the same as this forwarding rule.
      class ForwardingRuleServiceDirectoryRegistration
        include Google::Apis::Core::Hashable
      
        # Service Directory namespace to register the forwarding rule under.
        # Corresponds to the JSON property `namespace`
        # @return [String]
        attr_accessor :namespace
      
        # Service Directory service to register the forwarding rule under.
        # Corresponds to the JSON property `service`
        # @return [String]
        attr_accessor :service
      
        # [Optional] Service Directory region to register this global forwarding
        # rule under. Default to "us-central1". Only used for PSC for Google APIs.
        # All PSC for Google APIs forwarding rules on the same network should use
        # the same Service Directory region.
        # Corresponds to the JSON property `serviceDirectoryRegion`
        # @return [String]
        attr_accessor :service_directory_region
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @namespace = args[:namespace] if args.key?(:namespace)
          @service = args[:service] if args.key?(:service)
          @service_directory_region = args[:service_directory_region] if args.key?(:service_directory_region)
        end
      end
      
      # 
      class ForwardingRulesScopedList
        include Google::Apis::Core::Hashable
      
        # A list of forwarding rules contained in this scope.
        # Corresponds to the JSON property `forwardingRules`
        # @return [Array<Google::Apis::ComputeV1::ForwardingRule>]
        attr_accessor :forwarding_rules
      
        # Informational warning which replaces the list of forwarding rules when
        # the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ForwardingRulesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @forwarding_rules = args[:forwarding_rules] if args.key?(:forwarding_rules)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of forwarding rules when
        # the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ForwardingRulesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class FutureReservation
        include Google::Apis::Core::Hashable
      
        # This reservation type is specified by total resource amounts (e.g. total
        # count of CPUs) and can account for multiple instance SKUs. In other words,
        # one can create instances of varying shapes against this reservation.
        # Corresponds to the JSON property `aggregateReservation`
        # @return [Google::Apis::ComputeV1::AllocationAggregateReservation]
        attr_accessor :aggregate_reservation
      
        # Future timestamp when the FR auto-created reservations will be deleted by
        # Compute Engine. Format of this field must be a valid
        # href="https://www.ietf.org/rfc/rfc3339.txt">RFC3339 value.
        # Corresponds to the JSON property `autoCreatedReservationsDeleteTime`
        # @return [String]
        attr_accessor :auto_created_reservations_delete_time
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `autoCreatedReservationsDuration`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :auto_created_reservations_duration
      
        # Setting for enabling or disabling automatic deletion for auto-created
        # reservation. If set to true, auto-created reservations will be
        # deleted at Future Reservation's end time (default) or at user's defined
        # timestamp if any of the
        # [auto_created_reservations_delete_time, auto_created_reservations_duration]
        # values is specified.
        # For keeping auto-created reservation indefinitely, this value should be set
        # to false.
        # Corresponds to the JSON property `autoDeleteAutoCreatedReservations`
        # @return [Boolean]
        attr_accessor :auto_delete_auto_created_reservations
        alias_method :auto_delete_auto_created_reservations?, :auto_delete_auto_created_reservations
      
        # If not present, then FR will not deliver a new commitment or update an
        # existing commitment.
        # Corresponds to the JSON property `commitmentInfo`
        # @return [Google::Apis::ComputeV1::FutureReservationCommitmentInfo]
        attr_accessor :commitment_info
      
        # Output only. [Output Only] The creation timestamp for this future reservation
        # inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Type of the deployment requested as part of future reservation.
        # Corresponds to the JSON property `deploymentType`
        # @return [String]
        attr_accessor :deployment_type
      
        # An optional description of this resource. Provide this property when you
        # create the future reservation.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Indicates if this group of VMs have emergent maintenance enabled.
        # Corresponds to the JSON property `enableEmergentMaintenance`
        # @return [Boolean]
        attr_accessor :enable_emergent_maintenance
        alias_method :enable_emergent_maintenance?, :enable_emergent_maintenance
      
        # Output only. [Output Only] A unique identifier for this future reservation.
        # The server
        # defines this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # futureReservation for future reservations.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The name of the resource, provided by the client when initially creating
        # the resource. The resource name must be 1-63 characters long, and comply
        # withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Name prefix for the reservations to be created at the time of
        # delivery. The name prefix must comply with RFC1035.
        # Maximum allowed length for name prefix is 20. Automatically created
        # reservations name format will be -date-####.
        # Corresponds to the JSON property `namePrefix`
        # @return [String]
        attr_accessor :name_prefix
      
        # Planning state before being submitted for evaluation
        # Corresponds to the JSON property `planningStatus`
        # @return [String]
        attr_accessor :planning_status
      
        # The reservation mode which determines reservation-termination behavior and
        # expected pricing.
        # Corresponds to the JSON property `reservationMode`
        # @return [String]
        attr_accessor :reservation_mode
      
        # Name of reservations where the capacity is provisioned at the time of
        # delivery of  future reservations. If the reservation with the given name
        # does not exist already, it is created automatically at the time of Approval
        # with INACTIVE state till specified start-time. Either provide the
        # reservation_name or a name_prefix.
        # Corresponds to the JSON property `reservationName`
        # @return [String]
        attr_accessor :reservation_name
      
        # Maintenance information for this reservation
        # Corresponds to the JSON property `schedulingType`
        # @return [String]
        attr_accessor :scheduling_type
      
        # Output only. [Output Only] Server-defined fully-qualified URL for this
        # resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource with the
        # resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # The share setting for reservations and sole tenancy node groups.
        # Corresponds to the JSON property `shareSettings`
        # @return [Google::Apis::ComputeV1::ShareSettings]
        attr_accessor :share_settings
      
        # Indicates whether the auto-created reservation can be consumed by VMs with
        # affinity for "any" reservation. If the field is set, then only VMs that
        # target the reservation by name can consume from the delivered reservation.
        # Corresponds to the JSON property `specificReservationRequired`
        # @return [Boolean]
        attr_accessor :specific_reservation_required
        alias_method :specific_reservation_required?, :specific_reservation_required
      
        # Future Reservation configuration to indicate instance properties and
        # total count.
        # Corresponds to the JSON property `specificSkuProperties`
        # @return [Google::Apis::ComputeV1::FutureReservationSpecificSkuProperties]
        attr_accessor :specific_sku_properties
      
        # [Output only] Represents status related to the future reservation.
        # Corresponds to the JSON property `status`
        # @return [Google::Apis::ComputeV1::FutureReservationStatus]
        attr_accessor :status
      
        # Time window for this Future Reservation.
        # Corresponds to the JSON property `timeWindow`
        # @return [Google::Apis::ComputeV1::FutureReservationTimeWindow]
        attr_accessor :time_window
      
        # Output only. [Output Only] URL of the Zone where this future reservation
        # resides.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @aggregate_reservation = args[:aggregate_reservation] if args.key?(:aggregate_reservation)
          @auto_created_reservations_delete_time = args[:auto_created_reservations_delete_time] if args.key?(:auto_created_reservations_delete_time)
          @auto_created_reservations_duration = args[:auto_created_reservations_duration] if args.key?(:auto_created_reservations_duration)
          @auto_delete_auto_created_reservations = args[:auto_delete_auto_created_reservations] if args.key?(:auto_delete_auto_created_reservations)
          @commitment_info = args[:commitment_info] if args.key?(:commitment_info)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @deployment_type = args[:deployment_type] if args.key?(:deployment_type)
          @description = args[:description] if args.key?(:description)
          @enable_emergent_maintenance = args[:enable_emergent_maintenance] if args.key?(:enable_emergent_maintenance)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @name_prefix = args[:name_prefix] if args.key?(:name_prefix)
          @planning_status = args[:planning_status] if args.key?(:planning_status)
          @reservation_mode = args[:reservation_mode] if args.key?(:reservation_mode)
          @reservation_name = args[:reservation_name] if args.key?(:reservation_name)
          @scheduling_type = args[:scheduling_type] if args.key?(:scheduling_type)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @share_settings = args[:share_settings] if args.key?(:share_settings)
          @specific_reservation_required = args[:specific_reservation_required] if args.key?(:specific_reservation_required)
          @specific_sku_properties = args[:specific_sku_properties] if args.key?(:specific_sku_properties)
          @status = args[:status] if args.key?(:status)
          @time_window = args[:time_window] if args.key?(:time_window)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class FutureReservationCommitmentInfo
        include Google::Apis::Core::Hashable
      
        # name of the commitment where capacity is being delivered to.
        # Corresponds to the JSON property `commitmentName`
        # @return [String]
        attr_accessor :commitment_name
      
        # Indicates if a Commitment needs to be created as part of FR delivery. If
        # this field is not present, then no
        # commitment needs to be created.
        # Corresponds to the JSON property `commitmentPlan`
        # @return [String]
        attr_accessor :commitment_plan
      
        # Only applicable if FR is delivering to the same reservation. If set, all
        # parent commitments will be extended to match the end date of the plan for
        # this commitment.
        # Corresponds to the JSON property `previousCommitmentTerms`
        # @return [String]
        attr_accessor :previous_commitment_terms
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @commitment_name = args[:commitment_name] if args.key?(:commitment_name)
          @commitment_plan = args[:commitment_plan] if args.key?(:commitment_plan)
          @previous_commitment_terms = args[:previous_commitment_terms] if args.key?(:previous_commitment_terms)
        end
      end
      
      # 
      class FutureReservationSpecificSkuProperties
        include Google::Apis::Core::Hashable
      
        # Properties of the SKU instances being reserved.
        # Next ID: 9
        # Corresponds to the JSON property `instanceProperties`
        # @return [Google::Apis::ComputeV1::AllocationSpecificSkuAllocationReservedInstanceProperties]
        attr_accessor :instance_properties
      
        # The instance template that will be used to populate the
        # ReservedInstanceProperties of the future reservation
        # Corresponds to the JSON property `sourceInstanceTemplate`
        # @return [String]
        attr_accessor :source_instance_template
      
        # Total number of instances for which capacity assurance is requested at a
        # future time period.
        # Corresponds to the JSON property `totalCount`
        # @return [Fixnum]
        attr_accessor :total_count
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_properties = args[:instance_properties] if args.key?(:instance_properties)
          @source_instance_template = args[:source_instance_template] if args.key?(:source_instance_template)
          @total_count = args[:total_count] if args.key?(:total_count)
        end
      end
      
      # [Output only] Represents status related to the future reservation.
      class FutureReservationStatus
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The current status of the requested amendment.
        # Corresponds to the JSON property `amendmentStatus`
        # @return [String]
        attr_accessor :amendment_status
      
        # Output only. Fully qualified urls of the automatically created reservations at
        # start_time.
        # Corresponds to the JSON property `autoCreatedReservations`
        # @return [Array<String>]
        attr_accessor :auto_created_reservations
      
        # [Output Only] Represents the existing matching usage for the future
        # reservation.
        # Corresponds to the JSON property `existingMatchingUsageInfo`
        # @return [Google::Apis::ComputeV1::FutureReservationStatusExistingMatchingUsageInfo]
        attr_accessor :existing_matching_usage_info
      
        # Output only. This count indicates the fulfilled capacity so far. This is set
        # during
        # "PROVISIONING" state. This count also includes capacity delivered as part
        # of existing matching reservations.
        # Corresponds to the JSON property `fulfilledCount`
        # @return [Fixnum]
        attr_accessor :fulfilled_count
      
        # The state that the future reservation will be reverted to should the
        # amendment be declined.
        # Corresponds to the JSON property `lastKnownGoodState`
        # @return [Google::Apis::ComputeV1::FutureReservationStatusLastKnownGoodState]
        attr_accessor :last_known_good_state
      
        # Output only. Time when Future Reservation would become LOCKED, after which no
        # modifications to Future Reservation will be allowed. Applicable only
        # after the Future Reservation is in the APPROVED state. The lock_time is
        # an RFC3339 string. The procurement_status will transition to PROCURING
        # state at this time.
        # Corresponds to the JSON property `lockTime`
        # @return [String]
        attr_accessor :lock_time
      
        # Output only. Current state of this Future Reservation
        # Corresponds to the JSON property `procurementStatus`
        # @return [String]
        attr_accessor :procurement_status
      
        # Properties to be set for the Future Reservation.
        # Corresponds to the JSON property `specificSkuProperties`
        # @return [Google::Apis::ComputeV1::FutureReservationStatusSpecificSkuProperties]
        attr_accessor :specific_sku_properties
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @amendment_status = args[:amendment_status] if args.key?(:amendment_status)
          @auto_created_reservations = args[:auto_created_reservations] if args.key?(:auto_created_reservations)
          @existing_matching_usage_info = args[:existing_matching_usage_info] if args.key?(:existing_matching_usage_info)
          @fulfilled_count = args[:fulfilled_count] if args.key?(:fulfilled_count)
          @last_known_good_state = args[:last_known_good_state] if args.key?(:last_known_good_state)
          @lock_time = args[:lock_time] if args.key?(:lock_time)
          @procurement_status = args[:procurement_status] if args.key?(:procurement_status)
          @specific_sku_properties = args[:specific_sku_properties] if args.key?(:specific_sku_properties)
        end
      end
      
      # [Output Only] Represents the existing matching usage for the future
      # reservation.
      class FutureReservationStatusExistingMatchingUsageInfo
        include Google::Apis::Core::Hashable
      
        # Output only. Count to represent min(FR total_count,
        # matching_reserved_capacity+matching_unreserved_instances)
        # Corresponds to the JSON property `count`
        # @return [Fixnum]
        attr_accessor :count
      
        # Output only. Timestamp when the matching usage was calculated
        # Corresponds to the JSON property `timestamp`
        # @return [String]
        attr_accessor :timestamp
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @count = args[:count] if args.key?(:count)
          @timestamp = args[:timestamp] if args.key?(:timestamp)
        end
      end
      
      # The state that the future reservation will be reverted to should the
      # amendment be declined.
      class FutureReservationStatusLastKnownGoodState
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The description of the FutureReservation before an
        # amendment was requested.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] Represents the existing matching usage for the future
        # reservation.
        # Corresponds to the JSON property `existingMatchingUsageInfo`
        # @return [Google::Apis::ComputeV1::FutureReservationStatusExistingMatchingUsageInfo]
        attr_accessor :existing_matching_usage_info
      
        # The properties of the last known good state for the Future Reservation.
        # Corresponds to the JSON property `futureReservationSpecs`
        # @return [Google::Apis::ComputeV1::FutureReservationStatusLastKnownGoodStateFutureReservationSpecs]
        attr_accessor :future_reservation_specs
      
        # Output only. [Output Only] The lock time of the FutureReservation before an
        # amendment was requested.
        # Corresponds to the JSON property `lockTime`
        # @return [String]
        attr_accessor :lock_time
      
        # Output only. [Output Only] The name prefix of the Future Reservation before an
        # amendment was requested.
        # Corresponds to the JSON property `namePrefix`
        # @return [String]
        attr_accessor :name_prefix
      
        # Output only. [Output Only] The status of the last known good state for the
        # Future
        # Reservation.
        # Corresponds to the JSON property `procurementStatus`
        # @return [String]
        attr_accessor :procurement_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @description = args[:description] if args.key?(:description)
          @existing_matching_usage_info = args[:existing_matching_usage_info] if args.key?(:existing_matching_usage_info)
          @future_reservation_specs = args[:future_reservation_specs] if args.key?(:future_reservation_specs)
          @lock_time = args[:lock_time] if args.key?(:lock_time)
          @name_prefix = args[:name_prefix] if args.key?(:name_prefix)
          @procurement_status = args[:procurement_status] if args.key?(:procurement_status)
        end
      end
      
      # The properties of the last known good state for the Future Reservation.
      class FutureReservationStatusLastKnownGoodStateFutureReservationSpecs
        include Google::Apis::Core::Hashable
      
        # The share setting for reservations and sole tenancy node groups.
        # Corresponds to the JSON property `shareSettings`
        # @return [Google::Apis::ComputeV1::ShareSettings]
        attr_accessor :share_settings
      
        # Output only. [Output Only] The previous instance related properties of the
        # Future Reservation.
        # Corresponds to the JSON property `specificSkuProperties`
        # @return [Google::Apis::ComputeV1::FutureReservationSpecificSkuProperties]
        attr_accessor :specific_sku_properties
      
        # Output only. [Output Only] The previous time window of the Future Reservation.
        # Corresponds to the JSON property `timeWindow`
        # @return [Google::Apis::ComputeV1::FutureReservationTimeWindow]
        attr_accessor :time_window
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @share_settings = args[:share_settings] if args.key?(:share_settings)
          @specific_sku_properties = args[:specific_sku_properties] if args.key?(:specific_sku_properties)
          @time_window = args[:time_window] if args.key?(:time_window)
        end
      end
      
      # Properties to be set for the Future Reservation.
      class FutureReservationStatusSpecificSkuProperties
        include Google::Apis::Core::Hashable
      
        # ID of the instance template used to populate the Future Reservation
        # properties.
        # Corresponds to the JSON property `sourceInstanceTemplateId`
        # @return [String]
        attr_accessor :source_instance_template_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @source_instance_template_id = args[:source_instance_template_id] if args.key?(:source_instance_template_id)
        end
      end
      
      # 
      class FutureReservationTimeWindow
        include Google::Apis::Core::Hashable
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `duration`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :duration
      
        # 
        # Corresponds to the JSON property `endTime`
        # @return [String]
        attr_accessor :end_time
      
        # Start time of the Future Reservation. The start_time is an RFC3339
        # string.
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @duration = args[:duration] if args.key?(:duration)
          @end_time = args[:end_time] if args.key?(:end_time)
          @start_time = args[:start_time] if args.key?(:start_time)
        end
      end
      
      # Contains a list of future reservations.
      class FutureReservationsAggregatedListResponse
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Future reservation resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::FutureReservationsScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # futureReservationsAggregatedListResponse for future
        # resevation aggregated list response.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::FutureReservationsAggregatedListResponse::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::FutureReservationsAggregatedListResponse::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class FutureReservationsListResponse
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # [Output Only] A list of future reservation resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::FutureReservation>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource.Alwayscompute#
        # FutureReservationsListResponse for lists of
        # reservations
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::FutureReservationsListResponse::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::FutureReservationsListResponse::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class FutureReservationsScopedList
        include Google::Apis::Core::Hashable
      
        # A list of future reservations contained in this scope.
        # Corresponds to the JSON property `futureReservations`
        # @return [Array<Google::Apis::ComputeV1::FutureReservation>]
        attr_accessor :future_reservations
      
        # Informational warning which replaces the list of future reservations when
        # the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::FutureReservationsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @future_reservations = args[:future_reservations] if args.key?(:future_reservations)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of future reservations when
        # the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::FutureReservationsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Recommendation for single resources specification, to be created in the
      # future.
      class FutureResourcesRecommendation
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `endTime`
        # @return [String]
        attr_accessor :end_time
      
        # The advised location for resource usage. When a zone, in format
        # 'zones/'.
        # If not set, it means that no location is recommended - see
        # other_locations for details.
        # Corresponds to the JSON property `location`
        # @return [String]
        attr_accessor :location
      
        # List of locations in the request scope that were not
        # recommended. Keys of the map are zones, in format 'zones/'.
        # The values are status information indicating the recommendation status.
        # Corresponds to the JSON property `otherLocations`
        # @return [Hash<String,Google::Apis::ComputeV1::FutureResourcesRecommendationOtherLocation>]
        attr_accessor :other_locations
      
        # Unique id of the recommendation, a UUID string generated by the API.
        # Corresponds to the JSON property `recommendationId`
        # @return [String]
        attr_accessor :recommendation_id
      
        # Type of recommendation. Currently only FUTURE_RESERVATION is supported.
        # Corresponds to the JSON property `recommendationType`
        # @return [String]
        attr_accessor :recommendation_type
      
        # 
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @end_time = args[:end_time] if args.key?(:end_time)
          @location = args[:location] if args.key?(:location)
          @other_locations = args[:other_locations] if args.key?(:other_locations)
          @recommendation_id = args[:recommendation_id] if args.key?(:recommendation_id)
          @recommendation_type = args[:recommendation_type] if args.key?(:recommendation_type)
          @start_time = args[:start_time] if args.key?(:start_time)
        end
      end
      
      # Information about recommendation status for locations
      # that were allowed but not used by the response.
      class FutureResourcesRecommendationOtherLocation
        include Google::Apis::Core::Hashable
      
        # Details (human readable) describing the situation.
        # For example, if status is CONDITION_NOT_MET, then
        # details contain information about the parameters of the time window
        # that did not meet the required conditions.
        # Corresponds to the JSON property `details`
        # @return [String]
        attr_accessor :details
      
        # Status of recommendation in this location.
        # 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)
          @details = args[:details] if args.key?(:details)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # Specification of resources to be created at some time in the future within an
      # optionally specified set of locations, and within the specified time range.
      class FutureResourcesSpec
        include Google::Apis::Core::Hashable
      
        # Indicates if the reservation allocation strategy is static (DENSE) or
        # dynamic (STANDARD). Defaults to DENSE.
        # Corresponds to the JSON property `deploymentType`
        # @return [String]
        attr_accessor :deployment_type
      
        # Specification of locations to create resources in.
        # Corresponds to the JSON property `locationPolicy`
        # @return [Google::Apis::ComputeV1::FutureResourcesSpecLocationPolicy]
        attr_accessor :location_policy
      
        # Specification of reserved resources.
        # Corresponds to the JSON property `targetResources`
        # @return [Google::Apis::ComputeV1::FutureResourcesSpecTargetResources]
        attr_accessor :target_resources
      
        # Specifies a flexible time range with flexible start time and duration.
        # It is possible to specify a contradictory time range that cannot be matched
        # by any Interval. This causes a validation error.
        # Corresponds to the JSON property `timeRangeSpec`
        # @return [Google::Apis::ComputeV1::FlexibleTimeRange]
        attr_accessor :time_range_spec
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @deployment_type = args[:deployment_type] if args.key?(:deployment_type)
          @location_policy = args[:location_policy] if args.key?(:location_policy)
          @target_resources = args[:target_resources] if args.key?(:target_resources)
          @time_range_spec = args[:time_range_spec] if args.key?(:time_range_spec)
        end
      end
      
      # 
      class FutureResourcesSpecAggregateResources
        include Google::Apis::Core::Hashable
      
        # Size of the request, in accelerator (chip) count.
        # Corresponds to the JSON property `acceleratorCount`
        # @return [Fixnum]
        attr_accessor :accelerator_count
      
        # The VM family that all instances scheduled against this reservation
        # must belong to. Use for TPU reservations.
        # Corresponds to the JSON property `vmFamily`
        # @return [String]
        attr_accessor :vm_family
      
        # Workload type. Use for TPU reservations.
        # Corresponds to the JSON property `workloadType`
        # @return [String]
        attr_accessor :workload_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @accelerator_count = args[:accelerator_count] if args.key?(:accelerator_count)
          @vm_family = args[:vm_family] if args.key?(:vm_family)
          @workload_type = args[:workload_type] if args.key?(:workload_type)
        end
      end
      
      # 
      class FutureResourcesSpecLocalSsdPartition
        include Google::Apis::Core::Hashable
      
        # Disk interface. Defaults to SCSI.
        # Corresponds to the JSON property `diskInterface`
        # @return [String]
        attr_accessor :disk_interface
      
        # The size of the disk in GB.
        # Corresponds to the JSON property `diskSizeGb`
        # @return [Fixnum]
        attr_accessor :disk_size_gb
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disk_interface = args[:disk_interface] if args.key?(:disk_interface)
          @disk_size_gb = args[:disk_size_gb] if args.key?(:disk_size_gb)
        end
      end
      
      # Specification of locations to create resources in.
      class FutureResourcesSpecLocationPolicy
        include Google::Apis::Core::Hashable
      
        # Preferences for specified locations.
        # Keys of the map are locations - zones, in format of 'zones/'.
        # Values are preferences for the zones.
        # If a zone is not specified in this map, it is ALLOWed.
        # Corresponds to the JSON property `locations`
        # @return [Hash<String,Google::Apis::ComputeV1::FutureResourcesSpecLocationPolicyLocation>]
        attr_accessor :locations
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @locations = args[:locations] if args.key?(:locations)
        end
      end
      
      # Preference for a single specified location.
      class FutureResourcesSpecLocationPolicyLocation
        include Google::Apis::Core::Hashable
      
        # Preference for this location.
        # Corresponds to the JSON property `preference`
        # @return [String]
        attr_accessor :preference
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @preference = args[:preference] if args.key?(:preference)
        end
      end
      
      # 
      class FutureResourcesSpecSpecificSkuResources
        include Google::Apis::Core::Hashable
      
        # Size of the request, in instance count.
        # Corresponds to the JSON property `instanceCount`
        # @return [Fixnum]
        attr_accessor :instance_count
      
        # Local SSD partitions. You do not have to include SSD partitions that
        # are built in the machine type.
        # Corresponds to the JSON property `localSsdPartitions`
        # @return [Array<Google::Apis::ComputeV1::FutureResourcesSpecLocalSsdPartition>]
        attr_accessor :local_ssd_partitions
      
        # The machine type to use for instances that will use the reservation.
        # This field only accepts machine type names. e.g. n2-standard-4
        # and does not accept machine type full or partial url. e.g.
        # projects/my-l7ilb-project/zones/us-central1-a/machineTypes/n2-standard-4.
        # Use for GPU reservations.
        # Corresponds to the JSON property `machineType`
        # @return [String]
        attr_accessor :machine_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_count = args[:instance_count] if args.key?(:instance_count)
          @local_ssd_partitions = args[:local_ssd_partitions] if args.key?(:local_ssd_partitions)
          @machine_type = args[:machine_type] if args.key?(:machine_type)
        end
      end
      
      # Specification of reserved resources.
      class FutureResourcesSpecTargetResources
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `aggregateResources`
        # @return [Google::Apis::ComputeV1::FutureResourcesSpecAggregateResources]
        attr_accessor :aggregate_resources
      
        # 
        # Corresponds to the JSON property `specificSkuResources`
        # @return [Google::Apis::ComputeV1::FutureResourcesSpecSpecificSkuResources]
        attr_accessor :specific_sku_resources
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @aggregate_resources = args[:aggregate_resources] if args.key?(:aggregate_resources)
          @specific_sku_resources = args[:specific_sku_resources] if args.key?(:specific_sku_resources)
        end
      end
      
      # 
      class GrpcHealthCheck
        include Google::Apis::Core::Hashable
      
        # The gRPC service name for the health check. This field is optional. The
        # value of grpc_service_name has the following meanings by convention:
        # - Empty service_name means the overall status of all services at the
        # backend.
        # - Non-empty service_name means the health of that gRPC service, as defined
        # by the owner of the service.
        # The grpc_service_name can only be ASCII.
        # Corresponds to the JSON property `grpcServiceName`
        # @return [String]
        attr_accessor :grpc_service_name
      
        # The TCP port number to which the health check prober sends packets. Valid
        # values are 1 through 65535.
        # Corresponds to the JSON property `port`
        # @return [Fixnum]
        attr_accessor :port
      
        # Not supported.
        # Corresponds to the JSON property `portName`
        # @return [String]
        attr_accessor :port_name
      
        # Specifies how a port is selected for health checking. Can be one of the
        # following values:
        # USE_FIXED_PORT: Specifies a port number explicitly using theport field  in the
        # health check. Supported by backend services
        # for passthrough load balancers and backend services for proxy load
        # balancers. Not supported by target pools. The health check supports all
        # backends supported by the backend service provided the backend can be
        # health checked. For example, GCE_VM_IP network endpoint
        # groups, GCE_VM_IP_PORT network endpoint groups, and instance
        # group backends.
        # USE_NAMED_PORT: Not supported.
        # USE_SERVING_PORT: Provides an indirect method of specifying
        # the health check port by referring to the backend service. Only supported
        # by backend services for proxy load balancers. Not supported by target
        # pools.  Not supported by backend services for passthrough load balancers.
        # Supports all backends that can be health checked; for example,GCE_VM_IP_PORT
        # network endpoint groups and instance group
        # backends.
        # For GCE_VM_IP_PORT network endpoint group backends, the health
        # check uses the port number specified for each endpoint in the network
        # endpoint group.  For instance group backends, the health check uses the
        # port number determined by looking up the backend service's named port in
        # the instance group's list of named ports.
        # Corresponds to the JSON property `portSpecification`
        # @return [String]
        attr_accessor :port_specification
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @grpc_service_name = args[:grpc_service_name] if args.key?(:grpc_service_name)
          @port = args[:port] if args.key?(:port)
          @port_name = args[:port_name] if args.key?(:port_name)
          @port_specification = args[:port_specification] if args.key?(:port_specification)
        end
      end
      
      # 
      class GrpctlsHealthCheck
        include Google::Apis::Core::Hashable
      
        # The gRPC service name for the health check. This field is optional. The
        # value of grpc_service_name has the following meanings by convention:
        # - Empty service_name means the overall status of all services at the
        # backend.
        # - Non-empty service_name means the health of that gRPC service, as defined
        # by the owner of the service.
        # The grpc_service_name can only be ASCII.
        # Corresponds to the JSON property `grpcServiceName`
        # @return [String]
        attr_accessor :grpc_service_name
      
        # The TCP port number to which the health check prober sends packets. Valid
        # values are 1 through 65535.
        # Corresponds to the JSON property `port`
        # @return [Fixnum]
        attr_accessor :port
      
        # Specifies how a port is selected for health checking. Can be one of the
        # following values:
        # USE_FIXED_PORT: Specifies a port number explicitly using theport field  in the
        # health check. Supported by backend services
        # for passthrough load balancers and backend services for proxy load
        # balancers. Not supported by target pools. The health check supports all
        # backends supported by the backend service provided the backend can be
        # health checked. For example, GCE_VM_IP network endpoint
        # groups, GCE_VM_IP_PORT network endpoint groups, and instance
        # group backends.
        # USE_NAMED_PORT: Not supported.
        # USE_SERVING_PORT: Provides an indirect method of specifying
        # the health check port by referring to the backend service. Only supported
        # by backend services for proxy load balancers. Not supported by target
        # pools.  Not supported by backend services for passthrough load balancers.
        # Supports all backends that can be health checked; for example,GCE_VM_IP_PORT
        # network endpoint groups and instance group
        # backends.
        # For GCE_VM_IP_PORT network endpoint group backends, the health
        # check uses the port number specified for each endpoint in the network
        # endpoint group.  For instance group backends, the health check uses the
        # port number determined by looking up the backend service's named port in
        # the instance group's list of named ports.
        # Corresponds to the JSON property `portSpecification`
        # @return [String]
        attr_accessor :port_specification
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @grpc_service_name = args[:grpc_service_name] if args.key?(:grpc_service_name)
          @port = args[:port] if args.key?(:port)
          @port_specification = args[:port_specification] if args.key?(:port_specification)
        end
      end
      
      # 
      class GlobalAddressesMoveRequest
        include Google::Apis::Core::Hashable
      
        # An optional destination address description if intended to be different
        # from the source.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # The URL of the destination address to move to. This can be a full or
        # partial URL. For example, the following are all valid URLs to a address:
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/global/addresses/
        # address
        # - projects/project/global/addresses/address
        # Note that destination project must be different from the source project. So/
        # global/addresses/address is not valid partial url.
        # Corresponds to the JSON property `destinationAddress`
        # @return [String]
        attr_accessor :destination_address
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @description = args[:description] if args.key?(:description)
          @destination_address = args[:destination_address] if args.key?(:destination_address)
        end
      end
      
      # 
      class GlobalNetworkEndpointGroupsAttachEndpointsRequest
        include Google::Apis::Core::Hashable
      
        # The list of network endpoints to be attached.
        # Corresponds to the JSON property `networkEndpoints`
        # @return [Array<Google::Apis::ComputeV1::NetworkEndpoint>]
        attr_accessor :network_endpoints
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @network_endpoints = args[:network_endpoints] if args.key?(:network_endpoints)
        end
      end
      
      # 
      class GlobalNetworkEndpointGroupsDetachEndpointsRequest
        include Google::Apis::Core::Hashable
      
        # The list of network endpoints to be detached.
        # Corresponds to the JSON property `networkEndpoints`
        # @return [Array<Google::Apis::ComputeV1::NetworkEndpoint>]
        attr_accessor :network_endpoints
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @network_endpoints = args[:network_endpoints] if args.key?(:network_endpoints)
        end
      end
      
      # 
      class GlobalOrganizationSetPolicyRequest
        include Google::Apis::Core::Hashable
      
        # Flatten Policy to create a backward compatible wire-format.
        # Deprecated. Use 'policy' to specify bindings.
        # Corresponds to the JSON property `bindings`
        # @return [Array<Google::Apis::ComputeV1::Binding>]
        attr_accessor :bindings
      
        # Flatten Policy to create a backward compatible wire-format.
        # Deprecated. Use 'policy' to specify the etag.
        # Corresponds to the JSON property `etag`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :etag
      
        # An Identity and Access Management (IAM) policy, which specifies access
        # controls for Google Cloud resources.
        # A `Policy` is a collection of `bindings`. A `binding` binds one or more
        # `members`, or principals, to a single `role`. Principals can be user
        # accounts, service accounts, Google groups, and domains (such as G Suite). A
        # `role` is a named list of permissions; each `role` can be an IAM predefined
        # role or a user-created custom role.
        # For some types of Google Cloud resources, a `binding` can also specify a
        # `condition`, which is a logical expression that allows access to a resource
        # only if the expression evaluates to `true`. A condition can add constraints
        # based on attributes of the request, the resource, or both. To learn which
        # resources support conditions in their IAM policies, see the
        # [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-
        # policies).
        # **JSON example:**
        # ```
        # `
        # "bindings": [
        # `
        # "role": "roles/resourcemanager.organizationAdmin",
        # "members": [
        # "user:mike@example.com",
        # "group:admins@example.com",
        # "domain:google.com",
        # "serviceAccount:my-project-id@appspot.gserviceaccount.com"
        # ]
        # `,
        # `
        # "role": "roles/resourcemanager.organizationViewer",
        # "members": [
        # "user:eve@example.com"
        # ],
        # "condition": `
        # "title": "expirable access",
        # "description": "Does not grant access after Sep 2020",
        # "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')
        # ",
        # `
        # `
        # ],
        # "etag": "BwWWja0YfJA=",
        # "version": 3
        # `
        # ```
        # **YAML example:**
        # ```
        # bindings:
        # - members:
        # - user:mike@example.com
        # - group:admins@example.com
        # - domain:google.com
        # - serviceAccount:my-project-id@appspot.gserviceaccount.com
        # role: roles/resourcemanager.organizationAdmin
        # - members:
        # - user:eve@example.com
        # role: roles/resourcemanager.organizationViewer
        # condition:
        # title: expirable access
        # description: Does not grant access after Sep 2020
        # expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
        # etag: BwWWja0YfJA=
        # version: 3
        # ```
        # For a description of IAM and its features, see the
        # [IAM documentation](https://cloud.google.com/iam/docs/).
        # Corresponds to the JSON property `policy`
        # @return [Google::Apis::ComputeV1::Policy]
        attr_accessor :policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bindings = args[:bindings] if args.key?(:bindings)
          @etag = args[:etag] if args.key?(:etag)
          @policy = args[:policy] if args.key?(:policy)
        end
      end
      
      # 
      class GlobalSetLabelsRequest
        include Google::Apis::Core::Hashable
      
        # The fingerprint of the previous set of labels for this resource,
        # used to detect conflicts. The fingerprint is initially generated by Compute
        # Engine and changes after every request to modify or update labels. You must
        # always provide an up-to-date fingerprint hash when updating or changing
        # labels, otherwise the request will fail with error412 conditionNotMet.  Make a
        # get() request to the
        # resource to get the latest fingerprint.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # A list of labels to apply for this resource. Each label must comply with
        # the
        # requirements for labels. For example,"webserver-frontend": "images". A label
        # value can also be
        # empty (e.g. "my-label": "").
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
        end
      end
      
      # 
      class GlobalSetPolicyRequest
        include Google::Apis::Core::Hashable
      
        # Flatten Policy to create a backward compatible wire-format.
        # Deprecated. Use 'policy' to specify bindings.
        # Corresponds to the JSON property `bindings`
        # @return [Array<Google::Apis::ComputeV1::Binding>]
        attr_accessor :bindings
      
        # Flatten Policy to create a backward compatible wire-format.
        # Deprecated. Use 'policy' to specify the etag.
        # Corresponds to the JSON property `etag`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :etag
      
        # An Identity and Access Management (IAM) policy, which specifies access
        # controls for Google Cloud resources.
        # A `Policy` is a collection of `bindings`. A `binding` binds one or more
        # `members`, or principals, to a single `role`. Principals can be user
        # accounts, service accounts, Google groups, and domains (such as G Suite). A
        # `role` is a named list of permissions; each `role` can be an IAM predefined
        # role or a user-created custom role.
        # For some types of Google Cloud resources, a `binding` can also specify a
        # `condition`, which is a logical expression that allows access to a resource
        # only if the expression evaluates to `true`. A condition can add constraints
        # based on attributes of the request, the resource, or both. To learn which
        # resources support conditions in their IAM policies, see the
        # [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-
        # policies).
        # **JSON example:**
        # ```
        # `
        # "bindings": [
        # `
        # "role": "roles/resourcemanager.organizationAdmin",
        # "members": [
        # "user:mike@example.com",
        # "group:admins@example.com",
        # "domain:google.com",
        # "serviceAccount:my-project-id@appspot.gserviceaccount.com"
        # ]
        # `,
        # `
        # "role": "roles/resourcemanager.organizationViewer",
        # "members": [
        # "user:eve@example.com"
        # ],
        # "condition": `
        # "title": "expirable access",
        # "description": "Does not grant access after Sep 2020",
        # "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')
        # ",
        # `
        # `
        # ],
        # "etag": "BwWWja0YfJA=",
        # "version": 3
        # `
        # ```
        # **YAML example:**
        # ```
        # bindings:
        # - members:
        # - user:mike@example.com
        # - group:admins@example.com
        # - domain:google.com
        # - serviceAccount:my-project-id@appspot.gserviceaccount.com
        # role: roles/resourcemanager.organizationAdmin
        # - members:
        # - user:eve@example.com
        # role: roles/resourcemanager.organizationViewer
        # condition:
        # title: expirable access
        # description: Does not grant access after Sep 2020
        # expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
        # etag: BwWWja0YfJA=
        # version: 3
        # ```
        # For a description of IAM and its features, see the
        # [IAM documentation](https://cloud.google.com/iam/docs/).
        # Corresponds to the JSON property `policy`
        # @return [Google::Apis::ComputeV1::Policy]
        attr_accessor :policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bindings = args[:bindings] if args.key?(:bindings)
          @etag = args[:etag] if args.key?(:etag)
          @policy = args[:policy] if args.key?(:policy)
        end
      end
      
      # Maintenance Info for ReservationBlocks.
      class GroupMaintenanceInfo
        include Google::Apis::Core::Hashable
      
        # Describes number of instances that have ongoing maintenance.
        # Corresponds to the JSON property `instanceMaintenanceOngoingCount`
        # @return [Fixnum]
        attr_accessor :instance_maintenance_ongoing_count
      
        # Describes number of instances that have pending maintenance.
        # Corresponds to the JSON property `instanceMaintenancePendingCount`
        # @return [Fixnum]
        attr_accessor :instance_maintenance_pending_count
      
        # Progress for ongoing maintenance for this group of VMs/hosts.
        # Describes number of hosts in the block that have ongoing maintenance.
        # Corresponds to the JSON property `maintenanceOngoingCount`
        # @return [Fixnum]
        attr_accessor :maintenance_ongoing_count
      
        # Progress for ongoing maintenance for this group of VMs/hosts.
        # Describes number of hosts in the block that have pending maintenance.
        # Corresponds to the JSON property `maintenancePendingCount`
        # @return [Fixnum]
        attr_accessor :maintenance_pending_count
      
        # The type of maintenance for the reservation.
        # Corresponds to the JSON property `schedulingType`
        # @return [String]
        attr_accessor :scheduling_type
      
        # Describes number of subblock Infrastructure that has ongoing maintenance.
        # Here, Subblock Infrastructure Maintenance pertains to upstream hardware
        # contained in the Subblock that is necessary for a VM Family(e.g. NVLink
        # Domains). Not all VM Families will support this field.
        # Corresponds to the JSON property `subblockInfraMaintenanceOngoingCount`
        # @return [Fixnum]
        attr_accessor :subblock_infra_maintenance_ongoing_count
      
        # Describes number of subblock Infrastructure that has pending maintenance.
        # Here, Subblock Infrastructure Maintenance pertains to upstream hardware
        # contained in the Subblock that is necessary for a VM Family (e.g. NVLink
        # Domains). Not all VM Families will support this field.
        # Corresponds to the JSON property `subblockInfraMaintenancePendingCount`
        # @return [Fixnum]
        attr_accessor :subblock_infra_maintenance_pending_count
      
        # Upcoming Maintenance notification information.
        # Corresponds to the JSON property `upcomingGroupMaintenance`
        # @return [Google::Apis::ComputeV1::UpcomingMaintenance]
        attr_accessor :upcoming_group_maintenance
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_maintenance_ongoing_count = args[:instance_maintenance_ongoing_count] if args.key?(:instance_maintenance_ongoing_count)
          @instance_maintenance_pending_count = args[:instance_maintenance_pending_count] if args.key?(:instance_maintenance_pending_count)
          @maintenance_ongoing_count = args[:maintenance_ongoing_count] if args.key?(:maintenance_ongoing_count)
          @maintenance_pending_count = args[:maintenance_pending_count] if args.key?(:maintenance_pending_count)
          @scheduling_type = args[:scheduling_type] if args.key?(:scheduling_type)
          @subblock_infra_maintenance_ongoing_count = args[:subblock_infra_maintenance_ongoing_count] if args.key?(:subblock_infra_maintenance_ongoing_count)
          @subblock_infra_maintenance_pending_count = args[:subblock_infra_maintenance_pending_count] if args.key?(:subblock_infra_maintenance_pending_count)
          @upcoming_group_maintenance = args[:upcoming_group_maintenance] if args.key?(:upcoming_group_maintenance)
        end
      end
      
      # A guest attributes entry.
      class GuestAttributes
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#guestAttributes
        # for guest attributes entry.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The path to be queried. This can be the default namespace ('') or a
        # nested namespace ('\/') or a specified key
        # ('\/\').
        # Corresponds to the JSON property `queryPath`
        # @return [String]
        attr_accessor :query_path
      
        # Array of guest attribute namespace/key/value tuples.
        # Corresponds to the JSON property `queryValue`
        # @return [Google::Apis::ComputeV1::GuestAttributesValue]
        attr_accessor :query_value
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # The key to search for.
        # Corresponds to the JSON property `variableKey`
        # @return [String]
        attr_accessor :variable_key
      
        # Output only. [Output Only] The value found for the requested key.
        # Corresponds to the JSON property `variableValue`
        # @return [String]
        attr_accessor :variable_value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @kind = args[:kind] if args.key?(:kind)
          @query_path = args[:query_path] if args.key?(:query_path)
          @query_value = args[:query_value] if args.key?(:query_value)
          @self_link = args[:self_link] if args.key?(:self_link)
          @variable_key = args[:variable_key] if args.key?(:variable_key)
          @variable_value = args[:variable_value] if args.key?(:variable_value)
        end
      end
      
      # A guest attributes namespace/key/value entry.
      class GuestAttributesEntry
        include Google::Apis::Core::Hashable
      
        # Key for the guest attribute entry.
        # Corresponds to the JSON property `key`
        # @return [String]
        attr_accessor :key
      
        # Namespace for the guest attribute entry.
        # Corresponds to the JSON property `namespace`
        # @return [String]
        attr_accessor :namespace
      
        # Value for the guest attribute entry.
        # Corresponds to the JSON property `value`
        # @return [String]
        attr_accessor :value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @key = args[:key] if args.key?(:key)
          @namespace = args[:namespace] if args.key?(:namespace)
          @value = args[:value] if args.key?(:value)
        end
      end
      
      # Array of guest attribute namespace/key/value tuples.
      class GuestAttributesValue
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::GuestAttributesEntry>]
        attr_accessor :items
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
        end
      end
      
      # Guest OS features.
      class GuestOsFeature
        include Google::Apis::Core::Hashable
      
        # The ID of a supported feature. To add multiple values, use commas to
        # separate values. Set to one or more of the following values:
        # 
        # - VIRTIO_SCSI_MULTIQUEUE
        # - WINDOWS
        # - MULTI_IP_SUBNET
        # - UEFI_COMPATIBLE
        # - GVNIC
        # - SEV_CAPABLE
        # - SUSPEND_RESUME_COMPATIBLE
        # - SEV_LIVE_MIGRATABLE_V2
        # - SEV_SNP_CAPABLE
        # - TDX_CAPABLE
        # - IDPF
        # - SNP_SVSM_CAPABLE
        # For more information, see
        # Enabling guest operating system features.
        # 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)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # 
      class Http2HealthCheck
        include Google::Apis::Core::Hashable
      
        # The value of the host header in the HTTP/2 health check request. If left
        # empty (default value), the host header is set to the destination IP address
        # to which health check packets are sent. The destination IP address depends
        # on the type of load balancer. For details, see:
        # https://cloud.google.com/load-balancing/docs/health-check-concepts#hc-packet-
        # dest
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # The TCP port number to which the health check prober sends packets. The
        # default value is 443. Valid values are 1 through65535.
        # Corresponds to the JSON property `port`
        # @return [Fixnum]
        attr_accessor :port
      
        # Not supported.
        # Corresponds to the JSON property `portName`
        # @return [String]
        attr_accessor :port_name
      
        # Specifies how a port is selected for health checking. Can be one of the
        # following values:
        # USE_FIXED_PORT: Specifies a port number explicitly using theport field  in the
        # health check. Supported by backend services
        # for passthrough load balancers and backend services for proxy load
        # balancers. Not supported by target pools. The health check supports all
        # backends supported by the backend service provided the backend can be
        # health checked. For example, GCE_VM_IP network endpoint
        # groups, GCE_VM_IP_PORT network endpoint groups, and instance
        # group backends.
        # USE_NAMED_PORT: Not supported.
        # USE_SERVING_PORT: Provides an indirect method of specifying
        # the health check port by referring to the backend service. Only supported
        # by backend services for proxy load balancers. Not supported by target
        # pools.  Not supported by backend services for passthrough load balancers.
        # Supports all backends that can be health checked; for example,GCE_VM_IP_PORT
        # network endpoint groups and instance group
        # backends.
        # For GCE_VM_IP_PORT network endpoint group backends, the health
        # check uses the port number specified for each endpoint in the network
        # endpoint group.  For instance group backends, the health check uses the
        # port number determined by looking up the backend service's named port in
        # the instance group's list of named ports.
        # Corresponds to the JSON property `portSpecification`
        # @return [String]
        attr_accessor :port_specification
      
        # Specifies the type of proxy header to append before sending data to the
        # backend, either NONE or PROXY_V1. The default
        # is NONE.
        # Corresponds to the JSON property `proxyHeader`
        # @return [String]
        attr_accessor :proxy_header
      
        # The request path of the HTTP/2 health check request. The default value is/.
        # Must comply withRFC3986.
        # Corresponds to the JSON property `requestPath`
        # @return [String]
        attr_accessor :request_path
      
        # Creates a content-based HTTP/2 health check. In addition to the required
        # HTTP 200 (OK) status code, you can configure the health check to pass only
        # when the backend sends this specific ASCII response string within the first
        # 1024 bytes of the HTTP response body. For details, see:
        # https://cloud.google.com/load-balancing/docs/health-check-concepts#criteria-
        # protocol-http
        # Corresponds to the JSON property `response`
        # @return [String]
        attr_accessor :response
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @host = args[:host] if args.key?(:host)
          @port = args[:port] if args.key?(:port)
          @port_name = args[:port_name] if args.key?(:port_name)
          @port_specification = args[:port_specification] if args.key?(:port_specification)
          @proxy_header = args[:proxy_header] if args.key?(:proxy_header)
          @request_path = args[:request_path] if args.key?(:request_path)
          @response = args[:response] if args.key?(:response)
        end
      end
      
      # 
      class HttpHealthCheck
        include Google::Apis::Core::Hashable
      
        # The value of the host header in the HTTP health check request. If left
        # empty (default value), the host header is set to the destination IP address
        # to which health check packets are sent. The destination IP address depends
        # on the type of load balancer. For details, see:
        # https://cloud.google.com/load-balancing/docs/health-check-concepts#hc-packet-
        # dest
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # The TCP port number to which the health check prober sends packets. The
        # default value is 80. Valid values are 1 through65535.
        # Corresponds to the JSON property `port`
        # @return [Fixnum]
        attr_accessor :port
      
        # Not supported.
        # Corresponds to the JSON property `portName`
        # @return [String]
        attr_accessor :port_name
      
        # Specifies how a port is selected for health checking. Can be one of the
        # following values:
        # USE_FIXED_PORT: Specifies a port number explicitly using theport field  in the
        # health check. Supported by backend services
        # for passthrough load balancers and backend services for proxy load
        # balancers. Also supported in legacy HTTP health checks for target pools.
        # The health check supports all backends supported by the backend service
        # provided the backend can be health checked. For example,GCE_VM_IP network
        # endpoint groups, GCE_VM_IP_PORT
        # network endpoint groups, and instance group backends.
        # USE_NAMED_PORT: Not supported.
        # USE_SERVING_PORT: Provides an indirect method of specifying
        # the health check port by referring to the backend service. Only supported
        # by backend services for proxy load balancers. Not supported by target
        # pools.  Not supported by backend services for pass-through load balancers.
        # Supports all backends that can be health checked; for example,GCE_VM_IP_PORT
        # network endpoint groups and instance group
        # backends.
        # For GCE_VM_IP_PORT network endpoint group backends, the health
        # check uses the port number specified for each endpoint in the network
        # endpoint group.  For instance group backends, the health check uses the
        # port number determined by looking up the backend service's named port in
        # the instance group's list of named ports.
        # Corresponds to the JSON property `portSpecification`
        # @return [String]
        attr_accessor :port_specification
      
        # Specifies the type of proxy header to append before sending data to the
        # backend, either NONE or PROXY_V1. The default
        # is NONE.
        # Corresponds to the JSON property `proxyHeader`
        # @return [String]
        attr_accessor :proxy_header
      
        # The request path of the HTTP health check request. The default value is/. Must
        # comply withRFC3986.
        # Corresponds to the JSON property `requestPath`
        # @return [String]
        attr_accessor :request_path
      
        # Creates a content-based HTTP health check. In addition to the required
        # HTTP 200 (OK) status code, you can configure the health check to pass only
        # when the backend sends this specific ASCII response string within the first
        # 1024 bytes of the HTTP response body. For details, see:
        # https://cloud.google.com/load-balancing/docs/health-check-concepts#criteria-
        # protocol-http
        # Corresponds to the JSON property `response`
        # @return [String]
        attr_accessor :response
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @host = args[:host] if args.key?(:host)
          @port = args[:port] if args.key?(:port)
          @port_name = args[:port_name] if args.key?(:port_name)
          @port_specification = args[:port_specification] if args.key?(:port_specification)
          @proxy_header = args[:proxy_header] if args.key?(:proxy_header)
          @request_path = args[:request_path] if args.key?(:request_path)
          @response = args[:response] if args.key?(:response)
        end
      end
      
      # 
      class HttpsHealthCheck
        include Google::Apis::Core::Hashable
      
        # The value of the host header in the HTTPS health check request. If left
        # empty (default value), the host header is set to the destination IP address
        # to which health check packets are sent. The destination IP address depends
        # on the type of load balancer. For details, see:
        # https://cloud.google.com/load-balancing/docs/health-check-concepts#hc-packet-
        # dest
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # The TCP port number to which the health check prober sends packets. The
        # default value is 443. Valid values are 1 through65535.
        # Corresponds to the JSON property `port`
        # @return [Fixnum]
        attr_accessor :port
      
        # Not supported.
        # Corresponds to the JSON property `portName`
        # @return [String]
        attr_accessor :port_name
      
        # Specifies how a port is selected for health checking. Can be one of the
        # following values:
        # USE_FIXED_PORT: Specifies a port number explicitly using theport field  in the
        # health check. Supported by backend services
        # for passthrough load balancers and backend services for proxy load
        # balancers. Not supported by target pools. The health check supports all
        # backends supported by the backend service provided the backend can be
        # health checked. For example, GCE_VM_IP network endpoint
        # groups, GCE_VM_IP_PORT network endpoint groups, and instance
        # group backends.
        # USE_NAMED_PORT: Not supported.
        # USE_SERVING_PORT: Provides an indirect method of specifying
        # the health check port by referring to the backend service. Only supported
        # by backend services for proxy load balancers. Not supported by target
        # pools.  Not supported by backend services for passthrough load balancers.
        # Supports all backends that can be health checked; for example,GCE_VM_IP_PORT
        # network endpoint groups and instance group
        # backends.
        # For GCE_VM_IP_PORT network endpoint group backends, the health
        # check uses the port number specified for each endpoint in the network
        # endpoint group.  For instance group backends, the health check uses the
        # port number determined by looking up the backend service's named port in
        # the instance group's list of named ports.
        # Corresponds to the JSON property `portSpecification`
        # @return [String]
        attr_accessor :port_specification
      
        # Specifies the type of proxy header to append before sending data to the
        # backend, either NONE or PROXY_V1. The default
        # is NONE.
        # Corresponds to the JSON property `proxyHeader`
        # @return [String]
        attr_accessor :proxy_header
      
        # The request path of the HTTPS health check request. The default value is/.
        # Must comply withRFC3986.
        # Corresponds to the JSON property `requestPath`
        # @return [String]
        attr_accessor :request_path
      
        # Creates a content-based HTTPS health check. In addition to the required
        # HTTP 200 (OK) status code, you can configure the health check to pass only
        # when the backend sends this specific ASCII response string within the first
        # 1024 bytes of the HTTP response body. For details, see:
        # https://cloud.google.com/load-balancing/docs/health-check-concepts#criteria-
        # protocol-http
        # Corresponds to the JSON property `response`
        # @return [String]
        attr_accessor :response
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @host = args[:host] if args.key?(:host)
          @port = args[:port] if args.key?(:port)
          @port_name = args[:port_name] if args.key?(:port_name)
          @port_specification = args[:port_specification] if args.key?(:port_specification)
          @proxy_header = args[:proxy_header] if args.key?(:proxy_header)
          @request_path = args[:request_path] if args.key?(:request_path)
          @response = args[:response] if args.key?(:response)
        end
      end
      
      # Represents a health check resource.
      # Google Compute Engine has two health check resources:
      # * [Regional](/compute/docs/reference/rest/v1/regionHealthChecks)
      # * [Global](/compute/docs/reference/rest/v1/healthChecks)
      # These health check resources can be used for load balancing and for
      # autohealing VMs in a managed instance group (MIG).
      # **Load balancing**
      # Health check requirements vary depending on the type of load balancer. For
      # details about the type of health check supported for
      # each load balancer and corresponding backend type,
      # see Health
      # checks overview: Load balancer guide.
      # **Autohealing in MIGs**
      # The health checks that you use for autohealing VMs in a MIG can be either
      # regional or global. For more information, see  Set up an
      # application health check and autohealing.
      # For more information, seeHealth checks
      # overview.
      class HealthCheck
        include Google::Apis::Core::Hashable
      
        # How often (in seconds) to send a health check. The default value is 5
        # seconds.
        # Corresponds to the JSON property `checkIntervalSec`
        # @return [Fixnum]
        attr_accessor :check_interval_sec
      
        # Output only. [Output Only] Creation timestamp in3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # 
        # Corresponds to the JSON property `grpcHealthCheck`
        # @return [Google::Apis::ComputeV1::GrpcHealthCheck]
        attr_accessor :grpc_health_check
      
        # 
        # Corresponds to the JSON property `grpcTlsHealthCheck`
        # @return [Google::Apis::ComputeV1::GrpctlsHealthCheck]
        attr_accessor :grpc_tls_health_check
      
        # A so-far unhealthy instance will be marked healthy after this
        # many consecutive successes. The default value is 2.
        # Corresponds to the JSON property `healthyThreshold`
        # @return [Fixnum]
        attr_accessor :healthy_threshold
      
        # 
        # Corresponds to the JSON property `http2HealthCheck`
        # @return [Google::Apis::ComputeV1::Http2HealthCheck]
        attr_accessor :http2_health_check
      
        # 
        # Corresponds to the JSON property `httpHealthCheck`
        # @return [Google::Apis::ComputeV1::HttpHealthCheck]
        attr_accessor :http_health_check
      
        # 
        # Corresponds to the JSON property `httpsHealthCheck`
        # @return [Google::Apis::ComputeV1::HttpsHealthCheck]
        attr_accessor :https_health_check
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. Type of the resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Configuration of logging on a health check. If logging is enabled, logs
        # will be exported to Stackdriver.
        # Corresponds to the JSON property `logConfig`
        # @return [Google::Apis::ComputeV1::HealthCheckLogConfig]
        attr_accessor :log_config
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # For example, a name that is 1-63 characters long, matches the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?`, and otherwise complies with
        # RFC1035. This regular expression describes a name where the first
        # character is a lowercase letter, and all following characters are a dash,
        # lowercase letter, or digit, except the last character, which isn't a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] Region where the health check resides.  Not
        # applicable to
        # global health checks.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # The list of cloud regions from which health checks are performed. If any
        # regions are specified, then exactly 3 regions should be specified. The
        # region names must be valid names of Google Cloud regions.
        # This can only be set for global health check.
        # If this list is non-empty, then there are restrictions
        # on what other health check fields are supported and what other resources
        # can use this health check:
        # 
        # - SSL, HTTP2, and GRPC protocols are not supported.
        # - The TCP request field is not supported.
        # - The proxyHeader field for HTTP, HTTPS, and TCP is not
        # supported.
        # - The checkIntervalSec field must be at least 30.
        # - The health check cannot be used with BackendService nor with managed
        # instance group auto-healing.
        # Corresponds to the JSON property `sourceRegions`
        # @return [Array<String>]
        attr_accessor :source_regions
      
        # 
        # Corresponds to the JSON property `sslHealthCheck`
        # @return [Google::Apis::ComputeV1::SslHealthCheck]
        attr_accessor :ssl_health_check
      
        # 
        # Corresponds to the JSON property `tcpHealthCheck`
        # @return [Google::Apis::ComputeV1::TcpHealthCheck]
        attr_accessor :tcp_health_check
      
        # How long (in seconds) to wait before claiming failure. The default value is
        # 5 seconds. It is invalid for timeoutSec to have greater
        # value than checkIntervalSec.
        # Corresponds to the JSON property `timeoutSec`
        # @return [Fixnum]
        attr_accessor :timeout_sec
      
        # Specifies the type of the healthCheck, either TCP,SSL, HTTP, HTTPS,HTTP2 or
        # GRPC. Exactly one of the
        # protocol-specific health check fields must be specified, which must matchtype
        # field.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # A so-far healthy instance will be marked unhealthy after this many
        # consecutive failures. The default value is 2.
        # 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_sec = args[:check_interval_sec] if args.key?(:check_interval_sec)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @grpc_health_check = args[:grpc_health_check] if args.key?(:grpc_health_check)
          @grpc_tls_health_check = args[:grpc_tls_health_check] if args.key?(:grpc_tls_health_check)
          @healthy_threshold = args[:healthy_threshold] if args.key?(:healthy_threshold)
          @http2_health_check = args[:http2_health_check] if args.key?(:http2_health_check)
          @http_health_check = args[:http_health_check] if args.key?(:http_health_check)
          @https_health_check = args[:https_health_check] if args.key?(:https_health_check)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @log_config = args[:log_config] if args.key?(:log_config)
          @name = args[:name] if args.key?(:name)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @source_regions = args[:source_regions] if args.key?(:source_regions)
          @ssl_health_check = args[:ssl_health_check] if args.key?(:ssl_health_check)
          @tcp_health_check = args[:tcp_health_check] if args.key?(:tcp_health_check)
          @timeout_sec = args[:timeout_sec] if args.key?(:timeout_sec)
          @type = args[:type] if args.key?(:type)
          @unhealthy_threshold = args[:unhealthy_threshold] if args.key?(:unhealthy_threshold)
        end
      end
      
      # Contains a list of HealthCheck resources.
      class HealthCheckList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of HealthCheck resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::HealthCheck>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::HealthCheckList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::HealthCheckList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Configuration of logging on a health check. If logging is enabled, logs
      # will be exported to Stackdriver.
      class HealthCheckLogConfig
        include Google::Apis::Core::Hashable
      
        # Indicates whether or not to export logs. This is false by default, which
        # means no health check logging will be done.
        # Corresponds to the JSON property `enable`
        # @return [Boolean]
        attr_accessor :enable
        alias_method :enable?, :enable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @enable = args[:enable] if args.key?(:enable)
        end
      end
      
      # A full or valid partial URL to a health check. For example, the following are
      # valid URLs:
      # 
      # - https://www.googleapis.com/compute/beta/projects/project-id/global/
      # httpHealthChecks/health-check
      # - projects/project-id/global/httpHealthChecks/health-check
      # - global/httpHealthChecks/health-check
      class HealthCheckReference
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `healthCheck`
        # @return [String]
        attr_accessor :health_check
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @health_check = args[:health_check] if args.key?(:health_check)
        end
      end
      
      # Represents a Health-Check as a Service resource.
      class HealthCheckService
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Fingerprint of this resource. A hash of the contents stored in this object.
        # This field is used in optimistic locking. This field will be ignored when
        # inserting a HealthCheckService. An up-to-date fingerprint must
        # be provided in order to patch/update the HealthCheckService; Otherwise, the
        # request will fail with error 412 conditionNotMet. To see the
        # latest fingerprint, make a get() request to retrieve the
        # HealthCheckService.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # A list of URLs to the HealthCheck resources. Must have
        # at least one HealthCheck, and not more than 10 for regionalHealthCheckService,
        # and not more than 1 for globalHealthCheckService.HealthCheck resources must
        # haveportSpecification=USE_SERVING_PORT orportSpecification=USE_FIXED_PORT. For
        # regional HealthCheckService, theHealthCheck must be regional and in the same
        # region. For global HealthCheckService,HealthCheck must be global. Mix of
        # regional and globalHealthChecks is not supported. Multiple
        # regionalHealthChecks must belong to the same region. RegionalHealthChecks must
        # belong to the same region as zones ofNetworkEndpointGroups. For
        # globalHealthCheckService using globalINTERNET_IP_PORT NetworkEndpointGroups,
        # the
        # global HealthChecks must specify sourceRegions,
        # and HealthChecks that specify sourceRegions can
        # only be used with global INTERNET_IP_PORTNetworkEndpointGroups.
        # Corresponds to the JSON property `healthChecks`
        # @return [Array<String>]
        attr_accessor :health_checks
      
        # Optional. Policy for how the results from multiple health checks
        # for the same endpoint are aggregated. Defaults to NO_AGGREGATION
        # if unspecified.
        # 
        # - NO_AGGREGATION. An EndpointHealth message is
        # returned for each  pair in the health check
        # service.
        # - AND. If any health check of an endpoint reportsUNHEALTHY, then UNHEALTHY
        # is theHealthState of the endpoint. If all health checks reportHEALTHY, the
        # HealthState of the endpoint isHEALTHY.
        # .
        # This is only allowed with regional HealthCheckService.
        # Corresponds to the JSON property `healthStatusAggregationPolicy`
        # @return [String]
        attr_accessor :health_status_aggregation_policy
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output only] Type of the resource. Alwayscompute#
        # healthCheckServicefor health check services.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. The name must be 1-63 characters long, and comply
        # with RFC1035. Specifically, the name must be 1-63 characters
        # long and match the regular expression
        # `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character
        # must be a lowercase letter, and all following characters must be a dash,
        # lowercase letter, or digit, except the last character, which cannot be a
        # dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A list of URLs to the NetworkEndpointGroup
        # resources. Must not have more than 100.  For regionalHealthCheckService, NEGs
        # must be in
        # zones in the region of the HealthCheckService. For globalHealthCheckServices,
        # the NetworkEndpointGroups
        # must be global INTERNET_IP_PORT.
        # Corresponds to the JSON property `networkEndpointGroups`
        # @return [Array<String>]
        attr_accessor :network_endpoint_groups
      
        # A list of URLs to the NotificationEndpoint
        # resources. Must not have more than 10.  A list of endpoints for
        # receiving notifications of change in health status. For
        # regionalHealthCheckService,NotificationEndpoint must be regional and in the
        # same region. For global HealthCheckService,NotificationEndpoint must be global.
        # Corresponds to the JSON property `notificationEndpoints`
        # @return [Array<String>]
        attr_accessor :notification_endpoints
      
        # Output only. [Output Only] URL of the region where the health check service
        # resides. This field is not applicable to global health check services.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @health_checks = args[:health_checks] if args.key?(:health_checks)
          @health_status_aggregation_policy = args[:health_status_aggregation_policy] if args.key?(:health_status_aggregation_policy)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @network_endpoint_groups = args[:network_endpoint_groups] if args.key?(:network_endpoint_groups)
          @notification_endpoints = args[:notification_endpoints] if args.key?(:notification_endpoints)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
        end
      end
      
      # A full or valid partial URL to a health check service. For example, the
      # following are valid URLs:
      # 
      # - https://www.googleapis.com/compute/beta/projects/project-id/regions/us-
      # west1/healthCheckServices/health-check-service
      # - projects/project-id/regions/us-west1/healthCheckServices/health-check-
      # service
      # - regions/us-west1/healthCheckServices/health-check-service
      class HealthCheckServiceReference
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `healthCheckService`
        # @return [String]
        attr_accessor :health_check_service
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @health_check_service = args[:health_check_service] if args.key?(:health_check_service)
        end
      end
      
      # 
      class HealthCheckServicesList
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the resource; defined by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # Output only. A list of HealthCheckService resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::HealthCheckService>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # healthCheckServicesList for lists of
        # HealthCheckServices.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::HealthCheckServicesList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::HealthCheckServicesList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class HealthChecksAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of HealthChecksScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::HealthChecksScopedList>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::HealthChecksAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::HealthChecksAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class HealthChecksScopedList
        include Google::Apis::Core::Hashable
      
        # A list of HealthChecks contained in this scope.
        # Corresponds to the JSON property `healthChecks`
        # @return [Array<Google::Apis::ComputeV1::HealthCheck>]
        attr_accessor :health_checks
      
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::HealthChecksScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @health_checks = args[:health_checks] if args.key?(:health_checks)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::HealthChecksScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class HealthStatus
        include Google::Apis::Core::Hashable
      
        # Metadata defined as annotations for network endpoint.
        # Corresponds to the JSON property `annotations`
        # @return [Hash<String,String>]
        attr_accessor :annotations
      
        # URL of the forwarding rule associated with the health status of the
        # instance.
        # Corresponds to the JSON property `forwardingRule`
        # @return [String]
        attr_accessor :forwarding_rule
      
        # A forwarding rule IP address assigned to this instance.
        # Corresponds to the JSON property `forwardingRuleIp`
        # @return [String]
        attr_accessor :forwarding_rule_ip
      
        # Health state of the IPv4 address of the instance.
        # Corresponds to the JSON property `healthState`
        # @return [String]
        attr_accessor :health_state
      
        # URL of the instance resource.
        # Corresponds to the JSON property `instance`
        # @return [String]
        attr_accessor :instance
      
        # For target pool based Network Load Balancing, it indicates the forwarding
        # rule's IP address assigned to this instance. For other types of load
        # balancing, the field indicates VM internal ip.
        # Corresponds to the JSON property `ipAddress`
        # @return [String]
        attr_accessor :ip_address
      
        # 
        # Corresponds to the JSON property `ipv6Address`
        # @return [String]
        attr_accessor :ipv6_address
      
        # Health state of the IPv6 address of the instance.
        # Corresponds to the JSON property `ipv6HealthState`
        # @return [String]
        attr_accessor :ipv6_health_state
      
        # The named port of the instance group, not necessarily the port that is
        # health-checked.
        # Corresponds to the JSON property `port`
        # @return [Fixnum]
        attr_accessor :port
      
        # 
        # Corresponds to the JSON property `weight`
        # @return [String]
        attr_accessor :weight
      
        # 
        # Corresponds to the JSON property `weightError`
        # @return [String]
        attr_accessor :weight_error
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @annotations = args[:annotations] if args.key?(:annotations)
          @forwarding_rule = args[:forwarding_rule] if args.key?(:forwarding_rule)
          @forwarding_rule_ip = args[:forwarding_rule_ip] if args.key?(:forwarding_rule_ip)
          @health_state = args[:health_state] if args.key?(:health_state)
          @instance = args[:instance] if args.key?(:instance)
          @ip_address = args[:ip_address] if args.key?(:ip_address)
          @ipv6_address = args[:ipv6_address] if args.key?(:ipv6_address)
          @ipv6_health_state = args[:ipv6_health_state] if args.key?(:ipv6_health_state)
          @port = args[:port] if args.key?(:port)
          @weight = args[:weight] if args.key?(:weight)
          @weight_error = args[:weight_error] if args.key?(:weight_error)
        end
      end
      
      # 
      class HealthStatusForNetworkEndpoint
        include Google::Apis::Core::Hashable
      
        # URL of the backend service associated with the health state of the network
        # endpoint.
        # Corresponds to the JSON property `backendService`
        # @return [Google::Apis::ComputeV1::BackendServiceReference]
        attr_accessor :backend_service
      
        # URL of the forwarding rule associated with the health state of the network
        # endpoint.
        # Corresponds to the JSON property `forwardingRule`
        # @return [Google::Apis::ComputeV1::ForwardingRuleReference]
        attr_accessor :forwarding_rule
      
        # A full or valid partial URL to a health check. For example, the following are
        # valid URLs:
        # 
        # - https://www.googleapis.com/compute/beta/projects/project-id/global/
        # httpHealthChecks/health-check
        # - projects/project-id/global/httpHealthChecks/health-check
        # - global/httpHealthChecks/health-check
        # Corresponds to the JSON property `healthCheck`
        # @return [Google::Apis::ComputeV1::HealthCheckReference]
        attr_accessor :health_check
      
        # A full or valid partial URL to a health check service. For example, the
        # following are valid URLs:
        # 
        # - https://www.googleapis.com/compute/beta/projects/project-id/regions/us-
        # west1/healthCheckServices/health-check-service
        # - projects/project-id/regions/us-west1/healthCheckServices/health-check-
        # service
        # - regions/us-west1/healthCheckServices/health-check-service
        # Corresponds to the JSON property `healthCheckService`
        # @return [Google::Apis::ComputeV1::HealthCheckServiceReference]
        attr_accessor :health_check_service
      
        # Health state of the network endpoint determined based on the health checks
        # configured.
        # Corresponds to the JSON property `healthState`
        # @return [String]
        attr_accessor :health_state
      
        # Health state of the ipv6 network endpoint determined based on the health
        # checks configured.
        # Corresponds to the JSON property `ipv6HealthState`
        # @return [String]
        attr_accessor :ipv6_health_state
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @backend_service = args[:backend_service] if args.key?(:backend_service)
          @forwarding_rule = args[:forwarding_rule] if args.key?(:forwarding_rule)
          @health_check = args[:health_check] if args.key?(:health_check)
          @health_check_service = args[:health_check_service] if args.key?(:health_check_service)
          @health_state = args[:health_state] if args.key?(:health_state)
          @ipv6_health_state = args[:ipv6_health_state] if args.key?(:ipv6_health_state)
        end
      end
      
      # Provides links to documentation or for performing an out of band action.
      # For example, if a quota check failed with an error indicating the calling
      # project hasn't enabled the accessed service, this can contain a URL pointing
      # directly to the right place in the developer console to flip the bit.
      class Help
        include Google::Apis::Core::Hashable
      
        # URL(s) pointing to additional information on handling the current error.
        # Corresponds to the JSON property `links`
        # @return [Array<Google::Apis::ComputeV1::HelpLink>]
        attr_accessor :links
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @links = args[:links] if args.key?(:links)
        end
      end
      
      # Describes a URL link.
      class HelpLink
        include Google::Apis::Core::Hashable
      
        # Describes what the link offers.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # The URL of the link.
        # 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)
          @description = args[:description] if args.key?(:description)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # UrlMaps
      # A host-matching rule for a URL. If matched, will use the namedPathMatcher to
      # select the BackendService.
      class HostRule
        include Google::Apis::Core::Hashable
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # The list of host patterns to match. They must be valid hostnames with
        # optional port numbers in the format host:port.* matches any string of ([a-z0-9-
        # .]*). In
        # that case, * must be the first character, and if followed by
        # anything, the immediate following character must be either -
        # or ..
        # * based matching is not supported when the URL map is bound
        # to a target gRPC proxy that has the validateForProxyless field
        # set to true.
        # Corresponds to the JSON property `hosts`
        # @return [Array<String>]
        attr_accessor :hosts
      
        # The name of the PathMatcher to use to match the path portion
        # of the URL if the hostRule matches the URL's host portion.
        # Corresponds to the JSON property `pathMatcher`
        # @return [String]
        attr_accessor :path_matcher
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @description = args[:description] if args.key?(:description)
          @hosts = args[:hosts] if args.key?(:hosts)
          @path_matcher = args[:path_matcher] if args.key?(:path_matcher)
        end
      end
      
      # Specification for how requests are aborted as part of fault injection.
      class HttpFaultAbort
        include Google::Apis::Core::Hashable
      
        # The HTTP status code used to abort the request.
        # The value must be from 200 to 599 inclusive.
        # For gRPC protocol, the gRPC status code is mapped to HTTP status code
        # according to this
        # mapping table. HTTP status 200 is mapped to gRPC status
        # UNKNOWN. Injecting an OK status is currently not supported by
        # Traffic Director.
        # Corresponds to the JSON property `httpStatus`
        # @return [Fixnum]
        attr_accessor :http_status
      
        # The percentage of traffic for connections, operations, or requests
        # that is aborted as part of fault injection.
        # The value must be from 0.0 to 100.0 inclusive.
        # Corresponds to the JSON property `percentage`
        # @return [Float]
        attr_accessor :percentage
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @http_status = args[:http_status] if args.key?(:http_status)
          @percentage = args[:percentage] if args.key?(:percentage)
        end
      end
      
      # Specifies the delay introduced by the load balancer before forwarding the
      # request to the backend service as part of fault injection.
      class HttpFaultDelay
        include Google::Apis::Core::Hashable
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `fixedDelay`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :fixed_delay
      
        # The percentage of traffic for connections, operations, or requests for
        # which a delay is introduced as part of fault injection.
        # The value must be from 0.0 to 100.0 inclusive.
        # Corresponds to the JSON property `percentage`
        # @return [Float]
        attr_accessor :percentage
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @fixed_delay = args[:fixed_delay] if args.key?(:fixed_delay)
          @percentage = args[:percentage] if args.key?(:percentage)
        end
      end
      
      # The specification for fault injection introduced into traffic to test
      # the resiliency of clients to backend service failure. As part of fault
      # injection, when clients send requests to a backend service, delays can be
      # introduced by the load balancer on a percentage of requests before sending
      # those request to the backend service. Similarly requests from clients can be
      # aborted by the load balancer for a percentage of requests.
      class HttpFaultInjection
        include Google::Apis::Core::Hashable
      
        # Specification for how requests are aborted as part of fault injection.
        # Corresponds to the JSON property `abort`
        # @return [Google::Apis::ComputeV1::HttpFaultAbort]
        attr_accessor :abort
      
        # Specifies the delay introduced by the load balancer before forwarding the
        # request to the backend service as part of fault injection.
        # Corresponds to the JSON property `delay`
        # @return [Google::Apis::ComputeV1::HttpFaultDelay]
        attr_accessor :delay
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @abort = args[:abort] if args.key?(:abort)
          @delay = args[:delay] if args.key?(:delay)
        end
      end
      
      # The request and response header transformations that take effect before
      # the request is passed along to the selected backendService.
      class HttpHeaderAction
        include Google::Apis::Core::Hashable
      
        # Headers to add to a matching request before forwarding the request to
        # thebackendService.
        # Corresponds to the JSON property `requestHeadersToAdd`
        # @return [Array<Google::Apis::ComputeV1::HttpHeaderOption>]
        attr_accessor :request_headers_to_add
      
        # A list of header names for headers that need to be removed from the
        # request before forwarding the request to the backendService.
        # Corresponds to the JSON property `requestHeadersToRemove`
        # @return [Array<String>]
        attr_accessor :request_headers_to_remove
      
        # Headers to add the response before sending the response back to the
        # client.
        # Corresponds to the JSON property `responseHeadersToAdd`
        # @return [Array<Google::Apis::ComputeV1::HttpHeaderOption>]
        attr_accessor :response_headers_to_add
      
        # A list of header names for headers that need to be removed from the
        # response before sending the response back to the client.
        # Corresponds to the JSON property `responseHeadersToRemove`
        # @return [Array<String>]
        attr_accessor :response_headers_to_remove
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @request_headers_to_add = args[:request_headers_to_add] if args.key?(:request_headers_to_add)
          @request_headers_to_remove = args[:request_headers_to_remove] if args.key?(:request_headers_to_remove)
          @response_headers_to_add = args[:response_headers_to_add] if args.key?(:response_headers_to_add)
          @response_headers_to_remove = args[:response_headers_to_remove] if args.key?(:response_headers_to_remove)
        end
      end
      
      # matchRule criteria for request header matches.
      class HttpHeaderMatch
        include Google::Apis::Core::Hashable
      
        # The value should exactly match contents of exactMatch.
        # Only one of exactMatch, prefixMatch,suffixMatch, regexMatch,presentMatch or
        # rangeMatch must be set.
        # Corresponds to the JSON property `exactMatch`
        # @return [String]
        attr_accessor :exact_match
      
        # The name of the HTTP header to match.
        # For matching against the HTTP request's authority, use a headerMatch
        # with the header name ":authority".
        # For matching a request's method, use the headerName ":method".
        # When the URL map is bound to a target gRPC proxy that has
        # the validateForProxyless field set to true, only
        # non-binary
        # user-specified custom metadata and the `content-type` header are supported.
        # The following transport-level headers cannot be used in header matching
        # rules:
        # `:authority`, `:method`, `:path`, `:scheme`, `user-agent`,
        # `accept-encoding`, `content-encoding`, `grpc-accept-encoding`,
        # `grpc-encoding`, `grpc-previous-rpc-attempts`, `grpc-tags-bin`,
        # `grpc-timeout` and `grpc-trace-bin`.
        # Corresponds to the JSON property `headerName`
        # @return [String]
        attr_accessor :header_name
      
        # If set to false, the headerMatch is considered a
        # match if the preceding match criteria are met. If set to true,
        # the headerMatch is considered a match if the preceding
        # match criteria are NOT met.
        # The default setting is false.
        # Corresponds to the JSON property `invertMatch`
        # @return [Boolean]
        attr_accessor :invert_match
        alias_method :invert_match?, :invert_match
      
        # The value of the header must start with the contents ofprefixMatch.
        # Only one of exactMatch, prefixMatch,suffixMatch, regexMatch,presentMatch or
        # rangeMatch must be set.
        # Corresponds to the JSON property `prefixMatch`
        # @return [String]
        attr_accessor :prefix_match
      
        # A header with the contents of headerName must exist. The
        # match takes place whether or not the request's header has a value.
        # Only one of exactMatch, prefixMatch,suffixMatch, regexMatch,presentMatch or
        # rangeMatch must be set.
        # Corresponds to the JSON property `presentMatch`
        # @return [Boolean]
        attr_accessor :present_match
        alias_method :present_match?, :present_match
      
        # HttpRouteRuleMatch criteria for field values that must stay
        # within the specified integer range.
        # Corresponds to the JSON property `rangeMatch`
        # @return [Google::Apis::ComputeV1::Int64RangeMatch]
        attr_accessor :range_match
      
        # The value of the header must match the regular expression specified
        # inregexMatch.
        # For more information about regular expression syntax, see Syntax.
        # For matching against a port specified in the HTTP request, use a
        # headerMatch with headerName set to PORT and a regular expression that
        # satisfies the RFC2616 Host header's port specifier.
        # Only one of exactMatch, prefixMatch,suffixMatch, regexMatch,presentMatch or
        # rangeMatch must be set.
        # Regular expressions can only be used when the loadBalancingScheme is
        # set to INTERNAL_SELF_MANAGED, EXTERNAL_MANAGED
        # (regional scope) or INTERNAL_MANAGED.
        # Corresponds to the JSON property `regexMatch`
        # @return [String]
        attr_accessor :regex_match
      
        # The value of the header must end with the contents ofsuffixMatch.
        # Only one of exactMatch, prefixMatch,suffixMatch, regexMatch,presentMatch or
        # rangeMatch must be set.
        # Corresponds to the JSON property `suffixMatch`
        # @return [String]
        attr_accessor :suffix_match
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @exact_match = args[:exact_match] if args.key?(:exact_match)
          @header_name = args[:header_name] if args.key?(:header_name)
          @invert_match = args[:invert_match] if args.key?(:invert_match)
          @prefix_match = args[:prefix_match] if args.key?(:prefix_match)
          @present_match = args[:present_match] if args.key?(:present_match)
          @range_match = args[:range_match] if args.key?(:range_match)
          @regex_match = args[:regex_match] if args.key?(:regex_match)
          @suffix_match = args[:suffix_match] if args.key?(:suffix_match)
        end
      end
      
      # Specification determining how headers are added to requests or responses.
      class HttpHeaderOption
        include Google::Apis::Core::Hashable
      
        # The name of the header.
        # Corresponds to the JSON property `headerName`
        # @return [String]
        attr_accessor :header_name
      
        # The value of the header to add.
        # Corresponds to the JSON property `headerValue`
        # @return [String]
        attr_accessor :header_value
      
        # If false, headerValue is appended to any values
        # that already
        # exist for the header. If true, headerValue is set for the
        # header, discarding any values that were set for that header.
        # The default value is true,
        # unless a variable is present in headerValue,
        # in which case the default value is false.
        # .
        # Corresponds to the JSON property `replace`
        # @return [Boolean]
        attr_accessor :replace
        alias_method :replace?, :replace
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @header_name = args[:header_name] if args.key?(:header_name)
          @header_value = args[:header_value] if args.key?(:header_value)
          @replace = args[:replace] if args.key?(:replace)
        end
      end
      
      # Represents a legacy HTTP Health Check resource.
      # Legacy HTTP health checks are now only required by target pool-based network
      # load balancers. For all other load balancers, including backend service-based
      # network load balancers, and for managed instance group auto-healing, you must
      # use modern (non-legacy) health checks.
      # For more information, seeHealth checks
      # overview.
      class HttpHealthCheck
        include Google::Apis::Core::Hashable
      
        # How often (in seconds) to send a health check. The default value is5 seconds.
        # Corresponds to the JSON property `checkIntervalSec`
        # @return [Fixnum]
        attr_accessor :check_interval_sec
      
        # [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # A so-far unhealthy instance will be marked healthy after this
        # many consecutive successes. The default value is 2.
        # Corresponds to the JSON property `healthyThreshold`
        # @return [Fixnum]
        attr_accessor :healthy_threshold
      
        # The value of the host header in the HTTP health check request. If left
        # empty (default value), the public IP on behalf of which this health check
        # is performed will be used.
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#httpHealthCheck
        # for HTTP health checks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The TCP port number for the HTTP health check request. The default value is80.
        # Corresponds to the JSON property `port`
        # @return [Fixnum]
        attr_accessor :port
      
        # The request path of the HTTP health check request. The default value is/. This
        # field does not support query
        # parameters. Must comply withRFC3986.
        # Corresponds to the JSON property `requestPath`
        # @return [String]
        attr_accessor :request_path
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # How long (in seconds) to wait before claiming failure. The default value is5
        # seconds. It is invalid for timeoutSec to have
        # greater value than checkIntervalSec.
        # Corresponds to the JSON property `timeoutSec`
        # @return [Fixnum]
        attr_accessor :timeout_sec
      
        # A so-far healthy instance will be marked unhealthy after this
        # many consecutive failures. The default value is 2.
        # 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_sec = args[:check_interval_sec] if args.key?(:check_interval_sec)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @healthy_threshold = args[:healthy_threshold] if args.key?(:healthy_threshold)
          @host = args[:host] if args.key?(:host)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @port = args[:port] if args.key?(:port)
          @request_path = args[:request_path] if args.key?(:request_path)
          @self_link = args[:self_link] if args.key?(:self_link)
          @timeout_sec = args[:timeout_sec] if args.key?(:timeout_sec)
          @unhealthy_threshold = args[:unhealthy_threshold] if args.key?(:unhealthy_threshold)
        end
      end
      
      # Contains a list of HttpHealthCheck resources.
      class HttpHealthCheckList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of HttpHealthCheck resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::HttpHealthCheck>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::HttpHealthCheckList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::HttpHealthCheckList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # HttpRouteRuleMatch criteria for a request's query parameter.
      class HttpQueryParameterMatch
        include Google::Apis::Core::Hashable
      
        # The queryParameterMatch matches if the value of the
        # parameter exactly matches the contents of exactMatch.
        # Only one of presentMatch, exactMatch, orregexMatch must be set.
        # Corresponds to the JSON property `exactMatch`
        # @return [String]
        attr_accessor :exact_match
      
        # The name of the query parameter to match. The query parameter must exist in
        # the request, in the absence of which the request match fails.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Specifies that the queryParameterMatch matches if the
        # request contains the query parameter, irrespective of whether the
        # parameter has a value or not.
        # Only one of presentMatch, exactMatch, orregexMatch must be set.
        # Corresponds to the JSON property `presentMatch`
        # @return [Boolean]
        attr_accessor :present_match
        alias_method :present_match?, :present_match
      
        # The queryParameterMatch matches if the value of the
        # parameter matches the regular expression specified byregexMatch. For
        # more information about regular expression syntax, see Syntax.
        # Only one of presentMatch, exactMatch, orregexMatch must be set.
        # Regular expressions can only be used when the loadBalancingScheme is
        # set to INTERNAL_SELF_MANAGED, EXTERNAL_MANAGED
        # (regional scope) or INTERNAL_MANAGED.
        # Corresponds to the JSON property `regexMatch`
        # @return [String]
        attr_accessor :regex_match
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @exact_match = args[:exact_match] if args.key?(:exact_match)
          @name = args[:name] if args.key?(:name)
          @present_match = args[:present_match] if args.key?(:present_match)
          @regex_match = args[:regex_match] if args.key?(:regex_match)
        end
      end
      
      # Specifies settings for an HTTP redirect.
      class HttpRedirectAction
        include Google::Apis::Core::Hashable
      
        # The host that is used in the redirect response instead of the one that
        # was supplied in the request.
        # The value must be from 1 to 255
        # characters.
        # Corresponds to the JSON property `hostRedirect`
        # @return [String]
        attr_accessor :host_redirect
      
        # If set to true, the URL scheme in the redirected request is
        # set to HTTPS.
        # If set to false, the URL scheme of the redirected request
        # remains the same as that of the request.
        # This must only be set for URL maps used inTargetHttpProxys. Setting this true
        # forTargetHttpsProxy is not permitted.
        # The default is set to false.
        # Corresponds to the JSON property `httpsRedirect`
        # @return [Boolean]
        attr_accessor :https_redirect
        alias_method :https_redirect?, :https_redirect
      
        # The path that is used in the redirect response instead of the one
        # that was supplied in the request.
        # pathRedirect cannot be supplied together withprefixRedirect. Supply one alone
        # or neither. If neither is
        # supplied, the path of the original request is used for the redirect.
        # The value must be from 1 to 1024 characters.
        # Corresponds to the JSON property `pathRedirect`
        # @return [String]
        attr_accessor :path_redirect
      
        # The prefix that replaces the prefixMatch specified in
        # the HttpRouteRuleMatch, retaining the remaining portion
        # of the URL before redirecting the request.
        # prefixRedirect cannot be supplied together withpathRedirect. Supply one alone
        # or neither. If neither is
        # supplied, the path of the original request is used for the redirect.
        # The value must be from 1 to 1024 characters.
        # Corresponds to the JSON property `prefixRedirect`
        # @return [String]
        attr_accessor :prefix_redirect
      
        # The HTTP Status code to use for this RedirectAction.
        # Supported values are:
        # 
        # - MOVED_PERMANENTLY_DEFAULT, which is the default value and corresponds
        # to 301.
        # - FOUND, which corresponds to 302.
        # - SEE_OTHER which corresponds to 303.
        # - TEMPORARY_REDIRECT, which corresponds to 307. In this case, the request
        # method is retained.
        # - PERMANENT_REDIRECT, which corresponds to 308. In this case, the request
        # method is retained.
        # Corresponds to the JSON property `redirectResponseCode`
        # @return [String]
        attr_accessor :redirect_response_code
      
        # If set to true, any accompanying query portion of the original
        # URL is
        # removed before redirecting the request. If set to false, the
        # query portion of the original URL is retained.
        # The default is set to false.
        # Corresponds to the JSON property `stripQuery`
        # @return [Boolean]
        attr_accessor :strip_query
        alias_method :strip_query?, :strip_query
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @host_redirect = args[:host_redirect] if args.key?(:host_redirect)
          @https_redirect = args[:https_redirect] if args.key?(:https_redirect)
          @path_redirect = args[:path_redirect] if args.key?(:path_redirect)
          @prefix_redirect = args[:prefix_redirect] if args.key?(:prefix_redirect)
          @redirect_response_code = args[:redirect_response_code] if args.key?(:redirect_response_code)
          @strip_query = args[:strip_query] if args.key?(:strip_query)
        end
      end
      
      # The retry policy associates with HttpRouteRule
      class HttpRetryPolicy
        include Google::Apis::Core::Hashable
      
        # Specifies the allowed number retries. This number must be > 0.
        # If not specified, defaults to 1.
        # Corresponds to the JSON property `numRetries`
        # @return [Fixnum]
        attr_accessor :num_retries
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `perTryTimeout`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :per_try_timeout
      
        # Specifies one or more conditions when this retry policy applies. Valid
        # values are:
        # 
        # - 5xx: retry is attempted if the instance or endpoint
        # responds with any 5xx response code, or if the instance or
        # endpoint does not respond at all. For example, disconnects, reset, read
        # timeout, connection failure, and refused streams.
        # - gateway-error: Similar to 5xx, but only
        # applies to response codes 502, 503 or504.
        # - connect-failure: a retry is attempted on failures
        # connecting to the instance or endpoint. For example, connection
        # timeouts.
        # - retriable-4xx: a retry is attempted if the instance
        # or endpoint responds with a 4xx response code.
        # The only error that you can retry is error code 409.
        # - refused-stream: a retry is attempted if the instance
        # or endpoint resets the stream with a REFUSED_STREAM error
        # code. This reset type indicates that it is safe to retry.
        # - cancelled: a retry is attempted if the gRPC status
        # code in the response header is set to cancelled.
        # - deadline-exceeded: a retry is attempted if the gRPC
        # status code in the response header is set todeadline-exceeded.
        # - internal: a retry is attempted if the gRPC
        # status code in the response header is set tointernal.
        # - resource-exhausted: a retry is attempted if the gRPC
        # status code in the response header is set toresource-exhausted.
        # - unavailable: a retry is attempted if the gRPC
        # status code in the response header is set tounavailable.
        # Only the following codes are supported when the URL map is bound to
        # target gRPC proxy that has validateForProxyless field set to true.
        # 
        # - cancelled
        # - deadline-exceeded
        # - internal
        # - resource-exhausted
        # - unavailable
        # Corresponds to the JSON property `retryConditions`
        # @return [Array<String>]
        attr_accessor :retry_conditions
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @num_retries = args[:num_retries] if args.key?(:num_retries)
          @per_try_timeout = args[:per_try_timeout] if args.key?(:per_try_timeout)
          @retry_conditions = args[:retry_conditions] if args.key?(:retry_conditions)
        end
      end
      
      # 
      class HttpRouteAction
        include Google::Apis::Core::Hashable
      
        # The specification for allowing client-side cross-origin requests. For more
        # information about the W3C recommendation for cross-origin resource sharing
        # (CORS), see Fetch API Living
        # Standard.
        # Corresponds to the JSON property `corsPolicy`
        # @return [Google::Apis::ComputeV1::CorsPolicy]
        attr_accessor :cors_policy
      
        # The specification for fault injection introduced into traffic to test
        # the resiliency of clients to backend service failure. As part of fault
        # injection, when clients send requests to a backend service, delays can be
        # introduced by the load balancer on a percentage of requests before sending
        # those request to the backend service. Similarly requests from clients can be
        # aborted by the load balancer for a percentage of requests.
        # Corresponds to the JSON property `faultInjectionPolicy`
        # @return [Google::Apis::ComputeV1::HttpFaultInjection]
        attr_accessor :fault_injection_policy
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `maxStreamDuration`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :max_stream_duration
      
        # A policy that specifies how requests intended for the route's backends
        # are shadowed to a separate mirrored backend service. The load balancer
        # doesn't wait for responses from the shadow service. Before sending traffic
        # to the shadow service, the host or authority header is suffixed with-shadow.
        # Corresponds to the JSON property `requestMirrorPolicy`
        # @return [Google::Apis::ComputeV1::RequestMirrorPolicy]
        attr_accessor :request_mirror_policy
      
        # The retry policy associates with HttpRouteRule
        # Corresponds to the JSON property `retryPolicy`
        # @return [Google::Apis::ComputeV1::HttpRetryPolicy]
        attr_accessor :retry_policy
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `timeout`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :timeout
      
        # The spec for modifying the path before sending the request to the matched
        # backend service.
        # Corresponds to the JSON property `urlRewrite`
        # @return [Google::Apis::ComputeV1::UrlRewrite]
        attr_accessor :url_rewrite
      
        # A list of weighted backend services to send traffic to when a route match
        # occurs. The weights determine the fraction of traffic that flows to
        # their corresponding backend service. If all traffic needs to
        # go to a single backend service, there must be oneweightedBackendService with
        # weight set to a non-zero number.
        # After a backend service is identified and before forwarding
        # the request to
        # the backend service, advanced routing actions such as URL rewrites and
        # header transformations are applied depending on additional settings
        # specified in this HttpRouteAction.
        # Corresponds to the JSON property `weightedBackendServices`
        # @return [Array<Google::Apis::ComputeV1::WeightedBackendService>]
        attr_accessor :weighted_backend_services
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cors_policy = args[:cors_policy] if args.key?(:cors_policy)
          @fault_injection_policy = args[:fault_injection_policy] if args.key?(:fault_injection_policy)
          @max_stream_duration = args[:max_stream_duration] if args.key?(:max_stream_duration)
          @request_mirror_policy = args[:request_mirror_policy] if args.key?(:request_mirror_policy)
          @retry_policy = args[:retry_policy] if args.key?(:retry_policy)
          @timeout = args[:timeout] if args.key?(:timeout)
          @url_rewrite = args[:url_rewrite] if args.key?(:url_rewrite)
          @weighted_backend_services = args[:weighted_backend_services] if args.key?(:weighted_backend_services)
        end
      end
      
      # The HttpRouteRule setting specifies how to match an HTTP request
      # and the corresponding routing action that load balancing proxies perform.
      class HttpRouteRule
        include Google::Apis::Core::Hashable
      
        # Specifies the custom error response policy that must be applied when the
        # backend service or backend bucket responds with an error.
        # Corresponds to the JSON property `customErrorResponsePolicy`
        # @return [Google::Apis::ComputeV1::CustomErrorResponsePolicy]
        attr_accessor :custom_error_response_policy
      
        # The short description conveying the intent of this routeRule.
        # The description can have a maximum length of 1024 characters.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # The request and response header transformations that take effect before
        # the request is passed along to the selected backendService.
        # Corresponds to the JSON property `headerAction`
        # @return [Google::Apis::ComputeV1::HttpHeaderAction]
        attr_accessor :header_action
      
        # The list of criteria for matching attributes of a request to thisrouteRule.
        # This list has OR semantics: the request matches
        # this routeRule when any of thematchRules are satisfied. However predicates
        # within
        # a given matchRule have AND semantics. All predicates
        # within a matchRule must match for the request to
        # match the rule.
        # Corresponds to the JSON property `matchRules`
        # @return [Array<Google::Apis::ComputeV1::HttpRouteRuleMatch>]
        attr_accessor :match_rules
      
        # For routeRules within a given pathMatcher,
        # priority determines the order in which a load balancer interpretsrouteRules.
        # RouteRules are evaluated in order
        # of priority, from the lowest to highest number. The priority of a
        # rule decreases as its number increases (1, 2, 3, N+1). The first rule
        # that matches the request is applied.
        # You cannot configure two or more routeRules with the same priority.
        # Priority for each rule must be set to a number from 0 to 2147483647
        # inclusive.
        # Priority numbers can have gaps, which enable you to add or remove rules
        # in the future without affecting the rest of the rules. For example, 1, 2,
        # 3, 4, 5, 9, 12, 16 is a valid series of priority numbers to which you
        # could add rules numbered from 6 to 8, 10 to 11, and 13 to 15 in the future
        # without any impact on existing rules.
        # Corresponds to the JSON property `priority`
        # @return [Fixnum]
        attr_accessor :priority
      
        # In response to a matching matchRule, the load balancer
        # performs advanced routing actions, such as URL rewrites and header
        # transformations, before forwarding the request to the selected backend.
        # Only one of urlRedirect, service orrouteAction.weightedBackendService can be
        # set.
        # URL maps for classic Application Load Balancers only support
        # the urlRewrite action within a route rule'srouteAction.
        # Corresponds to the JSON property `routeAction`
        # @return [Google::Apis::ComputeV1::HttpRouteAction]
        attr_accessor :route_action
      
        # The full or partial URL of the backend service resource to which traffic
        # is directed if this rule is matched. If routeAction is
        # also specified, advanced routing actions, such as URL rewrites,
        # take effect before sending the request to the backend.
        # Only one of urlRedirect, service orrouteAction.weightedBackendService can be
        # set.
        # Corresponds to the JSON property `service`
        # @return [String]
        attr_accessor :service
      
        # Specifies settings for an HTTP redirect.
        # Corresponds to the JSON property `urlRedirect`
        # @return [Google::Apis::ComputeV1::HttpRedirectAction]
        attr_accessor :url_redirect
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_error_response_policy = args[:custom_error_response_policy] if args.key?(:custom_error_response_policy)
          @description = args[:description] if args.key?(:description)
          @header_action = args[:header_action] if args.key?(:header_action)
          @match_rules = args[:match_rules] if args.key?(:match_rules)
          @priority = args[:priority] if args.key?(:priority)
          @route_action = args[:route_action] if args.key?(:route_action)
          @service = args[:service] if args.key?(:service)
          @url_redirect = args[:url_redirect] if args.key?(:url_redirect)
        end
      end
      
      # HttpRouteRuleMatch specifies a set of criteria for matching
      # requests to an HttpRouteRule. All specified criteria must
      # be satisfied for a match to occur.
      class HttpRouteRuleMatch
        include Google::Apis::Core::Hashable
      
        # For satisfying the matchRule condition, the path of the
        # request must exactly match the value specified infullPathMatch after removing
        # any query parameters and anchor
        # that may be part of the original URL.
        # fullPathMatch must be from 1 to 1024 characters.
        # Only one of prefixMatch, fullPathMatch,regexMatch or path_template_match must
        # be
        # specified.
        # Corresponds to the JSON property `fullPathMatch`
        # @return [String]
        attr_accessor :full_path_match
      
        # Specifies a list of header match criteria, all of which must match
        # corresponding headers in the request.
        # Corresponds to the JSON property `headerMatches`
        # @return [Array<Google::Apis::ComputeV1::HttpHeaderMatch>]
        attr_accessor :header_matches
      
        # Specifies that prefixMatch and fullPathMatch
        # matches are case sensitive.
        # The default value is false.
        # ignoreCase must not be used with regexMatch.
        # Not supported when the URL map is bound to a target gRPC proxy.
        # Corresponds to the JSON property `ignoreCase`
        # @return [Boolean]
        attr_accessor :ignore_case
        alias_method :ignore_case?, :ignore_case
      
        # Opaque filter criteria used by the load balancer to restrict routing
        # configuration to a limited set of xDS
        # compliant clients. In their xDS requests to the load balancer, xDS clients
        # present node
        # metadata. When there is a match, the relevant routing configuration
        # is made available to those proxies.
        # For each metadataFilter in this list, if itsfilterMatchCriteria is set to
        # MATCH_ANY, at least one of thefilterLabels must match the corresponding label
        # provided in
        # the metadata. If its filterMatchCriteria is set to
        # MATCH_ALL, then all of its filterLabels must match with
        # corresponding labels provided in the metadata. If multiple
        # metadata filters are specified, all of them need to be
        # satisfied in order to be considered a match.
        # metadataFilters specified here is applied after those
        # specified in ForwardingRule that refers to theUrlMap this HttpRouteRuleMatch
        # belongs to.
        # metadataFilters only applies to load balancers that haveloadBalancingScheme
        # set toINTERNAL_SELF_MANAGED.
        # Not supported when the URL map is bound to a target gRPC proxy that
        # has validateForProxyless field set to true.
        # Corresponds to the JSON property `metadataFilters`
        # @return [Array<Google::Apis::ComputeV1::MetadataFilter>]
        attr_accessor :metadata_filters
      
        # If specified, this field defines a path template pattern that must match
        # the :path header after the query string is removed.
        # A path template pattern can include variables and wildcards.
        # Variables are enclosed in curly braces, for example`variable_name`. Wildcards
        # include * that
        # matches a single path segment, and ** that matches zero or
        # more path segments. The pattern must follow these rules:
        # 
        # - The value must be between 1 and 1024 characters.
        # - The pattern must start with a leading slash ("/").
        # - No more than 5 operators (variables or wildcards) may appear in
        # the pattern.
        # Precisely one ofprefixMatch, fullPathMatch,regexMatch, or pathTemplateMatch
        # must be
        # set.
        # Corresponds to the JSON property `pathTemplateMatch`
        # @return [String]
        attr_accessor :path_template_match
      
        # For satisfying the matchRule condition, the request's
        # path must begin with the specified prefixMatch.prefixMatch must begin with a /.
        # The value must be from 1 to 1024 characters.
        # The * character inside a prefix match is
        # treated as a literal character, not as a wildcard.
        # Only one of prefixMatch, fullPathMatch,regexMatch or path_template_match can
        # be
        # used within a matchRule.
        # Corresponds to the JSON property `prefixMatch`
        # @return [String]
        attr_accessor :prefix_match
      
        # Specifies a list of query parameter match criteria, all of which must
        # match corresponding query parameters in the request.
        # Not supported when the URL map is bound to a target gRPC proxy.
        # Corresponds to the JSON property `queryParameterMatches`
        # @return [Array<Google::Apis::ComputeV1::HttpQueryParameterMatch>]
        attr_accessor :query_parameter_matches
      
        # For satisfying the matchRule condition, the path of the
        # request must satisfy the regular expression specified inregexMatch after
        # removing any query parameters and anchor
        # supplied with the original URL. For
        # more information about regular expression syntax, see Syntax.
        # Only one of prefixMatch, fullPathMatch,regexMatch or path_template_match must
        # be
        # specified.
        # Regular expressions can only be used when the loadBalancingScheme is
        # set to INTERNAL_SELF_MANAGED, EXTERNAL_MANAGED
        # (regional scope) or INTERNAL_MANAGED.
        # Corresponds to the JSON property `regexMatch`
        # @return [String]
        attr_accessor :regex_match
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @full_path_match = args[:full_path_match] if args.key?(:full_path_match)
          @header_matches = args[:header_matches] if args.key?(:header_matches)
          @ignore_case = args[:ignore_case] if args.key?(:ignore_case)
          @metadata_filters = args[:metadata_filters] if args.key?(:metadata_filters)
          @path_template_match = args[:path_template_match] if args.key?(:path_template_match)
          @prefix_match = args[:prefix_match] if args.key?(:prefix_match)
          @query_parameter_matches = args[:query_parameter_matches] if args.key?(:query_parameter_matches)
          @regex_match = args[:regex_match] if args.key?(:regex_match)
        end
      end
      
      # Represents a legacy HTTPS Health Check resource.
      # Legacy HTTPS health checks have been deprecated. If you are using a target
      # pool-based network load balancer, you must use a legacy HTTP (not HTTPS)
      # health check. For all other load balancers, including backend service-based
      # network load balancers, and for managed instance group auto-healing, you must
      # use modern (non-legacy) health checks.
      # For more information, seeHealth checks
      # overview.
      class HttpsHealthCheck
        include Google::Apis::Core::Hashable
      
        # How often (in seconds) to send a health check. The default value is 5
        # seconds.
        # Corresponds to the JSON property `checkIntervalSec`
        # @return [Fixnum]
        attr_accessor :check_interval_sec
      
        # [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # A so-far unhealthy instance will be marked healthy after this
        # many consecutive successes. The default value is 2.
        # Corresponds to the JSON property `healthyThreshold`
        # @return [Fixnum]
        attr_accessor :healthy_threshold
      
        # The value of the host header in the HTTPS health check request. If left
        # empty (default value), the public IP on behalf of which this health check
        # is performed will be used.
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. Type of the resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The TCP port number for the HTTPS health check request. The default value
        # is 443.
        # Corresponds to the JSON property `port`
        # @return [Fixnum]
        attr_accessor :port
      
        # The request path of the HTTPS health check request. The default value is
        # "/". Must comply withRFC3986.
        # Corresponds to the JSON property `requestPath`
        # @return [String]
        attr_accessor :request_path
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # How long (in seconds) to wait before claiming failure. The default value is
        # 5 seconds. It is invalid for timeoutSec to have a greater value than
        # checkIntervalSec.
        # Corresponds to the JSON property `timeoutSec`
        # @return [Fixnum]
        attr_accessor :timeout_sec
      
        # A so-far healthy instance will be marked unhealthy after this
        # many consecutive failures. The default value is 2.
        # 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_sec = args[:check_interval_sec] if args.key?(:check_interval_sec)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @healthy_threshold = args[:healthy_threshold] if args.key?(:healthy_threshold)
          @host = args[:host] if args.key?(:host)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @port = args[:port] if args.key?(:port)
          @request_path = args[:request_path] if args.key?(:request_path)
          @self_link = args[:self_link] if args.key?(:self_link)
          @timeout_sec = args[:timeout_sec] if args.key?(:timeout_sec)
          @unhealthy_threshold = args[:unhealthy_threshold] if args.key?(:unhealthy_threshold)
        end
      end
      
      # Contains a list of HttpsHealthCheck resources.
      class HttpsHealthCheckList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of HttpsHealthCheck resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::HttpsHealthCheck>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::HttpsHealthCheckList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::HttpsHealthCheckList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents an Image resource.
      # You can use images to create boot disks for your VM instances.
      # For more information, read Images.
      class Image
        include Google::Apis::Core::Hashable
      
        # The architecture of the image. Valid values are
        # ARM64 or X86_64.
        # Corresponds to the JSON property `architecture`
        # @return [String]
        attr_accessor :architecture
      
        # Size of the image tar.gz archive stored in Google Cloud
        # Storage (in bytes).
        # Corresponds to the JSON property `archiveSizeBytes`
        # @return [Fixnum]
        attr_accessor :archive_size_bytes
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Deprecation status for a public resource.
        # Corresponds to the JSON property `deprecated`
        # @return [Google::Apis::ComputeV1::DeprecationStatus]
        attr_accessor :deprecated
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Size of the image when restored onto a persistent disk (in GB).
        # Corresponds to the JSON property `diskSizeGb`
        # @return [Fixnum]
        attr_accessor :disk_size_gb
      
        # Output only. Whether this image is created from a confidential compute mode
        # disk.
        # [Output Only]: This field is not set by user, but from source disk.
        # Corresponds to the JSON property `enableConfidentialCompute`
        # @return [Boolean]
        attr_accessor :enable_confidential_compute
        alias_method :enable_confidential_compute?, :enable_confidential_compute
      
        # The name of the image family to which this image belongs. The image
        # family name can be from a publicly managed image family provided by
        # Compute Engine, or from a custom image family you create. For example,centos-
        # stream-9 is a publicly available image family.
        # For more information, see Image
        # family best practices.
        # When creating disks, you can specify an image family instead of a specific
        # image name. The image family always returns its latest image that is not
        # deprecated. The name of the image family must comply with RFC1035.
        # Corresponds to the JSON property `family`
        # @return [String]
        attr_accessor :family
      
        # A list of features to enable on the guest operating system. Applicable
        # only for bootable images. To see a list of available options, see
        # theguestOSfeatures[].type parameter.
        # Corresponds to the JSON property `guestOsFeatures`
        # @return [Array<Google::Apis::ComputeV1::GuestOsFeature>]
        attr_accessor :guest_os_features
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Encrypts the image using acustomer-supplied
        # encryption key.
        # After you encrypt an image with a customer-supplied key, you must provide
        # the same key if you use the image later (e.g. to create a disk from
        # the image).
        # Customer-supplied encryption keys do not protect access to metadata
        # of the disk.
        # If you do not provide an encryption key when creating the image, then the
        # disk will be encrypted using an automatically generated key and you do not
        # need to provide a key to use the image later.
        # Corresponds to the JSON property `imageEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :image_encryption_key
      
        # Output only. [Output Only] Type of the resource. Always compute#image for
        # images.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this image, which is
        # essentially a hash of the labels used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve an image.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels to apply to this image. These can be later modified by
        # the setLabels method.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Integer license codes indicating which licenses are attached to this image.
        # Corresponds to the JSON property `licenseCodes`
        # @return [Array<Fixnum>]
        attr_accessor :license_codes
      
        # Any applicable license URI.
        # Corresponds to the JSON property `licenses`
        # @return [Array<String>]
        attr_accessor :licenses
      
        # Name of the resource; provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Additional image params.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::ImageParams]
        attr_accessor :params
      
        # The parameters of the raw disk image.
        # Corresponds to the JSON property `rawDisk`
        # @return [Google::Apis::ComputeV1::Image::RawDisk]
        attr_accessor :raw_disk
      
        # Output only. Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzi`
        # @return [Boolean]
        attr_accessor :satisfies_pzi
        alias_method :satisfies_pzi?, :satisfies_pzi
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Initial State for shielded instance,
        # these are public keys which are safe to store in public
        # Corresponds to the JSON property `shieldedInstanceInitialState`
        # @return [Google::Apis::ComputeV1::InitialStateConfig]
        attr_accessor :shielded_instance_initial_state
      
        # URL of the source disk used to create this image.
        # For example, the following are valid values:
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/disks/
        # disk
        # - projects/project/zones/zone/disks/disk
        # - zones/zone/disks/disk
        # In order to create an image, you must provide the full or partial URL of
        # one of the following:
        # 
        # - The rawDisk.source URL
        # - The sourceDisk URL
        # - The sourceImage URL
        # - The sourceSnapshot URL
        # Corresponds to the JSON property `sourceDisk`
        # @return [String]
        attr_accessor :source_disk
      
        # Thecustomer-supplied
        # encryption key of the source disk. Required if the source disk is
        # protected by a customer-supplied encryption key.
        # Corresponds to the JSON property `sourceDiskEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :source_disk_encryption_key
      
        # Output only. [Output Only]
        # The ID value of the disk used to create this image. This value may be used
        # to determine whether the image was taken from the current or a previous
        # instance of a given disk name.
        # Corresponds to the JSON property `sourceDiskId`
        # @return [String]
        attr_accessor :source_disk_id
      
        # URL of the source image used to create this image.
        # The following are valid formats for the URL:
        # 
        # - https://www.googleapis.com/compute/v1/projects/project_id/global/
        # images/image_name
        # - projects/project_id/global/images/image_name
        # In order to create an image, you must provide the full or partial URL of
        # one of the following:
        # 
        # - The rawDisk.source URL
        # - The sourceDisk URL
        # - The sourceImage URL
        # - The sourceSnapshot URL
        # Corresponds to the JSON property `sourceImage`
        # @return [String]
        attr_accessor :source_image
      
        # The customer-supplied encryption key of the source image. Required if the
        # source image is protected by a customer-supplied encryption key.
        # Corresponds to the JSON property `sourceImageEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :source_image_encryption_key
      
        # Output only. [Output Only]
        # The ID value of the image used to create this image. This value may be used
        # to determine whether the image was taken from the current or a previous
        # instance of a given image name.
        # Corresponds to the JSON property `sourceImageId`
        # @return [String]
        attr_accessor :source_image_id
      
        # URL of the source snapshot used to create this image.
        # The following are valid formats for the URL:
        # 
        # - https://www.googleapis.com/compute/v1/projects/project_id/global/
        # snapshots/snapshot_name
        # - projects/project_id/global/snapshots/snapshot_name
        # In order to create an image, you must provide the full or partial URL of
        # one of the following:
        # 
        # - The rawDisk.source URL
        # - The sourceDisk URL
        # - The sourceImage URL
        # - The sourceSnapshot URL
        # Corresponds to the JSON property `sourceSnapshot`
        # @return [String]
        attr_accessor :source_snapshot
      
        # The customer-supplied encryption key of the source snapshot. Required if
        # the source snapshot is protected by a customer-supplied encryption key.
        # Corresponds to the JSON property `sourceSnapshotEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :source_snapshot_encryption_key
      
        # Output only. [Output Only]
        # The ID value of the snapshot used to create this image. This value may be
        # used to determine whether the snapshot was taken from the current or a
        # previous instance of a given snapshot name.
        # Corresponds to the JSON property `sourceSnapshotId`
        # @return [String]
        attr_accessor :source_snapshot_id
      
        # The type of the image used to create this disk. The
        # default and only valid value is RAW.
        # Corresponds to the JSON property `sourceType`
        # @return [String]
        attr_accessor :source_type
      
        # Output only. [Output Only] The status of the image. An image can be used to
        # create other
        # resources, such as instances, only after the image has been successfully
        # created and the status is set to READY. Possible
        # values are FAILED, PENDING, orREADY.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Cloud Storage bucket storage location of the image (regional or
        # multi-regional).
        # Corresponds to the JSON property `storageLocations`
        # @return [Array<String>]
        attr_accessor :storage_locations
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @architecture = args[:architecture] if args.key?(:architecture)
          @archive_size_bytes = args[:archive_size_bytes] if args.key?(:archive_size_bytes)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @deprecated = args[:deprecated] if args.key?(:deprecated)
          @description = args[:description] if args.key?(:description)
          @disk_size_gb = args[:disk_size_gb] if args.key?(:disk_size_gb)
          @enable_confidential_compute = args[:enable_confidential_compute] if args.key?(:enable_confidential_compute)
          @family = args[:family] if args.key?(:family)
          @guest_os_features = args[:guest_os_features] if args.key?(:guest_os_features)
          @id = args[:id] if args.key?(:id)
          @image_encryption_key = args[:image_encryption_key] if args.key?(:image_encryption_key)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @license_codes = args[:license_codes] if args.key?(:license_codes)
          @licenses = args[:licenses] if args.key?(:licenses)
          @name = args[:name] if args.key?(:name)
          @params = args[:params] if args.key?(:params)
          @raw_disk = args[:raw_disk] if args.key?(:raw_disk)
          @satisfies_pzi = args[:satisfies_pzi] if args.key?(:satisfies_pzi)
          @satisfies_pzs = args[:satisfies_pzs] if args.key?(:satisfies_pzs)
          @self_link = args[:self_link] if args.key?(:self_link)
          @shielded_instance_initial_state = args[:shielded_instance_initial_state] if args.key?(:shielded_instance_initial_state)
          @source_disk = args[:source_disk] if args.key?(:source_disk)
          @source_disk_encryption_key = args[:source_disk_encryption_key] if args.key?(:source_disk_encryption_key)
          @source_disk_id = args[:source_disk_id] if args.key?(:source_disk_id)
          @source_image = args[:source_image] if args.key?(:source_image)
          @source_image_encryption_key = args[:source_image_encryption_key] if args.key?(:source_image_encryption_key)
          @source_image_id = args[:source_image_id] if args.key?(:source_image_id)
          @source_snapshot = args[:source_snapshot] if args.key?(:source_snapshot)
          @source_snapshot_encryption_key = args[:source_snapshot_encryption_key] if args.key?(:source_snapshot_encryption_key)
          @source_snapshot_id = args[:source_snapshot_id] if args.key?(:source_snapshot_id)
          @source_type = args[:source_type] if args.key?(:source_type)
          @status = args[:status] if args.key?(:status)
          @storage_locations = args[:storage_locations] if args.key?(:storage_locations)
        end
        
        # The parameters of the raw disk image.
        class RawDisk
          include Google::Apis::Core::Hashable
        
          # The format used to encode and transmit the block device, which should beTAR.
          # This is just a container and transmission format and not
          # a runtime format. Provided by the client when the disk image is created.
          # Corresponds to the JSON property `containerType`
          # @return [String]
          attr_accessor :container_type
        
          # [Deprecated] This field is deprecated.
          # An optional SHA1 checksum of the disk image before unpackaging provided
          # by the client when the disk image is created.
          # Corresponds to the JSON property `sha1Checksum`
          # @return [String]
          attr_accessor :sha1_checksum
        
          # The full Google Cloud Storage URL where the raw disk image archive is
          # stored.
          # The following are valid formats for the URL:
          # 
          # - https://storage.googleapis.com/bucket_name/image_archive_name
          # - https://storage.googleapis.com/bucket_name/folder_name/image_archive_name
          # In order to create an image, you must provide the full or partial URL of
          # one of the following:
          # 
          # - The rawDisk.source URL
          # - The sourceDisk URL
          # - The sourceImage URL
          # - The sourceSnapshot URL
          # Corresponds to the JSON property `source`
          # @return [String]
          attr_accessor :source
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @container_type = args[:container_type] if args.key?(:container_type)
            @sha1_checksum = args[:sha1_checksum] if args.key?(:sha1_checksum)
            @source = args[:source] if args.key?(:source)
          end
        end
      end
      
      # 
      class ImageFamilyView
        include Google::Apis::Core::Hashable
      
        # Represents an Image resource.
        # You can use images to create boot disks for your VM instances.
        # For more information, read Images.
        # Corresponds to the JSON property `image`
        # @return [Google::Apis::ComputeV1::Image]
        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
      
      # Contains a list of images.
      class ImageList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Image resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Image>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ImageList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ImageList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Additional image params.
      class ImageParams
        include Google::Apis::Core::Hashable
      
        # Resource manager tags to be bound to the image. Tag keys and values have
        # the same definition as resource
        # manager tags. Keys and values can be either in numeric format,
        # such as `tagKeys/`tag_key_id`` and `tagValues/456` or in namespaced
        # format such as ``org_id|project_id`/`tag_key_short_name`` and
        # ``tag_value_short_name``. The field is ignored (both PUT &
        # PATCH) when empty.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # Initial State for shielded instance,
      # these are public keys which are safe to store in public
      class InitialStateConfig
        include Google::Apis::Core::Hashable
      
        # The Key Database (db).
        # Corresponds to the JSON property `dbs`
        # @return [Array<Google::Apis::ComputeV1::FileContentBuffer>]
        attr_accessor :dbs
      
        # The forbidden key database (dbx).
        # Corresponds to the JSON property `dbxs`
        # @return [Array<Google::Apis::ComputeV1::FileContentBuffer>]
        attr_accessor :dbxs
      
        # The Key Exchange Key (KEK).
        # Corresponds to the JSON property `keks`
        # @return [Array<Google::Apis::ComputeV1::FileContentBuffer>]
        attr_accessor :keks
      
        # The Platform Key (PK).
        # Corresponds to the JSON property `pk`
        # @return [Google::Apis::ComputeV1::FileContentBuffer]
        attr_accessor :pk
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @dbs = args[:dbs] if args.key?(:dbs)
          @dbxs = args[:dbxs] if args.key?(:dbxs)
          @keks = args[:keks] if args.key?(:keks)
          @pk = args[:pk] if args.key?(:pk)
        end
      end
      
      # Represents an Instance resource.
      # An instance is a virtual machine that is hosted on Google Cloud Platform.
      # For more information, readVirtual Machine Instances.
      class Instance
        include Google::Apis::Core::Hashable
      
        # Specifies options for controlling advanced machine features.
        # Options that would traditionally be configured in a BIOS belong
        # here. Features that require operating system support may have
        # corresponding entries in the GuestOsFeatures of anImage (e.g., whether or not
        # the OS in theImage supports nested virtualization being enabled or
        # disabled).
        # Corresponds to the JSON property `advancedMachineFeatures`
        # @return [Google::Apis::ComputeV1::AdvancedMachineFeatures]
        attr_accessor :advanced_machine_features
      
        # Allows this instance to send and receive packets with non-matching
        # destination or source IPs. This is required if you plan to use this
        # instance to forward routes. For more information, seeEnabling IP Forwarding.
        # Corresponds to the JSON property `canIpForward`
        # @return [Boolean]
        attr_accessor :can_ip_forward
        alias_method :can_ip_forward?, :can_ip_forward
      
        # A set of Confidential Instance options.
        # Corresponds to the JSON property `confidentialInstanceConfig`
        # @return [Google::Apis::ComputeV1::ConfidentialInstanceConfig]
        attr_accessor :confidential_instance_config
      
        # Output only. [Output Only] The CPU platform used by this instance.
        # Corresponds to the JSON property `cpuPlatform`
        # @return [String]
        attr_accessor :cpu_platform
      
        # Output only. [Output Only] Creation timestamp inRFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Whether the resource should be protected against deletion.
        # Corresponds to the JSON property `deletionProtection`
        # @return [Boolean]
        attr_accessor :deletion_protection
        alias_method :deletion_protection?, :deletion_protection
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Array of disks associated with this instance. Persistent disks must be
        # created before you can assign them.
        # Corresponds to the JSON property `disks`
        # @return [Array<Google::Apis::ComputeV1::AttachedDisk>]
        attr_accessor :disks
      
        # A set of Display Device options
        # Corresponds to the JSON property `displayDevice`
        # @return [Google::Apis::ComputeV1::DisplayDevice]
        attr_accessor :display_device
      
        # Specifies a fingerprint for this resource, which is essentially a hash of
        # the instance's contents and used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update the instance. You must always provide an
        # up-to-date fingerprint hash in order to update the instance.
        # To see the latest fingerprint, make get() request to the
        # instance.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # A list of the type and count of accelerator cards attached to the instance.
        # Corresponds to the JSON property `guestAccelerators`
        # @return [Array<Google::Apis::ComputeV1::AcceleratorConfig>]
        attr_accessor :guest_accelerators
      
        # Specifies the hostname of the instance. The specified hostname must be
        # RFC1035 compliant. If hostname is not specified, the default hostname is
        # [INSTANCE_NAME].c.[PROJECT_ID].internal when using the global DNS, and
        # [INSTANCE_NAME].[ZONE].c.[PROJECT_ID].internal when using zonal DNS.
        # Corresponds to the JSON property `hostname`
        # @return [String]
        attr_accessor :hostname
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Encrypts suspended data for an instance with acustomer-managed
        # encryption key.
        # If you are creating a new instance, this field will encrypt the local SSD
        # and in-memory contents of the instance during the suspend operation.
        # If you do not provide an encryption key when creating the instance, then
        # the local SSD and in-memory contents will be encrypted using
        # an automatically generated key during the suspend operation.
        # Corresponds to the JSON property `instanceEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :instance_encryption_key
      
        # KeyRevocationActionType of the instance. Supported options are "STOP" and
        # "NONE". The default value is "NONE" if it is not specified.
        # Corresponds to the JSON property `keyRevocationActionType`
        # @return [String]
        attr_accessor :key_revocation_action_type
      
        # Output only. [Output Only] Type of the resource. Always compute#instance
        # for instances.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for this request, which is essentially a hash of
        # the label's contents and used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels.
        # To see the latest fingerprint, make get() request to the
        # instance.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels to apply to this instance. These can be later modified by
        # the setLabels method.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Output only. [Output Only] Last start timestamp inRFC3339 text format.
        # Corresponds to the JSON property `lastStartTimestamp`
        # @return [String]
        attr_accessor :last_start_timestamp
      
        # Output only. [Output Only] Last stop timestamp inRFC3339 text format.
        # Corresponds to the JSON property `lastStopTimestamp`
        # @return [String]
        attr_accessor :last_stop_timestamp
      
        # Output only. [Output Only] Last suspended timestamp inRFC3339 text format.
        # Corresponds to the JSON property `lastSuspendedTimestamp`
        # @return [String]
        attr_accessor :last_suspended_timestamp
      
        # Full or partial URL of the machine type resource to use for this instance,
        # in the format:zones/zone/machineTypes/machine-type. This is provided by the
        # client
        # when the instance is created. For example, the following is a valid partial
        # url to a predefined
        # machine type:
        # zones/us-central1-f/machineTypes/n1-standard-1
        # To create acustom
        # machine type, provide a URL to a machine type in the following format,
        # where CPUS is 1 or an even number up to 32 (2,
        # 4, 6, ... 24, etc), and MEMORY is the total
        # memory for this instance. Memory must be a multiple of 256 MB and must
        # be supplied in MB (e.g. 5 GB of memory is 5120 MB):
        # zones/zone/machineTypes/custom-CPUS-MEMORY
        # For example: zones/us-central1-f/machineTypes/custom-4-5120
        # For a full list of restrictions, read theSpecifications
        # for custom machine types.
        # Corresponds to the JSON property `machineType`
        # @return [String]
        attr_accessor :machine_type
      
        # A metadata key/value entry.
        # Corresponds to the JSON property `metadata`
        # @return [Google::Apis::ComputeV1::Metadata]
        attr_accessor :metadata
      
        # Specifies aminimum CPU
        # platform for the VM instance. Applicable values are the friendly names
        # of CPU platforms, such as minCpuPlatform: "Intel
        # Haswell" or minCpuPlatform: "Intel Sandy
        # Bridge".
        # Corresponds to the JSON property `minCpuPlatform`
        # @return [String]
        attr_accessor :min_cpu_platform
      
        # The name of the resource, provided by the client when initially creating
        # the resource. The resource name must be 1-63 characters long, and comply
        # withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # An array of network configurations for this instance. These specify how
        # interfaces are configured to interact with other network services, such as
        # connecting to the internet. Multiple interfaces are supported
        # per instance.
        # Corresponds to the JSON property `networkInterfaces`
        # @return [Array<Google::Apis::ComputeV1::NetworkInterface>]
        attr_accessor :network_interfaces
      
        # 
        # Corresponds to the JSON property `networkPerformanceConfig`
        # @return [Google::Apis::ComputeV1::NetworkPerformanceConfig]
        attr_accessor :network_performance_config
      
        # Additional instance params.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::InstanceParams]
        attr_accessor :params
      
        # The private IPv6 google access type for the VM.
        # If not specified, use  INHERIT_FROM_SUBNETWORK as default.
        # Corresponds to the JSON property `privateIpv6GoogleAccess`
        # @return [String]
        attr_accessor :private_ipv6_google_access
      
        # Specifies the reservations that this instance can consume from.
        # Corresponds to the JSON property `reservationAffinity`
        # @return [Google::Apis::ComputeV1::ReservationAffinity]
        attr_accessor :reservation_affinity
      
        # Resource policies applied to this instance.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Array<String>]
        attr_accessor :resource_policies
      
        # Contains output only fields.
        # Use this sub-message for actual values set on Instance attributes as compared
        # to the value requested by the user (intent) in their instance CRUD calls.
        # Corresponds to the JSON property `resourceStatus`
        # @return [Google::Apis::ComputeV1::ResourceStatus]
        attr_accessor :resource_status
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzi`
        # @return [Boolean]
        attr_accessor :satisfies_pzi
        alias_method :satisfies_pzi?, :satisfies_pzi
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # Sets the scheduling options for an Instance.
        # Corresponds to the JSON property `scheduling`
        # @return [Google::Apis::ComputeV1::Scheduling]
        attr_accessor :scheduling
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # A list of service accounts, with their specified scopes, authorized for
        # this instance. Only one service account per VM instance is supported.
        # Service accounts generate access tokens that can be accessed
        # through the metadata server and used to authenticate applications on the
        # instance. SeeService Accounts
        # for more information.
        # Corresponds to the JSON property `serviceAccounts`
        # @return [Array<Google::Apis::ComputeV1::ServiceAccount>]
        attr_accessor :service_accounts
      
        # A set of Shielded Instance options.
        # Corresponds to the JSON property `shieldedInstanceConfig`
        # @return [Google::Apis::ComputeV1::ShieldedInstanceConfig]
        attr_accessor :shielded_instance_config
      
        # The policy describes the baseline against which
        # Instance boot integrity is measured.
        # Corresponds to the JSON property `shieldedInstanceIntegrityPolicy`
        # @return [Google::Apis::ComputeV1::ShieldedInstanceIntegrityPolicy]
        attr_accessor :shielded_instance_integrity_policy
      
        # Source machine image
        # Corresponds to the JSON property `sourceMachineImage`
        # @return [String]
        attr_accessor :source_machine_image
      
        # Source machine image encryption key when creating an instance from a
        # machine image.
        # Corresponds to the JSON property `sourceMachineImageEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :source_machine_image_encryption_key
      
        # Output only. [Output Only] Whether a VM has been restricted for start because
        # Compute
        # Engine has detected suspicious activity.
        # Corresponds to the JSON property `startRestricted`
        # @return [Boolean]
        attr_accessor :start_restricted
        alias_method :start_restricted?, :start_restricted
      
        # Output only. [Output Only] The status of the instance. One of the
        # following values: PROVISIONING, STAGING,RUNNING, STOPPING, SUSPENDING,
        # SUSPENDED, REPAIRING, andTERMINATED. For more information about the status of
        # the
        # instance, see
        # Instance life cycle.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Output only. [Output Only] An optional, human-readable explanation of the
        # status.
        # Corresponds to the JSON property `statusMessage`
        # @return [String]
        attr_accessor :status_message
      
        # A set of instance tags.
        # Corresponds to the JSON property `tags`
        # @return [Google::Apis::ComputeV1::Tags]
        attr_accessor :tags
      
        # Output only. [Output Only] URL of the zone where the instance resides.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advanced_machine_features = args[:advanced_machine_features] if args.key?(:advanced_machine_features)
          @can_ip_forward = args[:can_ip_forward] if args.key?(:can_ip_forward)
          @confidential_instance_config = args[:confidential_instance_config] if args.key?(:confidential_instance_config)
          @cpu_platform = args[:cpu_platform] if args.key?(:cpu_platform)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @deletion_protection = args[:deletion_protection] if args.key?(:deletion_protection)
          @description = args[:description] if args.key?(:description)
          @disks = args[:disks] if args.key?(:disks)
          @display_device = args[:display_device] if args.key?(:display_device)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @guest_accelerators = args[:guest_accelerators] if args.key?(:guest_accelerators)
          @hostname = args[:hostname] if args.key?(:hostname)
          @id = args[:id] if args.key?(:id)
          @instance_encryption_key = args[:instance_encryption_key] if args.key?(:instance_encryption_key)
          @key_revocation_action_type = args[:key_revocation_action_type] if args.key?(:key_revocation_action_type)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @last_start_timestamp = args[:last_start_timestamp] if args.key?(:last_start_timestamp)
          @last_stop_timestamp = args[:last_stop_timestamp] if args.key?(:last_stop_timestamp)
          @last_suspended_timestamp = args[:last_suspended_timestamp] if args.key?(:last_suspended_timestamp)
          @machine_type = args[:machine_type] if args.key?(:machine_type)
          @metadata = args[:metadata] if args.key?(:metadata)
          @min_cpu_platform = args[:min_cpu_platform] if args.key?(:min_cpu_platform)
          @name = args[:name] if args.key?(:name)
          @network_interfaces = args[:network_interfaces] if args.key?(:network_interfaces)
          @network_performance_config = args[:network_performance_config] if args.key?(:network_performance_config)
          @params = args[:params] if args.key?(:params)
          @private_ipv6_google_access = args[:private_ipv6_google_access] if args.key?(:private_ipv6_google_access)
          @reservation_affinity = args[:reservation_affinity] if args.key?(:reservation_affinity)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
          @resource_status = args[:resource_status] if args.key?(:resource_status)
          @satisfies_pzi = args[:satisfies_pzi] if args.key?(:satisfies_pzi)
          @satisfies_pzs = args[:satisfies_pzs] if args.key?(:satisfies_pzs)
          @scheduling = args[:scheduling] if args.key?(:scheduling)
          @self_link = args[:self_link] if args.key?(:self_link)
          @service_accounts = args[:service_accounts] if args.key?(:service_accounts)
          @shielded_instance_config = args[:shielded_instance_config] if args.key?(:shielded_instance_config)
          @shielded_instance_integrity_policy = args[:shielded_instance_integrity_policy] if args.key?(:shielded_instance_integrity_policy)
          @source_machine_image = args[:source_machine_image] if args.key?(:source_machine_image)
          @source_machine_image_encryption_key = args[:source_machine_image_encryption_key] if args.key?(:source_machine_image_encryption_key)
          @start_restricted = args[:start_restricted] if args.key?(:start_restricted)
          @status = args[:status] if args.key?(:status)
          @status_message = args[:status_message] if args.key?(:status_message)
          @tags = args[:tags] if args.key?(:tags)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class InstanceAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # An object that contains a list of instances scoped by zone.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::InstancesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # instanceAggregatedList for aggregated lists of
        # Instance resources.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InstanceConsumptionData
        include Google::Apis::Core::Hashable
      
        # Output only. Resources consumed by the instance.
        # Corresponds to the JSON property `consumptionInfo`
        # @return [Google::Apis::ComputeV1::InstanceConsumptionInfo]
        attr_accessor :consumption_info
      
        # Output only. Server-defined URL for the instance.
        # Corresponds to the JSON property `instance`
        # @return [String]
        attr_accessor :instance
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @consumption_info = args[:consumption_info] if args.key?(:consumption_info)
          @instance = args[:instance] if args.key?(:instance)
        end
      end
      
      # 
      class InstanceConsumptionInfo
        include Google::Apis::Core::Hashable
      
        # Output only. The number of virtual CPUs that are available to the instance.
        # Corresponds to the JSON property `guestCpus`
        # @return [Fixnum]
        attr_accessor :guest_cpus
      
        # Output only. The amount of local SSD storage available to the instance,
        # defined in GiB.
        # Corresponds to the JSON property `localSsdGb`
        # @return [Fixnum]
        attr_accessor :local_ssd_gb
      
        # Output only. The amount of physical memory available to the instance,
        # defined in MiB.
        # Corresponds to the JSON property `memoryMb`
        # @return [Fixnum]
        attr_accessor :memory_mb
      
        # Output only. The minimal guaranteed number of virtual CPUs that are reserved.
        # Corresponds to the JSON property `minNodeCpus`
        # @return [Fixnum]
        attr_accessor :min_node_cpus
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @guest_cpus = args[:guest_cpus] if args.key?(:guest_cpus)
          @local_ssd_gb = args[:local_ssd_gb] if args.key?(:local_ssd_gb)
          @memory_mb = args[:memory_mb] if args.key?(:memory_mb)
          @min_node_cpus = args[:min_node_cpus] if args.key?(:min_node_cpus)
        end
      end
      
      # A flexible specification of machine types for instances to create.
      class InstanceFlexibilityPolicy
        include Google::Apis::Core::Hashable
      
        # Specification of alternative, flexible instance subsets.
        # One of them will be selected to create the instances
        # based on various criteria, like:
        # - ranks,
        # - location policy,
        # - current capacity,
        # - available reservations (you can specify affinity in
        # InstanceProperties),
        # - SWAN/GOOSE limitations.
        # Key is an arbitrary, unique RFC1035 string that identifies the instance
        # selection.
        # Corresponds to the JSON property `instanceSelections`
        # @return [Hash<String,Google::Apis::ComputeV1::InstanceFlexibilityPolicyInstanceSelection>]
        attr_accessor :instance_selections
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_selections = args[:instance_selections] if args.key?(:instance_selections)
        end
      end
      
      # Specification of machine type to use. Every position inside this message
      # is an alternative.
      # The count specified in the shape flexibility must not exceed the number
      # of entries in per_instance_properties or the capacity of the
      # name_pattern, if used.
      class InstanceFlexibilityPolicyInstanceSelection
        include Google::Apis::Core::Hashable
      
        # Disks to be attached to the instances created from in this selection.
        # They override the disks specified in the instance properties.
        # Corresponds to the JSON property `disks`
        # @return [Array<Google::Apis::ComputeV1::AttachedDisk>]
        attr_accessor :disks
      
        # Alternative machine types to use for instances that are created from
        # these properties. This field only accepts a machine type names, for
        # example `n2-standard-4` and not URLs or partial URLs.
        # Corresponds to the JSON property `machineTypes`
        # @return [Array<String>]
        attr_accessor :machine_types
      
        # Rank when prioritizing the shape flexibilities.
        # The instance selections with rank are considered
        # first, in the ascending order of the rank.
        # If not set, defaults to 0.
        # Corresponds to the JSON property `rank`
        # @return [Fixnum]
        attr_accessor :rank
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disks = args[:disks] if args.key?(:disks)
          @machine_types = args[:machine_types] if args.key?(:machine_types)
          @rank = args[:rank] if args.key?(:rank)
        end
      end
      
      # Represents an Instance Group resource.
      # Instance Groups can be used to configure a target forload
      # balancing.
      # Instance groups can either be managed or unmanaged.
      # To create
      # managed instance groups, use the instanceGroupManager
      # orregionInstanceGroupManager resource instead.
      # Use zonal unmanaged instance groups if you need to applyload
      # balancing to groups of heterogeneous instances or if you need to manage
      # the instances yourself. You cannot create regional unmanaged instance groups.
      # For more information, readInstance
      # groups.
      class InstanceGroup
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The creation timestamp for this instance group
        # inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] The fingerprint of the named ports. The system
        # uses this fingerprint to detect conflicts when multiple users change the
        # named ports concurrently.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Output only. [Output Only] A unique identifier for this instance group,
        # generated
        # by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # instanceGroup for instance groups.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The name of the instance group. The name must be 1-63 characters
        # long, and comply withRFC1035.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Optional. Assigns a name to a port number. For example:`name: "http", port: 80`
        # This
        # allows the system to reference ports by the assigned name instead of a
        # port number. Named ports can also contain multiple ports. For example:[`name: "
        # app1", port: 8080`, `name:
        # "app1", port: 8081`, `name: "app2", port:
        # 8082`]
        # Named ports apply to all instances in this instance group.
        # Corresponds to the JSON property `namedPorts`
        # @return [Array<Google::Apis::ComputeV1::NamedPort>]
        attr_accessor :named_ports
      
        # [Output Only] The URL of the network to which all instances in the
        # instance group belong. If your instance has multiple network interfaces,
        # then the network and subnetwork fields only refer to the
        # network and subnet used by your primary interface (nic0).
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # Output only. [Output Only] The URL of theregion
        # where the instance group is located (for regional resources).
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] The URL for this instance group. The server
        # generates
        # this URL.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] The total number of instances in the instance group.
        # Corresponds to the JSON property `size`
        # @return [Fixnum]
        attr_accessor :size
      
        # Output only. [Output Only] The URL of the subnetwork to which all instances in
        # the
        # instance group belong. If your instance has multiple network interfaces,
        # then the network and subnetwork fields only refer to the
        # network and subnet used by your primary interface (nic0).
        # Corresponds to the JSON property `subnetwork`
        # @return [String]
        attr_accessor :subnetwork
      
        # Output only. [Output Only] The URL of thezone
        # where the instance group is located (for zonal resources).
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @named_ports = args[:named_ports] if args.key?(:named_ports)
          @network = args[:network] if args.key?(:network)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @size = args[:size] if args.key?(:size)
          @subnetwork = args[:subnetwork] if args.key?(:subnetwork)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class InstanceGroupAggregatedList
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the resource; defined by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InstanceGroupsScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::InstanceGroupsScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # instanceGroupAggregatedList for aggregated lists of
        # instance groups.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # Output only. [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceGroupAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceGroupAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # A list of InstanceGroup resources.
      class InstanceGroupList
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the resource; defined by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InstanceGroup resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InstanceGroup>]
        attr_accessor :items
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # instanceGroupList for instance group lists.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceGroupList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceGroupList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a Managed Instance Group resource.
      # An instance group is a collection of VM instances that you can manage as a
      # single entity. For more information, readInstance groups.
      # For zonal Managed Instance Group, use the instanceGroupManagers
      # resource.
      # For regional Managed Instance Group, use theregionInstanceGroupManagers
      # resource.
      class InstanceGroupManager
        include Google::Apis::Core::Hashable
      
        # Specifies configuration that overrides the instance template configuration
        # for the group.
        # Corresponds to the JSON property `allInstancesConfig`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerAllInstancesConfig]
        attr_accessor :all_instances_config
      
        # The autohealing policy for this managed instance group. You can specify
        # only one value.
        # Corresponds to the JSON property `autoHealingPolicies`
        # @return [Array<Google::Apis::ComputeV1::InstanceGroupManagerAutoHealingPolicy>]
        attr_accessor :auto_healing_policies
      
        # The base instance name is a prefix that you want to attach to the names of
        # all VMs in a MIG. The maximum character length is 58 and the name must
        # comply with RFC1035 format.
        # When a VM is created in the group, the MIG appends a hyphen and a random
        # four-character string to the base instance name. If you want the MIG to
        # assign sequential numbers instead of a random string, then end the base
        # instance name with a hyphen followed by one or more hash symbols. The hash
        # symbols indicate the number of digits. For example, a base instance name of
        # "vm-###" results in "vm-001" as a VM name.
        # @pattern
        # [a-z](([-a-z0-9]`0,57`)|([-a-z0-9]`0,51`-#`1,10`(\\[[0-9]`1,10`\\])?))
        # Corresponds to the JSON property `baseInstanceName`
        # @return [String]
        attr_accessor :base_instance_name
      
        # Output only. [Output Only] The creation timestamp for this managed instance
        # group inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Output only. [Output Only] The list of instance actions and the number of
        # instances
        # in this managed instance group that are scheduled for each of those
        # actions.
        # Corresponds to the JSON property `currentActions`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerActionsSummary]
        attr_accessor :current_actions
      
        # An optional description of this resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Policy specifying the intended distribution of managed instances across
        # zones in a regional managed instance group.
        # Corresponds to the JSON property `distributionPolicy`
        # @return [Google::Apis::ComputeV1::DistributionPolicy]
        attr_accessor :distribution_policy
      
        # Fingerprint of this resource. This field may be used in optimistic locking.
        # It will be ignored when inserting an InstanceGroupManager. An up-to-date
        # fingerprint must be provided in order to update the InstanceGroupManager,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve an InstanceGroupManager.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Output only. [Output Only] A unique identifier for this resource type. The
        # server
        # generates this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Instance flexibility allowing MIG to create VMs from multiple
        # types of machines.
        # Instance flexibility configuration on MIG overrides instance
        # template configuration.
        # Corresponds to the JSON property `instanceFlexibilityPolicy`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerInstanceFlexibilityPolicy]
        attr_accessor :instance_flexibility_policy
      
        # Output only. [Output Only] The URL of the Instance Group resource.
        # Corresponds to the JSON property `instanceGroup`
        # @return [String]
        attr_accessor :instance_group
      
        # The repair policy for this managed instance group.
        # Corresponds to the JSON property `instanceLifecyclePolicy`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerInstanceLifecyclePolicy]
        attr_accessor :instance_lifecycle_policy
      
        # The URL of the instance template that is specified for this managed
        # instance group. The group uses this template to create all new instances
        # in the managed instance group. The templates for existing instances in the
        # group do not change unless you run recreateInstances,
        # runapplyUpdatesToInstances, or set the group'supdatePolicy.type to PROACTIVE.
        # Corresponds to the JSON property `instanceTemplate`
        # @return [String]
        attr_accessor :instance_template
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # instanceGroupManager for managed instance groups.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Pagination behavior of the listManagedInstances API method for
        # this managed instance group.
        # Corresponds to the JSON property `listManagedInstancesResults`
        # @return [String]
        attr_accessor :list_managed_instances_results
      
        # The name of the managed instance group. The name must be 1-63 characters
        # long, and comply withRFC1035.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # [Output Only] Named ports configured on the Instance Groups complementary
        # to this Instance Group Manager.
        # Corresponds to the JSON property `namedPorts`
        # @return [Array<Google::Apis::ComputeV1::NamedPort>]
        attr_accessor :named_ports
      
        # Output only. [Output Only] The URL of theregion
        # where the managed instance group resides (for regional resources).
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Resource policies for this managed instance group.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerResourcePolicies]
        attr_accessor :resource_policies
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzi`
        # @return [Boolean]
        attr_accessor :satisfies_pzi
        alias_method :satisfies_pzi?, :satisfies_pzi
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # Output only. [Output Only] The URL for this managed instance group. The server
        # defines
        # this URL.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Standby policy for stopped and suspended instances.
        # Corresponds to the JSON property `standbyPolicy`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerStandbyPolicy]
        attr_accessor :standby_policy
      
        # Stateful configuration for this Instanced Group Manager
        # Corresponds to the JSON property `statefulPolicy`
        # @return [Google::Apis::ComputeV1::StatefulPolicy]
        attr_accessor :stateful_policy
      
        # Output only. [Output Only] The status of this managed instance group.
        # Corresponds to the JSON property `status`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerStatus]
        attr_accessor :status
      
        # The URLs for all TargetPool resources to which instances in theinstanceGroup
        # field are added. The target pools automatically
        # apply to all of the instances in the managed instance group.
        # Corresponds to the JSON property `targetPools`
        # @return [Array<String>]
        attr_accessor :target_pools
      
        # The target number of running instances for this managed instance group.
        # You can reduce this number by using the instanceGroupManager
        # deleteInstances or abandonInstances methods. Resizing the group also
        # changes this number.
        # Corresponds to the JSON property `targetSize`
        # @return [Fixnum]
        attr_accessor :target_size
      
        # The target number of stopped instances for this managed instance group.
        # This number changes when you:
        # 
        # - Stop instance using the stopInstances
        # method or start instances using the startInstances
        # method.
        # - Manually change the targetStoppedSize using the update
        # method.
        # Corresponds to the JSON property `targetStoppedSize`
        # @return [Fixnum]
        attr_accessor :target_stopped_size
      
        # The target number of suspended instances for this managed instance group.
        # This number changes when you:
        # 
        # - Suspend instance using the suspendInstances
        # method or resume instances using the resumeInstances
        # method.
        # - Manually change the targetSuspendedSize using the update
        # method.
        # Corresponds to the JSON property `targetSuspendedSize`
        # @return [Fixnum]
        attr_accessor :target_suspended_size
      
        # The update policy for this managed instance group.
        # Corresponds to the JSON property `updatePolicy`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerUpdatePolicy]
        attr_accessor :update_policy
      
        # Specifies the instance templates used by this managed instance group to
        # create instances.
        # Each version is defined by an instanceTemplate and aname. Every version can
        # appear at most once per instance
        # group. This field overrides the top-level instanceTemplate
        # field. Read more about therelationships
        # between these fields. Exactly one version must leave thetargetSize field unset.
        # That version will be applied to all
        # remaining instances. For more information, read aboutcanary
        # updates.
        # Corresponds to the JSON property `versions`
        # @return [Array<Google::Apis::ComputeV1::InstanceGroupManagerVersion>]
        attr_accessor :versions
      
        # Output only. [Output Only] The URL of azone
        # where the managed instance group is located (for zonal resources).
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @all_instances_config = args[:all_instances_config] if args.key?(:all_instances_config)
          @auto_healing_policies = args[:auto_healing_policies] if args.key?(:auto_healing_policies)
          @base_instance_name = args[:base_instance_name] if args.key?(:base_instance_name)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @current_actions = args[:current_actions] if args.key?(:current_actions)
          @description = args[:description] if args.key?(:description)
          @distribution_policy = args[:distribution_policy] if args.key?(:distribution_policy)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @id = args[:id] if args.key?(:id)
          @instance_flexibility_policy = args[:instance_flexibility_policy] if args.key?(:instance_flexibility_policy)
          @instance_group = args[:instance_group] if args.key?(:instance_group)
          @instance_lifecycle_policy = args[:instance_lifecycle_policy] if args.key?(:instance_lifecycle_policy)
          @instance_template = args[:instance_template] if args.key?(:instance_template)
          @kind = args[:kind] if args.key?(:kind)
          @list_managed_instances_results = args[:list_managed_instances_results] if args.key?(:list_managed_instances_results)
          @name = args[:name] if args.key?(:name)
          @named_ports = args[:named_ports] if args.key?(:named_ports)
          @region = args[:region] if args.key?(:region)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
          @satisfies_pzi = args[:satisfies_pzi] if args.key?(:satisfies_pzi)
          @satisfies_pzs = args[:satisfies_pzs] if args.key?(:satisfies_pzs)
          @self_link = args[:self_link] if args.key?(:self_link)
          @standby_policy = args[:standby_policy] if args.key?(:standby_policy)
          @stateful_policy = args[:stateful_policy] if args.key?(:stateful_policy)
          @status = args[:status] if args.key?(:status)
          @target_pools = args[:target_pools] if args.key?(:target_pools)
          @target_size = args[:target_size] if args.key?(:target_size)
          @target_stopped_size = args[:target_stopped_size] if args.key?(:target_stopped_size)
          @target_suspended_size = args[:target_suspended_size] if args.key?(:target_suspended_size)
          @update_policy = args[:update_policy] if args.key?(:update_policy)
          @versions = args[:versions] if args.key?(:versions)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class InstanceGroupManagerActionsSummary
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The total number of instances in the managed
        # instance group
        # that are scheduled to be abandoned. Abandoning an instance removes it
        # from the managed instance group without deleting it.
        # Corresponds to the JSON property `abandoning`
        # @return [Fixnum]
        attr_accessor :abandoning
      
        # Output only. [Output Only] The number of instances in the managed instance
        # group that
        # are scheduled to be created or are currently being created. If the group
        # fails to create any of these instances, it tries again until it creates
        # the instance successfully.
        # If you have disabled creation retries, this field will not be populated;
        # instead, the creatingWithoutRetries field will be populated.
        # Corresponds to the JSON property `creating`
        # @return [Fixnum]
        attr_accessor :creating
      
        # Output only. [Output Only] The number of instances that the managed instance
        # group
        # will attempt to create. The group attempts to create each instance
        # only once. If the group fails to create any of these instances, it
        # decreases the group's targetSize value accordingly.
        # Corresponds to the JSON property `creatingWithoutRetries`
        # @return [Fixnum]
        attr_accessor :creating_without_retries
      
        # Output only. [Output Only] The number of instances in the managed instance
        # group that
        # are scheduled to be deleted or are currently being deleted.
        # Corresponds to the JSON property `deleting`
        # @return [Fixnum]
        attr_accessor :deleting
      
        # Output only. [Output Only] The number of instances in the managed instance
        # group that
        # are running and have no scheduled actions.
        # Corresponds to the JSON property `none`
        # @return [Fixnum]
        attr_accessor :none
      
        # Output only. [Output Only] The number of instances in the managed instance
        # group that
        # are scheduled to be recreated or are currently being being recreated.
        # Recreating an instance deletes the existing root persistent disk
        # and creates a new disk from the image that is defined in the
        # instance template.
        # Corresponds to the JSON property `recreating`
        # @return [Fixnum]
        attr_accessor :recreating
      
        # Output only. [Output Only] The number of instances in the managed instance
        # group that
        # are being reconfigured with properties that do not require a restart
        # or a recreate action. For example, setting or removing target
        # pools for the instance.
        # Corresponds to the JSON property `refreshing`
        # @return [Fixnum]
        attr_accessor :refreshing
      
        # Output only. [Output Only] The number of instances in the managed instance
        # group that
        # are scheduled to be restarted or are currently being restarted.
        # Corresponds to the JSON property `restarting`
        # @return [Fixnum]
        attr_accessor :restarting
      
        # Output only. [Output Only] The number of instances in the managed instance
        # group that
        # are scheduled to be resumed or are currently being resumed.
        # Corresponds to the JSON property `resuming`
        # @return [Fixnum]
        attr_accessor :resuming
      
        # Output only. [Output Only] The number of instances in the managed instance
        # group that
        # are scheduled to be started or are currently being started.
        # Corresponds to the JSON property `starting`
        # @return [Fixnum]
        attr_accessor :starting
      
        # Output only. [Output Only] The number of instances in the managed instance
        # group that
        # are scheduled to be stopped or are currently being stopped.
        # Corresponds to the JSON property `stopping`
        # @return [Fixnum]
        attr_accessor :stopping
      
        # Output only. [Output Only] The number of instances in the managed instance
        # group that
        # are scheduled to be suspended or are currently being suspended.
        # Corresponds to the JSON property `suspending`
        # @return [Fixnum]
        attr_accessor :suspending
      
        # Output only. [Output Only] The number of instances in the managed instance
        # group that
        # are being verified. See the managedInstances[].currentAction
        # property in the listManagedInstances method documentation.
        # Corresponds to the JSON property `verifying`
        # @return [Fixnum]
        attr_accessor :verifying
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @abandoning = args[:abandoning] if args.key?(:abandoning)
          @creating = args[:creating] if args.key?(:creating)
          @creating_without_retries = args[:creating_without_retries] if args.key?(:creating_without_retries)
          @deleting = args[:deleting] if args.key?(:deleting)
          @none = args[:none] if args.key?(:none)
          @recreating = args[:recreating] if args.key?(:recreating)
          @refreshing = args[:refreshing] if args.key?(:refreshing)
          @restarting = args[:restarting] if args.key?(:restarting)
          @resuming = args[:resuming] if args.key?(:resuming)
          @starting = args[:starting] if args.key?(:starting)
          @stopping = args[:stopping] if args.key?(:stopping)
          @suspending = args[:suspending] if args.key?(:suspending)
          @verifying = args[:verifying] if args.key?(:verifying)
        end
      end
      
      # 
      class InstanceGroupManagerAggregatedList
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the resource; defined by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InstanceGroupManagersScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::InstanceGroupManagersScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # instanceGroupManagerAggregatedList for an aggregated
        # list of managed instance groups.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # Output only. [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceGroupManagerAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InstanceGroupManagerAllInstancesConfig
        include Google::Apis::Core::Hashable
      
        # Represents the change that you want to make to the instance properties.
        # Corresponds to the JSON property `properties`
        # @return [Google::Apis::ComputeV1::InstancePropertiesPatch]
        attr_accessor :properties
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @properties = args[:properties] if args.key?(:properties)
        end
      end
      
      # 
      class InstanceGroupManagerAutoHealingPolicy
        include Google::Apis::Core::Hashable
      
        # The URL for the health check that signals autohealing.
        # Corresponds to the JSON property `healthCheck`
        # @return [String]
        attr_accessor :health_check
      
        # The initial delay is the number of seconds that a new VM takes to
        # initialize and run its startup script. During a VM's initial delay
        # period, the MIG ignores unsuccessful health checks because the VM might
        # be in the startup process. This prevents the MIG from prematurely
        # recreating a VM. If the health check receives a healthy response during
        # the initial delay, it indicates that the startup process is complete and
        # the VM is ready. The value of initial delay must be between 0 and 3600
        # seconds. The default value is 0.
        # Corresponds to the JSON property `initialDelaySec`
        # @return [Fixnum]
        attr_accessor :initial_delay_sec
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @health_check = args[:health_check] if args.key?(:health_check)
          @initial_delay_sec = args[:initial_delay_sec] if args.key?(:initial_delay_sec)
        end
      end
      
      # 
      class InstanceGroupManagerInstanceFlexibilityPolicy
        include Google::Apis::Core::Hashable
      
        # Named instance selections configuring properties that the group will use
        # when creating new VMs.
        # Corresponds to the JSON property `instanceSelections`
        # @return [Hash<String,Google::Apis::ComputeV1::InstanceGroupManagerInstanceFlexibilityPolicyInstanceSelection>]
        attr_accessor :instance_selections
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_selections = args[:instance_selections] if args.key?(:instance_selections)
        end
      end
      
      # 
      class InstanceGroupManagerInstanceFlexibilityPolicyInstanceSelection
        include Google::Apis::Core::Hashable
      
        # Full machine-type names, e.g. "n1-standard-16".
        # Corresponds to the JSON property `machineTypes`
        # @return [Array<String>]
        attr_accessor :machine_types
      
        # Preference of this instance selection. Lower number means higher
        # preference. MIG will first try to create a VM based on the machine-type
        # with lowest rank and fallback to next rank based on availability.
        # Machine types and instance selections with the same rank have the same
        # preference.
        # Corresponds to the JSON property `rank`
        # @return [Fixnum]
        attr_accessor :rank
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @machine_types = args[:machine_types] if args.key?(:machine_types)
          @rank = args[:rank] if args.key?(:rank)
        end
      end
      
      # 
      class InstanceGroupManagerInstanceLifecyclePolicy
        include Google::Apis::Core::Hashable
      
        # The action that a MIG performs on a failed or an unhealthy VM.
        # A VM is marked as unhealthy when the application running on that
        # VM fails a health check.
        # Valid values are
        # 
        # - REPAIR (default): MIG automatically repairs a failed or
        # an unhealthy VM by recreating it. For more information, see About
        # repairing VMs in a MIG.
        # - DO_NOTHING: MIG does not repair a failed or an unhealthy
        # VM.
        # Corresponds to the JSON property `defaultActionOnFailure`
        # @return [String]
        attr_accessor :default_action_on_failure
      
        # A bit indicating whether to forcefully apply the group's latest
        # configuration when repairing a VM. Valid options are:
        # 
        # 
        # -  NO (default): If configuration updates are available, they are not
        # forcefully applied during repair. Instead, configuration updates are
        # applied according to the group's update policy.
        # 
        # -  YES: If configuration updates are available, they are applied
        # during repair.
        # Corresponds to the JSON property `forceUpdateOnRepair`
        # @return [String]
        attr_accessor :force_update_on_repair
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @default_action_on_failure = args[:default_action_on_failure] if args.key?(:default_action_on_failure)
          @force_update_on_repair = args[:force_update_on_repair] if args.key?(:force_update_on_repair)
        end
      end
      
      # [Output Only] A list of managed instance groups.
      class InstanceGroupManagerList
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the resource; defined by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InstanceGroupManager resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InstanceGroupManager>]
        attr_accessor :items
      
        # Output only. [Output Only] The resource type, which is always
        # compute#instanceGroupManagerList for a list of managed instance groups.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceGroupManagerList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # InstanceGroupManagerResizeRequest represents a request to create
      # a number of VMs: either immediately or by queuing the request for the
      # specified time. This resize request is nested under InstanceGroupManager
      # and the VMs created by this request are added to the owning
      # InstanceGroupManager.
      class InstanceGroupManagerResizeRequest
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The creation timestamp for this resize request
        # inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] A unique identifier for this resource type. The
        # server
        # generates this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # instanceGroupManagerResizeRequest for
        # resize requests.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The name of this resize request. The name must be 1-63 characters
        # long, and comply withRFC1035.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `requestedRunDuration`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :requested_run_duration
      
        # The number of instances to be created by this resize request. The group's
        # target size will be increased by this number. This field cannot be used
        # together with 'instances'.
        # Corresponds to the JSON property `resizeBy`
        # @return [Fixnum]
        attr_accessor :resize_by
      
        # Output only. [Output Only] The URL for this resize request. The server defines
        # this URL.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource with the
        # resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # Output only. [Output only] Current state of the request.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # Output only. [Output only] Status of the request.
        # Corresponds to the JSON property `status`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerResizeRequestStatus]
        attr_accessor :status
      
        # Output only. [Output Only] The URL of azone
        # where the resize request is located. Populated only for zonal resize
        # requests.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @requested_run_duration = args[:requested_run_duration] if args.key?(:requested_run_duration)
          @resize_by = args[:resize_by] if args.key?(:resize_by)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @state = args[:state] if args.key?(:state)
          @status = args[:status] if args.key?(:status)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class InstanceGroupManagerResizeRequestStatus
        include Google::Apis::Core::Hashable
      
        # Output only. [Output only] Fatal errors encountered during the queueing or
        # provisioning phases of the ResizeRequest that caused the transition to
        # the FAILED state. Contrary to the last_attempt errors, this field is
        # final and errors are never removed from here, as the ResizeRequest is not
        # going to retry.
        # Corresponds to the JSON property `error`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerResizeRequestStatus::Error]
        attr_accessor :error
      
        # Output only. [Output only] Information about the last attempt to fulfill the
        # request.
        # The value is temporary since the ResizeRequest can retry, as long as it's
        # still active and the last attempt value can either be cleared or replaced
        # with a different error. Since ResizeRequest retries infrequently, the
        # value may be stale and no longer show an active problem. The value is
        # cleared when ResizeRequest transitions to the final state (becomes
        # inactive). If the final state is FAILED the error describing it will be
        # storred in the "error" field only.
        # Corresponds to the JSON property `lastAttempt`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerResizeRequestStatusLastAttempt]
        attr_accessor :last_attempt
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @error = args[:error] if args.key?(:error)
          @last_attempt = args[:last_attempt] if args.key?(:last_attempt)
        end
        
        # Output only. [Output only] Fatal errors encountered during the queueing or
        # provisioning phases of the ResizeRequest that caused the transition to
        # the FAILED state. Contrary to the last_attempt errors, this field is
        # final and errors are never removed from here, as the ResizeRequest is not
        # going to retry.
        class Error
          include Google::Apis::Core::Hashable
        
          # [Output Only] The array of errors encountered while processing this
          # operation.
          # Corresponds to the JSON property `errors`
          # @return [Array<Google::Apis::ComputeV1::InstanceGroupManagerResizeRequestStatus::Error::Error>]
          attr_accessor :errors
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @errors = args[:errors] if args.key?(:errors)
          end
          
          # 
          class Error
            include Google::Apis::Core::Hashable
          
            # [Output Only] The error type identifier for this error.
            # Corresponds to the JSON property `code`
            # @return [String]
            attr_accessor :code
          
            # [Output Only] An optional list of messages that contain the error
            # details. There is a set of defined message types to use for providing
            # details.The syntax depends on the error code. For example,
            # QuotaExceededInfo will have details when the error code is
            # QUOTA_EXCEEDED.
            # Corresponds to the JSON property `errorDetails`
            # @return [Array<Google::Apis::ComputeV1::InstanceGroupManagerResizeRequestStatus::Error::Error::ErrorDetail>]
            attr_accessor :error_details
          
            # [Output Only] Indicates the field in the request that caused the error.
            # This property is optional.
            # Corresponds to the JSON property `location`
            # @return [String]
            attr_accessor :location
          
            # [Output Only] An optional, human-readable error message.
            # 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)
              @error_details = args[:error_details] if args.key?(:error_details)
              @location = args[:location] if args.key?(:location)
              @message = args[:message] if args.key?(:message)
            end
            
            # 
            class ErrorDetail
              include Google::Apis::Core::Hashable
            
              # Describes the cause of the error with structured details.
              # Example of an error when contacting the "pubsub.googleapis.com" API when it
              # is not enabled:
              # ` "reason": "API_DISABLED"
              # "domain": "googleapis.com"
              # "metadata": `
              # "resource": "projects/123",
              # "service": "pubsub.googleapis.com"
              # `
              # `
              # This response indicates that the pubsub.googleapis.com API is not enabled.
              # Example of an error that is returned when attempting to create a Spanner
              # instance in a region that is out of stock:
              # ` "reason": "STOCKOUT"
              # "domain": "spanner.googleapis.com",
              # "metadata": `
              # "availableRegions": "us-central1,us-east2"
              # `
              # `
              # Corresponds to the JSON property `errorInfo`
              # @return [Google::Apis::ComputeV1::ErrorInfo]
              attr_accessor :error_info
            
              # Provides links to documentation or for performing an out of band action.
              # For example, if a quota check failed with an error indicating the calling
              # project hasn't enabled the accessed service, this can contain a URL pointing
              # directly to the right place in the developer console to flip the bit.
              # Corresponds to the JSON property `help`
              # @return [Google::Apis::ComputeV1::Help]
              attr_accessor :help
            
              # Provides a localized error message that is safe to return to the user
              # which can be attached to an RPC error.
              # Corresponds to the JSON property `localizedMessage`
              # @return [Google::Apis::ComputeV1::LocalizedMessage]
              attr_accessor :localized_message
            
              # Additional details for quota exceeded error for resource quota.
              # Corresponds to the JSON property `quotaInfo`
              # @return [Google::Apis::ComputeV1::QuotaExceededInfo]
              attr_accessor :quota_info
            
              def initialize(**args)
                 update!(**args)
              end
            
              # Update properties of this object
              def update!(**args)
                @error_info = args[:error_info] if args.key?(:error_info)
                @help = args[:help] if args.key?(:help)
                @localized_message = args[:localized_message] if args.key?(:localized_message)
                @quota_info = args[:quota_info] if args.key?(:quota_info)
              end
            end
          end
        end
      end
      
      # 
      class InstanceGroupManagerResizeRequestStatusLastAttempt
        include Google::Apis::Core::Hashable
      
        # Output only. Errors that prevented the ResizeRequest to be fulfilled.
        # Corresponds to the JSON property `error`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerResizeRequestStatusLastAttempt::Error]
        attr_accessor :error
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @error = args[:error] if args.key?(:error)
        end
        
        # Output only. Errors that prevented the ResizeRequest to be fulfilled.
        class Error
          include Google::Apis::Core::Hashable
        
          # [Output Only] The array of errors encountered while processing this
          # operation.
          # Corresponds to the JSON property `errors`
          # @return [Array<Google::Apis::ComputeV1::InstanceGroupManagerResizeRequestStatusLastAttempt::Error::Error>]
          attr_accessor :errors
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @errors = args[:errors] if args.key?(:errors)
          end
          
          # 
          class Error
            include Google::Apis::Core::Hashable
          
            # [Output Only] The error type identifier for this error.
            # Corresponds to the JSON property `code`
            # @return [String]
            attr_accessor :code
          
            # [Output Only] An optional list of messages that contain the error
            # details. There is a set of defined message types to use for providing
            # details.The syntax depends on the error code. For example,
            # QuotaExceededInfo will have details when the error code is
            # QUOTA_EXCEEDED.
            # Corresponds to the JSON property `errorDetails`
            # @return [Array<Google::Apis::ComputeV1::InstanceGroupManagerResizeRequestStatusLastAttempt::Error::Error::ErrorDetail>]
            attr_accessor :error_details
          
            # [Output Only] Indicates the field in the request that caused the error.
            # This property is optional.
            # Corresponds to the JSON property `location`
            # @return [String]
            attr_accessor :location
          
            # [Output Only] An optional, human-readable error message.
            # 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)
              @error_details = args[:error_details] if args.key?(:error_details)
              @location = args[:location] if args.key?(:location)
              @message = args[:message] if args.key?(:message)
            end
            
            # 
            class ErrorDetail
              include Google::Apis::Core::Hashable
            
              # Describes the cause of the error with structured details.
              # Example of an error when contacting the "pubsub.googleapis.com" API when it
              # is not enabled:
              # ` "reason": "API_DISABLED"
              # "domain": "googleapis.com"
              # "metadata": `
              # "resource": "projects/123",
              # "service": "pubsub.googleapis.com"
              # `
              # `
              # This response indicates that the pubsub.googleapis.com API is not enabled.
              # Example of an error that is returned when attempting to create a Spanner
              # instance in a region that is out of stock:
              # ` "reason": "STOCKOUT"
              # "domain": "spanner.googleapis.com",
              # "metadata": `
              # "availableRegions": "us-central1,us-east2"
              # `
              # `
              # Corresponds to the JSON property `errorInfo`
              # @return [Google::Apis::ComputeV1::ErrorInfo]
              attr_accessor :error_info
            
              # Provides links to documentation or for performing an out of band action.
              # For example, if a quota check failed with an error indicating the calling
              # project hasn't enabled the accessed service, this can contain a URL pointing
              # directly to the right place in the developer console to flip the bit.
              # Corresponds to the JSON property `help`
              # @return [Google::Apis::ComputeV1::Help]
              attr_accessor :help
            
              # Provides a localized error message that is safe to return to the user
              # which can be attached to an RPC error.
              # Corresponds to the JSON property `localizedMessage`
              # @return [Google::Apis::ComputeV1::LocalizedMessage]
              attr_accessor :localized_message
            
              # Additional details for quota exceeded error for resource quota.
              # Corresponds to the JSON property `quotaInfo`
              # @return [Google::Apis::ComputeV1::QuotaExceededInfo]
              attr_accessor :quota_info
            
              def initialize(**args)
                 update!(**args)
              end
            
              # Update properties of this object
              def update!(**args)
                @error_info = args[:error_info] if args.key?(:error_info)
                @help = args[:help] if args.key?(:help)
                @localized_message = args[:localized_message] if args.key?(:localized_message)
                @quota_info = args[:quota_info] if args.key?(:quota_info)
              end
            end
          end
        end
      end
      
      # [Output Only] A list of resize requests.
      class InstanceGroupManagerResizeRequestsListResponse
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the resource; defined by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of resize request resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InstanceGroupManagerResizeRequest>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # instanceGroupManagerResizeRequestList for
        # a list of resize requests.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerResizeRequestsListResponse::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceGroupManagerResizeRequestsListResponse::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InstanceGroupManagerResourcePolicies
        include Google::Apis::Core::Hashable
      
        # The URL of the workload policy that is specified for this managed
        # instance group.
        # It can be a full or partial URL. For example, the following are
        # all valid URLs to a workload policy:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/regions/region/
        # resourcePolicies/resourcePolicy
        # - projects/project/regions/region/resourcePolicies/resourcePolicy
        # - regions/region/resourcePolicies/resourcePolicy
        # Corresponds to the JSON property `workloadPolicy`
        # @return [String]
        attr_accessor :workload_policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @workload_policy = args[:workload_policy] if args.key?(:workload_policy)
        end
      end
      
      # 
      class InstanceGroupManagerStandbyPolicy
        include Google::Apis::Core::Hashable
      
        # Specifies the number of seconds that the MIG should wait to suspend or
        # stop a VM after that VM was created. The initial delay gives the
        # initialization script the time to prepare your VM for a quick scale out.
        # The value of initial delay must be between 0 and 3600 seconds. The
        # default value is 0.
        # Corresponds to the JSON property `initialDelaySec`
        # @return [Fixnum]
        attr_accessor :initial_delay_sec
      
        # Defines how a MIG resumes or starts VMs from a standby pool when the
        # group scales out. The default mode is `MANUAL`.
        # Corresponds to the JSON property `mode`
        # @return [String]
        attr_accessor :mode
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @initial_delay_sec = args[:initial_delay_sec] if args.key?(:initial_delay_sec)
          @mode = args[:mode] if args.key?(:mode)
        end
      end
      
      # 
      class InstanceGroupManagerStatus
        include Google::Apis::Core::Hashable
      
        # Output only. [Output only] Status of all-instances configuration on the group.
        # Corresponds to the JSON property `allInstancesConfig`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerStatusAllInstancesConfig]
        attr_accessor :all_instances_config
      
        # Output only. [Output Only] The URL of theAutoscaler
        # that targets this instance group manager.
        # Corresponds to the JSON property `autoscaler`
        # @return [String]
        attr_accessor :autoscaler
      
        # Output only. [Output Only] A bit indicating whether the managed instance group
        # is in a
        # stable state. A stable state means that: none of the instances in the
        # managed instance group is currently undergoing any type of change (for
        # example, creation, restart, or deletion); no future changes are scheduled
        # for instances in the managed instance group; and the managed instance
        # group itself is not being modified.
        # Corresponds to the JSON property `isStable`
        # @return [Boolean]
        attr_accessor :is_stable
        alias_method :is_stable?, :is_stable
      
        # Output only. [Output Only] Stateful status of the given Instance Group Manager.
        # Corresponds to the JSON property `stateful`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerStatusStateful]
        attr_accessor :stateful
      
        # Output only. [Output Only] A status of consistency of Instances' versions with
        # their
        # target version specified by version field on Instance Group
        # Manager.
        # Corresponds to the JSON property `versionTarget`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerStatusVersionTarget]
        attr_accessor :version_target
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @all_instances_config = args[:all_instances_config] if args.key?(:all_instances_config)
          @autoscaler = args[:autoscaler] if args.key?(:autoscaler)
          @is_stable = args[:is_stable] if args.key?(:is_stable)
          @stateful = args[:stateful] if args.key?(:stateful)
          @version_target = args[:version_target] if args.key?(:version_target)
        end
      end
      
      # 
      class InstanceGroupManagerStatusAllInstancesConfig
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Current all-instances configuration revision.
        # This value is in RFC3339 text format.
        # Corresponds to the JSON property `currentRevision`
        # @return [String]
        attr_accessor :current_revision
      
        # Output only. [Output Only] A bit indicating whether this configuration has
        # been applied to all managed instances in the group.
        # Corresponds to the JSON property `effective`
        # @return [Boolean]
        attr_accessor :effective
        alias_method :effective?, :effective
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @current_revision = args[:current_revision] if args.key?(:current_revision)
          @effective = args[:effective] if args.key?(:effective)
        end
      end
      
      # 
      class InstanceGroupManagerStatusStateful
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] A bit indicating whether the managed instance group
        # has stateful configuration, that is, if you have configured any items
        # in a stateful policy or in per-instance configs.
        # The group might report that it has no stateful configuration even when
        # there is still some preserved state on a managed instance, for example,
        # if you have deleted all PICs but not yet applied those deletions.
        # Corresponds to the JSON property `hasStatefulConfig`
        # @return [Boolean]
        attr_accessor :has_stateful_config
        alias_method :has_stateful_config?, :has_stateful_config
      
        # Output only. [Output Only] Status of per-instance configurations on the
        # instances.
        # Corresponds to the JSON property `perInstanceConfigs`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerStatusStatefulPerInstanceConfigs]
        attr_accessor :per_instance_configs
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @has_stateful_config = args[:has_stateful_config] if args.key?(:has_stateful_config)
          @per_instance_configs = args[:per_instance_configs] if args.key?(:per_instance_configs)
        end
      end
      
      # 
      class InstanceGroupManagerStatusStatefulPerInstanceConfigs
        include Google::Apis::Core::Hashable
      
        # Output only. A bit indicating if all of the group's per-instance
        # configurations
        # (listed in the output of a listPerInstanceConfigs API call) have
        # status EFFECTIVE or there are no per-instance-configs.
        # Corresponds to the JSON property `allEffective`
        # @return [Boolean]
        attr_accessor :all_effective
        alias_method :all_effective?, :all_effective
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @all_effective = args[:all_effective] if args.key?(:all_effective)
        end
      end
      
      # 
      class InstanceGroupManagerStatusVersionTarget
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] A bit indicating whether version target has been
        # reached
        # in this managed instance group, i.e. all instances are in their target
        # version. Instances' target version are specified byversion field on Instance
        # Group Manager.
        # Corresponds to the JSON property `isReached`
        # @return [Boolean]
        attr_accessor :is_reached
        alias_method :is_reached?, :is_reached
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @is_reached = args[:is_reached] if args.key?(:is_reached)
        end
      end
      
      # 
      class InstanceGroupManagerUpdatePolicy
        include Google::Apis::Core::Hashable
      
        # The
        # instance redistribution policy for regional managed instance groups.
        # Valid values are:
        # 
        # - PROACTIVE (default): The group attempts to maintain an
        # even distribution of VM instances across zones in the region.
        # - NONE: For non-autoscaled groups, proactive
        # redistribution is disabled.
        # Corresponds to the JSON property `instanceRedistributionType`
        # @return [String]
        attr_accessor :instance_redistribution_type
      
        # Encapsulates numeric value that can be either absolute or relative.
        # Corresponds to the JSON property `maxSurge`
        # @return [Google::Apis::ComputeV1::FixedOrPercent]
        attr_accessor :max_surge
      
        # Encapsulates numeric value that can be either absolute or relative.
        # Corresponds to the JSON property `maxUnavailable`
        # @return [Google::Apis::ComputeV1::FixedOrPercent]
        attr_accessor :max_unavailable
      
        # Minimal action to be taken on an instance. Use this option to minimize
        # disruption as much as possible or to apply a more disruptive action than
        # is necessary.
        # 
        # - To limit disruption as much as possible, set the minimal action toREFRESH.
        # If your update requires a more disruptive action,
        # Compute Engine performs the necessary action to execute the update.
        # - To apply a more disruptive action than is strictly necessary, set the
        # minimal action to RESTART or REPLACE. For
        # example, Compute Engine does not need to restart a VM to change its
        # metadata. But if your application reads instance metadata only when a VM
        # is restarted, you can set the minimal action to RESTART in
        # order to pick up metadata changes.
        # Corresponds to the JSON property `minimalAction`
        # @return [String]
        attr_accessor :minimal_action
      
        # Most disruptive action that is allowed to be taken on an instance.
        # You can specify either NONE to forbid any actions,REFRESH to avoid restarting
        # the VM and to limit disruption
        # as much as possible. RESTART to allow actions that can be
        # applied without instance replacing or REPLACE to allow all
        # possible actions. If the Updater determines that the minimal update
        # action needed is more disruptive than most disruptive allowed action you
        # specify it will not perform the update at all.
        # Corresponds to the JSON property `mostDisruptiveAllowedAction`
        # @return [String]
        attr_accessor :most_disruptive_allowed_action
      
        # What action should be used to replace instances.
        # See minimal_action.REPLACE
        # Corresponds to the JSON property `replacementMethod`
        # @return [String]
        attr_accessor :replacement_method
      
        # The type
        # of update process. You can specify either PROACTIVE so
        # that the MIG automatically updates VMs to the latest configurations
        # orOPPORTUNISTIC so that you can select the VMs that you want
        # to update.
        # 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)
          @instance_redistribution_type = args[:instance_redistribution_type] if args.key?(:instance_redistribution_type)
          @max_surge = args[:max_surge] if args.key?(:max_surge)
          @max_unavailable = args[:max_unavailable] if args.key?(:max_unavailable)
          @minimal_action = args[:minimal_action] if args.key?(:minimal_action)
          @most_disruptive_allowed_action = args[:most_disruptive_allowed_action] if args.key?(:most_disruptive_allowed_action)
          @replacement_method = args[:replacement_method] if args.key?(:replacement_method)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # 
      class InstanceGroupManagerVersion
        include Google::Apis::Core::Hashable
      
        # The URL of the instance template that is specified for this managed
        # instance group. The group uses this template to create new instances in
        # the managed instance group until the `targetSize` for this version is
        # reached. The templates for existing instances in the group do not change
        # unless you run recreateInstances, runapplyUpdatesToInstances, or set the group'
        # supdatePolicy.type to PROACTIVE; in those cases,
        # existing instances are updated until the `targetSize` for this version is
        # reached.
        # Corresponds to the JSON property `instanceTemplate`
        # @return [String]
        attr_accessor :instance_template
      
        # Name of the version. Unique among all versions in the scope of this
        # managed instance group.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Encapsulates numeric value that can be either absolute or relative.
        # Corresponds to the JSON property `targetSize`
        # @return [Google::Apis::ComputeV1::FixedOrPercent]
        attr_accessor :target_size
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_template = args[:instance_template] if args.key?(:instance_template)
          @name = args[:name] if args.key?(:name)
          @target_size = args[:target_size] if args.key?(:target_size)
        end
      end
      
      # 
      class InstanceGroupManagersAbandonInstancesRequest
        include Google::Apis::Core::Hashable
      
        # The URLs of one or more instances to abandon. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        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
      
      # InstanceGroupManagers.applyUpdatesToInstances
      class InstanceGroupManagersApplyUpdatesRequest
        include Google::Apis::Core::Hashable
      
        # Flag to update all instances instead of specified list of “instances”.
        # If the flag is set to true then the instances may not be specified
        # in the request.
        # Corresponds to the JSON property `allInstances`
        # @return [Boolean]
        attr_accessor :all_instances
        alias_method :all_instances?, :all_instances
      
        # The list of URLs of one or more instances for which you want to apply
        # updates. Each URL can be a full URL or a partial URL, such aszones/[ZONE]/
        # instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        attr_accessor :instances
      
        # The minimal action that you want to perform on each instance during the
        # update:
        # 
        # 
        # - REPLACE: At minimum, delete the instance and create it
        # again.
        # - RESTART: Stop the instance and start it
        # again.
        # - REFRESH: Do not stop the instance and limit
        # disruption as much as possible.
        # - NONE: Do not
        # disrupt the instance at all.
        # By default, the minimum action is NONE. If your update
        # requires a more disruptive action than you set with this flag, the
        # necessary action is performed to execute the update.
        # Corresponds to the JSON property `minimalAction`
        # @return [String]
        attr_accessor :minimal_action
      
        # The most disruptive action that you want to perform on each instance during
        # the update:
        # 
        # 
        # - REPLACE: Delete the instance and create it again.
        # - RESTART: Stop the instance and start it again.
        # - REFRESH: Do not stop the instance and limit disruption
        # as much as possible.
        # - NONE: Do not disrupt the
        # instance at all.
        # By default, the most disruptive allowed action is REPLACE. If
        # your update requires a more disruptive action than you set with this flag,
        # the update request will fail.
        # Corresponds to the JSON property `mostDisruptiveAllowedAction`
        # @return [String]
        attr_accessor :most_disruptive_allowed_action
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @all_instances = args[:all_instances] if args.key?(:all_instances)
          @instances = args[:instances] if args.key?(:instances)
          @minimal_action = args[:minimal_action] if args.key?(:minimal_action)
          @most_disruptive_allowed_action = args[:most_disruptive_allowed_action] if args.key?(:most_disruptive_allowed_action)
        end
      end
      
      # InstanceGroupManagers.createInstances
      class InstanceGroupManagersCreateInstancesRequest
        include Google::Apis::Core::Hashable
      
        # [Required] List of specifications of per-instance configs.
        # Corresponds to the JSON property `instances`
        # @return [Array<Google::Apis::ComputeV1::PerInstanceConfig>]
        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
      
      # 
      class InstanceGroupManagersDeleteInstancesRequest
        include Google::Apis::Core::Hashable
      
        # The URLs of one or more instances to delete. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Queued instances do not have URL and can be deleted only by name.
        # One cannot specify both URLs and names in a single request.
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        attr_accessor :instances
      
        # Specifies whether the request should proceed despite the inclusion of
        # instances that are not members of the group or that are already in the
        # process of being deleted or abandoned. If this field is set to `false` and
        # such an instance is specified in the request, the operation fails. The
        # operation always fails if the request contains a malformed instance URL or
        # a reference to an instance that exists in a zone or region other than the
        # group's zone or region.
        # Corresponds to the JSON property `skipInstancesOnValidationError`
        # @return [Boolean]
        attr_accessor :skip_instances_on_validation_error
        alias_method :skip_instances_on_validation_error?, :skip_instances_on_validation_error
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instances = args[:instances] if args.key?(:instances)
          @skip_instances_on_validation_error = args[:skip_instances_on_validation_error] if args.key?(:skip_instances_on_validation_error)
        end
      end
      
      # InstanceGroupManagers.deletePerInstanceConfigs
      class InstanceGroupManagersDeletePerInstanceConfigsReq
        include Google::Apis::Core::Hashable
      
        # The list of instance names for which we want to delete per-instance configs
        # on this managed instance group.
        # Corresponds to the JSON property `names`
        # @return [Array<String>]
        attr_accessor :names
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @names = args[:names] if args.key?(:names)
        end
      end
      
      # 
      class InstanceGroupManagersListErrorsResponse
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The list of errors of the managed instance group.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InstanceManagedByIgmError>]
        attr_accessor :items
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the 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)
          @items = args[:items] if args.key?(:items)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class InstanceGroupManagersListManagedInstancesResponse
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The list of instances in the managed instance group.
        # Corresponds to the JSON property `managedInstances`
        # @return [Array<Google::Apis::ComputeV1::ManagedInstance>]
        attr_accessor :managed_instances
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the 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)
          @managed_instances = args[:managed_instances] if args.key?(:managed_instances)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class InstanceGroupManagersListPerInstanceConfigsResp
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The list of PerInstanceConfig.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::PerInstanceConfig>]
        attr_accessor :items
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagersListPerInstanceConfigsResp::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceGroupManagersListPerInstanceConfigsResp::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # InstanceGroupManagers.patchPerInstanceConfigs
      class InstanceGroupManagersPatchPerInstanceConfigsReq
        include Google::Apis::Core::Hashable
      
        # The list of per-instance configurations to insert or patch on this managed
        # instance group.
        # Corresponds to the JSON property `perInstanceConfigs`
        # @return [Array<Google::Apis::ComputeV1::PerInstanceConfig>]
        attr_accessor :per_instance_configs
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @per_instance_configs = args[:per_instance_configs] if args.key?(:per_instance_configs)
        end
      end
      
      # 
      class InstanceGroupManagersRecreateInstancesRequest
        include Google::Apis::Core::Hashable
      
        # The URLs of one or more instances to recreate. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        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
      
      # 
      class InstanceGroupManagersResumeInstancesRequest
        include Google::Apis::Core::Hashable
      
        # The URLs of one or more instances to resume. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        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
      
      # 
      class InstanceGroupManagersScopedList
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The list of managed instance groups that are
        # contained in
        # the specified project and zone.
        # Corresponds to the JSON property `instanceGroupManagers`
        # @return [Array<Google::Apis::ComputeV1::InstanceGroupManager>]
        attr_accessor :instance_group_managers
      
        # Output only. [Output Only] The warning that replaces the list of managed
        # instance
        # groups when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagersScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_group_managers = args[:instance_group_managers] if args.key?(:instance_group_managers)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] The warning that replaces the list of managed
        # instance
        # groups when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceGroupManagersScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InstanceGroupManagersSetInstanceTemplateRequest
        include Google::Apis::Core::Hashable
      
        # The URL of the instance template that is specified for this managed
        # instance group. The group uses this template to create all new instances
        # in the managed instance group. The templates for existing instances in the
        # group do not change unless you run recreateInstances,
        # runapplyUpdatesToInstances, or set the group'supdatePolicy.type to PROACTIVE.
        # Corresponds to the JSON property `instanceTemplate`
        # @return [String]
        attr_accessor :instance_template
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_template = args[:instance_template] if args.key?(:instance_template)
        end
      end
      
      # 
      class InstanceGroupManagersSetTargetPoolsRequest
        include Google::Apis::Core::Hashable
      
        # The fingerprint of the target pools information. Use this optional
        # property to prevent conflicts when multiple users change the target pools
        # settings concurrently. Obtain the fingerprint with theinstanceGroupManagers.
        # get
        # method. Then, include the fingerprint in your request to ensure that you
        # do not overwrite changes that were applied from another
        # concurrent request.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # The list of target pool URLs that instances in this managed instance group
        # belong to. The managed instance group applies these target pools to all
        # of the instances in the group. Existing instances and new instances in the
        # group all receive these target pool settings.
        # Corresponds to the JSON property `targetPools`
        # @return [Array<String>]
        attr_accessor :target_pools
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @target_pools = args[:target_pools] if args.key?(:target_pools)
        end
      end
      
      # 
      class InstanceGroupManagersStartInstancesRequest
        include Google::Apis::Core::Hashable
      
        # The URLs of one or more instances to start. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        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
      
      # 
      class InstanceGroupManagersStopInstancesRequest
        include Google::Apis::Core::Hashable
      
        # If this flag is set to true, the Instance Group Manager will proceed to
        # stop the instances, skipping initialization on them.
        # Corresponds to the JSON property `forceStop`
        # @return [Boolean]
        attr_accessor :force_stop
        alias_method :force_stop?, :force_stop
      
        # The URLs of one or more instances to stop. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        attr_accessor :instances
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @force_stop = args[:force_stop] if args.key?(:force_stop)
          @instances = args[:instances] if args.key?(:instances)
        end
      end
      
      # 
      class InstanceGroupManagersSuspendInstancesRequest
        include Google::Apis::Core::Hashable
      
        # If this flag is set to true, the Instance Group Manager will proceed to
        # suspend the instances, skipping initialization on them.
        # Corresponds to the JSON property `forceSuspend`
        # @return [Boolean]
        attr_accessor :force_suspend
        alias_method :force_suspend?, :force_suspend
      
        # The URLs of one or more instances to suspend. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        attr_accessor :instances
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @force_suspend = args[:force_suspend] if args.key?(:force_suspend)
          @instances = args[:instances] if args.key?(:instances)
        end
      end
      
      # InstanceGroupManagers.updatePerInstanceConfigs
      class InstanceGroupManagersUpdatePerInstanceConfigsReq
        include Google::Apis::Core::Hashable
      
        # The list of per-instance configurations to insert or patch on this managed
        # instance group.
        # Corresponds to the JSON property `perInstanceConfigs`
        # @return [Array<Google::Apis::ComputeV1::PerInstanceConfig>]
        attr_accessor :per_instance_configs
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @per_instance_configs = args[:per_instance_configs] if args.key?(:per_instance_configs)
        end
      end
      
      # 
      class InstanceGroupsAddInstancesRequest
        include Google::Apis::Core::Hashable
      
        # The list of instances to add to the instance group.
        # Corresponds to the JSON property `instances`
        # @return [Array<Google::Apis::ComputeV1::InstanceReference>]
        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
      
      # 
      class InstanceGroupsListInstances
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the resource; defined by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InstanceWithNamedPorts resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InstanceWithNamedPorts>]
        attr_accessor :items
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # instanceGroupsListInstances for the list of instances
        # in the specified instance group.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceGroupsListInstances::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceGroupsListInstances::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InstanceGroupsListInstancesRequest
        include Google::Apis::Core::Hashable
      
        # A filter for the state of the instances in the instance group. Valid
        # options are ALL or RUNNING. If you do not specify
        # this parameter the list includes all instances regardless of their state.
        # Corresponds to the JSON property `instanceState`
        # @return [String]
        attr_accessor :instance_state
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_state = args[:instance_state] if args.key?(:instance_state)
        end
      end
      
      # 
      class InstanceGroupsRemoveInstancesRequest
        include Google::Apis::Core::Hashable
      
        # The list of instances to remove from the instance group.
        # Corresponds to the JSON property `instances`
        # @return [Array<Google::Apis::ComputeV1::InstanceReference>]
        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
      
      # 
      class InstanceGroupsScopedList
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The list ofinstance
        # groups that are contained in this scope.
        # Corresponds to the JSON property `instanceGroups`
        # @return [Array<Google::Apis::ComputeV1::InstanceGroup>]
        attr_accessor :instance_groups
      
        # Output only. [Output Only] An informational warning that replaces the list of
        # instance groups when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceGroupsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_groups = args[:instance_groups] if args.key?(:instance_groups)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] An informational warning that replaces the list of
        # instance groups when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceGroupsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InstanceGroupsSetNamedPortsRequest
        include Google::Apis::Core::Hashable
      
        # The fingerprint of the named ports information for this instance group.
        # Use this optional property to prevent conflicts when multiple users change
        # the named ports settings concurrently. Obtain the fingerprint with
        # theinstanceGroups.get
        # method. Then, include the fingerprint in your request to ensure that you
        # do not overwrite changes that were applied from another concurrent request.
        # A request with an incorrect fingerprint will fail with error412
        # conditionNotMet.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # The list of named ports to set for this instance group.
        # Corresponds to the JSON property `namedPorts`
        # @return [Array<Google::Apis::ComputeV1::NamedPort>]
        attr_accessor :named_ports
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @named_ports = args[:named_ports] if args.key?(:named_ports)
        end
      end
      
      # Contains a list of instances.
      class InstanceList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Instance resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Instance>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#instanceList
        # for lists of Instance resources.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of instance referrers.
      class InstanceListReferrers
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Reference resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Reference>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # instanceListReferrers for lists of Instance referrers.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceListReferrers::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceListReferrers::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InstanceManagedByIgmError
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Contents of the error.
        # Corresponds to the JSON property `error`
        # @return [Google::Apis::ComputeV1::InstanceManagedByIgmErrorManagedInstanceError]
        attr_accessor :error
      
        # Output only. [Output Only] Details of the instance action that triggered this
        # error.
        # May be null, if the error was not caused by an action on an instance.
        # This field is optional.
        # Corresponds to the JSON property `instanceActionDetails`
        # @return [Google::Apis::ComputeV1::InstanceManagedByIgmErrorInstanceActionDetails]
        attr_accessor :instance_action_details
      
        # Output only. [Output Only] The time that this error occurred.
        # This value is in RFC3339 text format.
        # Corresponds to the JSON property `timestamp`
        # @return [String]
        attr_accessor :timestamp
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @error = args[:error] if args.key?(:error)
          @instance_action_details = args[:instance_action_details] if args.key?(:instance_action_details)
          @timestamp = args[:timestamp] if args.key?(:timestamp)
        end
      end
      
      # 
      class InstanceManagedByIgmErrorInstanceActionDetails
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Action that managed instance group was executing on
        # the instance when the error occurred. Possible values:
        # Corresponds to the JSON property `action`
        # @return [String]
        attr_accessor :action
      
        # Output only. [Output Only] The URL of the instance.
        # The URL can be set even if the instance has not yet been created.
        # Corresponds to the JSON property `instance`
        # @return [String]
        attr_accessor :instance
      
        # Output only. [Output Only] Version this instance was created from, or was
        # being
        # created from, but the creation failed. Corresponds to one of the versions
        # that were set on the Instance Group Manager resource at the time this
        # instance was being created.
        # Corresponds to the JSON property `version`
        # @return [Google::Apis::ComputeV1::ManagedInstanceVersion]
        attr_accessor :version
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @action = args[:action] if args.key?(:action)
          @instance = args[:instance] if args.key?(:instance)
          @version = args[:version] if args.key?(:version)
        end
      end
      
      # 
      class InstanceManagedByIgmErrorManagedInstanceError
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Error code.
        # Corresponds to the JSON property `code`
        # @return [String]
        attr_accessor :code
      
        # Output only. [Output Only] Error message.
        # 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)
          @message = args[:message] if args.key?(:message)
        end
      end
      
      # 
      class MoveInstanceRequest
        include Google::Apis::Core::Hashable
      
        # The URL of the destination zone to move the instance. This can be a full or
        # partial URL. For example, the following are all valid URLs to a zone:
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone
        # - projects/project/zones/zone
        # - zones/zone
        # Corresponds to the JSON property `destinationZone`
        # @return [String]
        attr_accessor :destination_zone
      
        # The URL of the target instance to move. This can be a full or partial URL.
        # For example, the following are all valid URLs to an instance:
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/
        # instances/instance
        # - projects/project/zones/zone/instances/instance
        # - zones/zone/instances/instance
        # Corresponds to the JSON property `targetInstance`
        # @return [String]
        attr_accessor :target_instance
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @destination_zone = args[:destination_zone] if args.key?(:destination_zone)
          @target_instance = args[:target_instance] if args.key?(:target_instance)
        end
      end
      
      # Additional instance params.
      class InstanceParams
        include Google::Apis::Core::Hashable
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `requestValidForDuration`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :request_valid_for_duration
      
        # Resource manager tags to be bound to the instance. Tag keys and values
        # have the same definition as resource
        # manager tags. Keys and values can be either in numeric format,
        # such as `tagKeys/`tag_key_id`` and `tagValues/456` or in namespaced
        # format such as ``org_id|project_id`/`tag_key_short_name`` and
        # ``tag_value_short_name``. The field is ignored (both PUT &
        # PATCH) when empty.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @request_valid_for_duration = args[:request_valid_for_duration] if args.key?(:request_valid_for_duration)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # 
      class InstanceProperties
        include Google::Apis::Core::Hashable
      
        # Specifies options for controlling advanced machine features.
        # Options that would traditionally be configured in a BIOS belong
        # here. Features that require operating system support may have
        # corresponding entries in the GuestOsFeatures of anImage (e.g., whether or not
        # the OS in theImage supports nested virtualization being enabled or
        # disabled).
        # Corresponds to the JSON property `advancedMachineFeatures`
        # @return [Google::Apis::ComputeV1::AdvancedMachineFeatures]
        attr_accessor :advanced_machine_features
      
        # Enables instances created based on these properties to send packets with
        # source IP addresses other than their own and receive packets with
        # destination IP addresses other than their own. If these instances will be
        # used as an IP gateway or it will be set as the next-hop in a Route
        # resource, specify true. If unsure, leave this set tofalse. See theEnable IP
        # forwarding
        # documentation for more information.
        # Corresponds to the JSON property `canIpForward`
        # @return [Boolean]
        attr_accessor :can_ip_forward
        alias_method :can_ip_forward?, :can_ip_forward
      
        # A set of Confidential Instance options.
        # Corresponds to the JSON property `confidentialInstanceConfig`
        # @return [Google::Apis::ComputeV1::ConfidentialInstanceConfig]
        attr_accessor :confidential_instance_config
      
        # An optional text description for the instances that are created from these
        # properties.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # An array of disks that are associated with the instances that are created
        # from these properties.
        # Corresponds to the JSON property `disks`
        # @return [Array<Google::Apis::ComputeV1::AttachedDisk>]
        attr_accessor :disks
      
        # A list of guest accelerator cards' type and count to use for instances
        # created from these properties.
        # Corresponds to the JSON property `guestAccelerators`
        # @return [Array<Google::Apis::ComputeV1::AcceleratorConfig>]
        attr_accessor :guest_accelerators
      
        # KeyRevocationActionType of the instance. Supported options are "STOP" and
        # "NONE". The default value is "NONE" if it is not specified.
        # Corresponds to the JSON property `keyRevocationActionType`
        # @return [String]
        attr_accessor :key_revocation_action_type
      
        # Labels to apply to instances that are created from these properties.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # The machine type to use for instances that are created from these
        # properties.
        # This field only accepts a machine type name, for example `n2-standard-4`.
        # If you use the machine type full or partial URL, for example
        # `projects/my-l7ilb-project/zones/us-central1-a/machineTypes/n2-standard-4`,
        # the request will result in an `INTERNAL_ERROR`.
        # Corresponds to the JSON property `machineType`
        # @return [String]
        attr_accessor :machine_type
      
        # A metadata key/value entry.
        # Corresponds to the JSON property `metadata`
        # @return [Google::Apis::ComputeV1::Metadata]
        attr_accessor :metadata
      
        # Minimum cpu/platform to be used by instances. The instance may be
        # scheduled on the specified or newer cpu/platform. Applicable values are the
        # friendly names of CPU platforms, such asminCpuPlatform: "Intel Haswell"
        # orminCpuPlatform: "Intel Sandy Bridge". For more
        # information, read Specifying a
        # Minimum CPU Platform.
        # Corresponds to the JSON property `minCpuPlatform`
        # @return [String]
        attr_accessor :min_cpu_platform
      
        # An array of network access configurations for this interface.
        # Corresponds to the JSON property `networkInterfaces`
        # @return [Array<Google::Apis::ComputeV1::NetworkInterface>]
        attr_accessor :network_interfaces
      
        # Note that for MachineImage, this is not supported yet.
        # Corresponds to the JSON property `networkPerformanceConfig`
        # @return [Google::Apis::ComputeV1::NetworkPerformanceConfig]
        attr_accessor :network_performance_config
      
        # The private IPv6 google access type for VMs.
        # If not specified, use  INHERIT_FROM_SUBNETWORK as default.
        # Note that for MachineImage, this is not supported yet.
        # Corresponds to the JSON property `privateIpv6GoogleAccess`
        # @return [String]
        attr_accessor :private_ipv6_google_access
      
        # Specifies the reservations that this instance can consume from.
        # Corresponds to the JSON property `reservationAffinity`
        # @return [Google::Apis::ComputeV1::ReservationAffinity]
        attr_accessor :reservation_affinity
      
        # Resource manager tags to be bound to the instance. Tag keys and values
        # have the same definition as resource
        # manager tags. Keys must be in the format `tagKeys/`tag_key_id``, and
        # values are in the format `tagValues/456`. The field is ignored (both PUT &
        # PATCH) when empty.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        # Resource policies (names, not URLs) applied to instances created from
        # these properties.
        # Note that for MachineImage, this is not supported yet.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Array<String>]
        attr_accessor :resource_policies
      
        # Sets the scheduling options for an Instance.
        # Corresponds to the JSON property `scheduling`
        # @return [Google::Apis::ComputeV1::Scheduling]
        attr_accessor :scheduling
      
        # A list of service accounts with specified scopes. Access tokens for these
        # service accounts are available to the instances that are created from
        # these properties. Use metadata queries to obtain the access tokens for
        # these instances.
        # Corresponds to the JSON property `serviceAccounts`
        # @return [Array<Google::Apis::ComputeV1::ServiceAccount>]
        attr_accessor :service_accounts
      
        # A set of Shielded Instance options.
        # Corresponds to the JSON property `shieldedInstanceConfig`
        # @return [Google::Apis::ComputeV1::ShieldedInstanceConfig]
        attr_accessor :shielded_instance_config
      
        # A set of instance tags.
        # Corresponds to the JSON property `tags`
        # @return [Google::Apis::ComputeV1::Tags]
        attr_accessor :tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advanced_machine_features = args[:advanced_machine_features] if args.key?(:advanced_machine_features)
          @can_ip_forward = args[:can_ip_forward] if args.key?(:can_ip_forward)
          @confidential_instance_config = args[:confidential_instance_config] if args.key?(:confidential_instance_config)
          @description = args[:description] if args.key?(:description)
          @disks = args[:disks] if args.key?(:disks)
          @guest_accelerators = args[:guest_accelerators] if args.key?(:guest_accelerators)
          @key_revocation_action_type = args[:key_revocation_action_type] if args.key?(:key_revocation_action_type)
          @labels = args[:labels] if args.key?(:labels)
          @machine_type = args[:machine_type] if args.key?(:machine_type)
          @metadata = args[:metadata] if args.key?(:metadata)
          @min_cpu_platform = args[:min_cpu_platform] if args.key?(:min_cpu_platform)
          @network_interfaces = args[:network_interfaces] if args.key?(:network_interfaces)
          @network_performance_config = args[:network_performance_config] if args.key?(:network_performance_config)
          @private_ipv6_google_access = args[:private_ipv6_google_access] if args.key?(:private_ipv6_google_access)
          @reservation_affinity = args[:reservation_affinity] if args.key?(:reservation_affinity)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
          @scheduling = args[:scheduling] if args.key?(:scheduling)
          @service_accounts = args[:service_accounts] if args.key?(:service_accounts)
          @shielded_instance_config = args[:shielded_instance_config] if args.key?(:shielded_instance_config)
          @tags = args[:tags] if args.key?(:tags)
        end
      end
      
      # Represents the change that you want to make to the instance properties.
      class InstancePropertiesPatch
        include Google::Apis::Core::Hashable
      
        # The label key-value pairs that you want to patch onto the instance.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # The metadata key-value pairs that you want to patch onto the instance. For
        # more information, see Project and
        # instance metadata.
        # Corresponds to the JSON property `metadata`
        # @return [Hash<String,String>]
        attr_accessor :metadata
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @labels = args[:labels] if args.key?(:labels)
          @metadata = args[:metadata] if args.key?(:metadata)
        end
      end
      
      # 
      class InstanceReference
        include Google::Apis::Core::Hashable
      
        # The URL for a specific instance.
        # @required compute.instancegroups.addInstances/removeInstances
        # Corresponds to the JSON property `instance`
        # @return [String]
        attr_accessor :instance
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance = args[:instance] if args.key?(:instance)
        end
      end
      
      # Represents a Instance Settings resource. You can use instance settings to
      # configure default settings for Compute Engine VM instances. For example, you
      # can use it to configure default machine type of Compute Engine VM instances.
      class InstanceSettings
        include Google::Apis::Core::Hashable
      
        # Specifies a fingerprint for instance settings, which is essentially a hash
        # of the instance settings resource's contents and used for optimistic
        # locking. The fingerprint is initially generated by Compute Engine and
        # changes after every request to modify or update the instance settings
        # resource. You must always provide an up-to-date fingerprint hash in order
        # to update or change the resource, otherwise the request will fail with
        # error 412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve the resource.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # instance_settings for instance settings.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The metadata key/value pairs assigned to all the instances in the
        # corresponding scope.
        # Corresponds to the JSON property `metadata`
        # @return [Google::Apis::ComputeV1::InstanceSettingsMetadata]
        attr_accessor :metadata
      
        # Output only. [Output Only] URL of the zone where the resource resides
        # You must specify this field as part of the HTTP request URL. It is not
        # settable as a field in the request body.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @kind = args[:kind] if args.key?(:kind)
          @metadata = args[:metadata] if args.key?(:metadata)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class InstanceSettingsMetadata
        include Google::Apis::Core::Hashable
      
        # A metadata key/value items map.
        # The total size of all keys and values must be less than 512KB.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,String>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of the resource. Always compute#metadata
        # for metadata.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
        end
      end
      
      # Represents an Instance Template resource.
      # Google Compute Engine has two Instance Template resources:
      # * [Global](/compute/docs/reference/rest/v1/instanceTemplates)
      # * [Regional](/compute/docs/reference/rest/v1/regionInstanceTemplates)
      # You can reuse a global instance template in
      # different regions whereas you can use a regional instance template in a
      # specified region only. If you want to reduce cross-region dependency or
      # achieve data residency, use a regional instance template.
      # To create VMs, managed instance groups, and reservations, you can use either
      # global or regional instance templates.
      # For more information, readInstance Templates.
      class InstanceTemplate
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The creation timestamp for this instance template
        # inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] A unique identifier for this instance template. The
        # server
        # defines this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # instanceTemplate for instance templates.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource; provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The instance properties for this instance template.
        # Corresponds to the JSON property `properties`
        # @return [Google::Apis::ComputeV1::InstanceProperties]
        attr_accessor :properties
      
        # Output only. [Output Only] URL of the region where the instance template
        # resides. Only
        # applicable for regional resources.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] The URL for this instance template. The server
        # defines this
        # URL.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # The source instance used to create the template. You can provide this as a
        # partial or full URL to the resource. For example, the following are valid
        # values:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/
        # instances/instance
        # - projects/project/zones/zone/instances/instance
        # Corresponds to the JSON property `sourceInstance`
        # @return [String]
        attr_accessor :source_instance
      
        # A specification of the parameters to use when creating the instance template
        # from a source instance.
        # Corresponds to the JSON property `sourceInstanceParams`
        # @return [Google::Apis::ComputeV1::SourceInstanceParams]
        attr_accessor :source_instance_params
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @properties = args[:properties] if args.key?(:properties)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @source_instance = args[:source_instance] if args.key?(:source_instance)
          @source_instance_params = args[:source_instance_params] if args.key?(:source_instance_params)
        end
      end
      
      # Contains a list of InstanceTemplatesScopedList.
      class InstanceTemplateAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InstanceTemplatesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::InstanceTemplatesScopedList>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceTemplateAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceTemplateAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # A list of instance templates.
      class InstanceTemplateList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InstanceTemplate resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InstanceTemplate>]
        attr_accessor :items
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # instanceTemplatesListResponse for instance template
        # lists.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceTemplateList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceTemplateList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InstanceTemplatesScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of instance templates that are contained within
        # the specified project and zone.
        # Corresponds to the JSON property `instanceTemplates`
        # @return [Array<Google::Apis::ComputeV1::InstanceTemplate>]
        attr_accessor :instance_templates
      
        # [Output Only] An informational warning that replaces the list of instance
        # templates when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstanceTemplatesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_templates = args[:instance_templates] if args.key?(:instance_templates)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] An informational warning that replaces the list of instance
        # templates when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstanceTemplatesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InstanceWithNamedPorts
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The URL of the instance.
        # Corresponds to the JSON property `instance`
        # @return [String]
        attr_accessor :instance
      
        # Output only. [Output Only] The named ports that belong to this instance group.
        # Corresponds to the JSON property `namedPorts`
        # @return [Array<Google::Apis::ComputeV1::NamedPort>]
        attr_accessor :named_ports
      
        # Output only. [Output Only] The status of the instance.
        # 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)
          @instance = args[:instance] if args.key?(:instance)
          @named_ports = args[:named_ports] if args.key?(:named_ports)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # 
      class InstancesAddResourcePoliciesRequest
        include Google::Apis::Core::Hashable
      
        # Resource policies to be added to this instance.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Array<String>]
        attr_accessor :resource_policies
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
        end
      end
      
      # 
      class InstancesBulkInsertOperationMetadata
        include Google::Apis::Core::Hashable
      
        # Status information per location (location name is key).
        # Example key: zones/us-central1-a
        # Corresponds to the JSON property `perLocationStatus`
        # @return [Hash<String,Google::Apis::ComputeV1::BulkInsertOperationStatus>]
        attr_accessor :per_location_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @per_location_status = args[:per_location_status] if args.key?(:per_location_status)
        end
      end
      
      # 
      class InstancesGetEffectiveFirewallsResponse
        include Google::Apis::Core::Hashable
      
        # [Output Only] Effective firewalls from firewall policies.
        # Corresponds to the JSON property `firewallPolicys`
        # @return [Array<Google::Apis::ComputeV1::InstancesGetEffectiveFirewallsResponseEffectiveFirewallPolicy>]
        attr_accessor :firewall_policys
      
        # Effective firewalls on the instance.
        # Corresponds to the JSON property `firewalls`
        # @return [Array<Google::Apis::ComputeV1::Firewall>]
        attr_accessor :firewalls
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @firewall_policys = args[:firewall_policys] if args.key?(:firewall_policys)
          @firewalls = args[:firewalls] if args.key?(:firewalls)
        end
      end
      
      # 
      class InstancesGetEffectiveFirewallsResponseEffectiveFirewallPolicy
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Deprecated, please use short name instead. The
        # display name
        # of the firewall policy.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. [Output Only] The name of the firewall policy.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The packet mirroring rules that apply to the
        # instance.
        # Corresponds to the JSON property `packetMirroringRules`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicyRule>]
        attr_accessor :packet_mirroring_rules
      
        # Output only. [Output only] Priority of firewall policy association. Not
        # applicable for
        # type=HIERARCHY.
        # Corresponds to the JSON property `priority`
        # @return [Fixnum]
        attr_accessor :priority
      
        # [Output Only] The rules that apply to the instance. Only rules that
        # target the specific VM instance are returned if target service accounts
        # or target secure tags are specified in the rules.
        # Corresponds to the JSON property `rules`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicyRule>]
        attr_accessor :rules
      
        # Output only. [Output Only] The short name of the firewall policy.
        # Corresponds to the JSON property `shortName`
        # @return [String]
        attr_accessor :short_name
      
        # Output only. [Output Only] The type of the firewall policy. Can be one of
        # HIERARCHY,
        # NETWORK, NETWORK_REGIONAL, SYSTEM_GLOBAL, SYSTEM_REGIONAL.
        # 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)
          @display_name = args[:display_name] if args.key?(:display_name)
          @name = args[:name] if args.key?(:name)
          @packet_mirroring_rules = args[:packet_mirroring_rules] if args.key?(:packet_mirroring_rules)
          @priority = args[:priority] if args.key?(:priority)
          @rules = args[:rules] if args.key?(:rules)
          @short_name = args[:short_name] if args.key?(:short_name)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # 
      class InstancesRemoveResourcePoliciesRequest
        include Google::Apis::Core::Hashable
      
        # Resource policies to be removed from this instance.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Array<String>]
        attr_accessor :resource_policies
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
        end
      end
      
      # 
      class InstancesReportHostAsFaultyRequest
        include Google::Apis::Core::Hashable
      
        # The disruption schedule for the VM. Required field, only allows IMMEDIATE.
        # Corresponds to the JSON property `disruptionSchedule`
        # @return [String]
        attr_accessor :disruption_schedule
      
        # 
        # Corresponds to the JSON property `faultReasons`
        # @return [Array<Google::Apis::ComputeV1::InstancesReportHostAsFaultyRequestFaultReason>]
        attr_accessor :fault_reasons
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disruption_schedule = args[:disruption_schedule] if args.key?(:disruption_schedule)
          @fault_reasons = args[:fault_reasons] if args.key?(:fault_reasons)
        end
      end
      
      # 
      class InstancesReportHostAsFaultyRequestFaultReason
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `behavior`
        # @return [String]
        attr_accessor :behavior
      
        # 
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @behavior = args[:behavior] if args.key?(:behavior)
          @description = args[:description] if args.key?(:description)
        end
      end
      
      # 
      class InstancesScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of instances contained in this scope.
        # Corresponds to the JSON property `instances`
        # @return [Array<Google::Apis::ComputeV1::Instance>]
        attr_accessor :instances
      
        # [Output Only] Informational warning which replaces the list of instances
        # when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstancesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instances = args[:instances] if args.key?(:instances)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning which replaces the list of instances
        # when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstancesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InstancesSetLabelsRequest
        include Google::Apis::Core::Hashable
      
        # Fingerprint of the previous set of labels for this resource,
        # used to prevent conflicts. Provide the latest fingerprint value when making
        # a request to add or change labels.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # 
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
        end
      end
      
      # 
      class InstancesSetMachineResourcesRequest
        include Google::Apis::Core::Hashable
      
        # A list of the type and count of accelerator cards attached to the instance.
        # Corresponds to the JSON property `guestAccelerators`
        # @return [Array<Google::Apis::ComputeV1::AcceleratorConfig>]
        attr_accessor :guest_accelerators
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @guest_accelerators = args[:guest_accelerators] if args.key?(:guest_accelerators)
        end
      end
      
      # 
      class InstancesSetMachineTypeRequest
        include Google::Apis::Core::Hashable
      
        # Full or partial URL of the machine type resource. See Machine Types for a full
        # list of
        # machine types. For example:zones/us-central1-f/machineTypes/n1-standard-1
        # Corresponds to the JSON property `machineType`
        # @return [String]
        attr_accessor :machine_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @machine_type = args[:machine_type] if args.key?(:machine_type)
        end
      end
      
      # 
      class InstancesSetMinCpuPlatformRequest
        include Google::Apis::Core::Hashable
      
        # Minimum cpu/platform this instance should be started at.
        # Corresponds to the JSON property `minCpuPlatform`
        # @return [String]
        attr_accessor :min_cpu_platform
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @min_cpu_platform = args[:min_cpu_platform] if args.key?(:min_cpu_platform)
        end
      end
      
      # 
      class InstancesSetNameRequest
        include Google::Apis::Core::Hashable
      
        # The current name of this resource, used to prevent conflicts. Provide the
        # latest name when making a request to change name.
        # Corresponds to the JSON property `currentName`
        # @return [String]
        attr_accessor :current_name
      
        # The name to be applied to the instance. Needs to be RFC 1035 compliant.
        # 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)
          @current_name = args[:current_name] if args.key?(:current_name)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # 
      class InstancesSetSecurityPolicyRequest
        include Google::Apis::Core::Hashable
      
        # The network interfaces that the security policy will be applied to. Network
        # interfaces use the nicN naming format. You can only set a
        # security policy for network interfaces with an access config.
        # Corresponds to the JSON property `networkInterfaces`
        # @return [Array<String>]
        attr_accessor :network_interfaces
      
        # A full or partial URL to a security policy to add to this instance.
        # If this field is set to an empty string it will remove the associated
        # security policy.
        # Corresponds to the JSON property `securityPolicy`
        # @return [String]
        attr_accessor :security_policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @network_interfaces = args[:network_interfaces] if args.key?(:network_interfaces)
          @security_policy = args[:security_policy] if args.key?(:security_policy)
        end
      end
      
      # 
      class InstancesSetServiceAccountRequest
        include Google::Apis::Core::Hashable
      
        # Email address of the service account.
        # Corresponds to the JSON property `email`
        # @return [String]
        attr_accessor :email
      
        # The list of scopes to be made available for this service account.
        # Corresponds to the JSON property `scopes`
        # @return [Array<String>]
        attr_accessor :scopes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @email = args[:email] if args.key?(:email)
          @scopes = args[:scopes] if args.key?(:scopes)
        end
      end
      
      # 
      class InstancesStartWithEncryptionKeyRequest
        include Google::Apis::Core::Hashable
      
        # Array of disks associated with this instance that are protected with acustomer-
        # supplied
        # encryption key.
        # In order to start the instance, the disk url and its corresponding key must
        # be provided.
        # If the disk is not protected with a customer-supplied encryption key it
        # should not be specified.
        # Corresponds to the JSON property `disks`
        # @return [Array<Google::Apis::ComputeV1::CustomerEncryptionKeyProtectedDisk>]
        attr_accessor :disks
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disks = args[:disks] if args.key?(:disks)
        end
      end
      
      # Represents a InstantSnapshot resource.
      # You can use instant snapshots to create disk rollback points quickly..
      class InstantSnapshot
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The architecture of the instant snapshot. Valid
        # values are
        # ARM64 or X86_64.
        # Corresponds to the JSON property `architecture`
        # @return [String]
        attr_accessor :architecture
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] Size of the source disk, specified in GB.
        # Corresponds to the JSON property `diskSizeGb`
        # @return [Fixnum]
        attr_accessor :disk_size_gb
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#instantSnapshot
        # for InstantSnapshot resources.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this InstantSnapshot, which
        # is essentially a hash of the labels set used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a InstantSnapshot.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels to apply to this InstantSnapshot. These can be later modified by
        # the setLabels method.
        # Label values may be empty.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Name of the resource; provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] URL of the region where the instant snapshot
        # resides.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] Status information for the instant snapshot
        # resource.
        # Corresponds to the JSON property `resourceStatus`
        # @return [Google::Apis::ComputeV1::InstantSnapshotResourceStatus]
        attr_accessor :resource_status
      
        # Output only. Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzi`
        # @return [Boolean]
        attr_accessor :satisfies_pzi
        alias_method :satisfies_pzi?, :satisfies_pzi
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource's resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # URL of the source disk used to create this instant snapshot.
        # Note that the source disk must be in the same zone/region as the
        # instant snapshot to be created. This can be a full or valid partial URL.
        # For example, the following are valid values:
        # 
        # 
        # -
        # https://www.googleapis.com/compute/v1/projects/project/zones/zone/disks/
        # disk
        # 
        # -
        # https://www.googleapis.com/compute/v1/projects/project/regions/region/
        # disks/disk
        # 
        # -
        # projects/project/zones/zone/disks/disk
        # 
        # -
        # projects/project/regions/region/disks/disk
        # 
        # -
        # zones/zone/disks/disk
        # 
        # -
        # regions/region/disks/disk
        # Corresponds to the JSON property `sourceDisk`
        # @return [String]
        attr_accessor :source_disk
      
        # Output only. [Output Only] The ID value of the disk used to create this
        # InstantSnapshot.
        # This value may be used to determine whether the InstantSnapshot
        # was taken from the current or a previous instance of a given disk name.
        # Corresponds to the JSON property `sourceDiskId`
        # @return [String]
        attr_accessor :source_disk_id
      
        # Output only. [Output Only] The status of the instantSnapshot. This can
        # beCREATING, DELETING, FAILED, orREADY.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Output only. [Output Only] URL of the zone where the instant snapshot resides.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @architecture = args[:architecture] if args.key?(:architecture)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @disk_size_gb = args[:disk_size_gb] if args.key?(:disk_size_gb)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @name = args[:name] if args.key?(:name)
          @region = args[:region] if args.key?(:region)
          @resource_status = args[:resource_status] if args.key?(:resource_status)
          @satisfies_pzi = args[:satisfies_pzi] if args.key?(:satisfies_pzi)
          @satisfies_pzs = args[:satisfies_pzs] if args.key?(:satisfies_pzs)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @source_disk = args[:source_disk] if args.key?(:source_disk)
          @source_disk_id = args[:source_disk_id] if args.key?(:source_disk_id)
          @status = args[:status] if args.key?(:status)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class InstantSnapshotAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InstantSnapshotsScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::InstantSnapshotsScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # instantSnapshotAggregatedList for aggregated lists of
        # instantSnapshots.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstantSnapshotAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstantSnapshotAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of InstantSnapshot resources.
      class InstantSnapshotList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InstantSnapshot resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InstantSnapshot>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstantSnapshotList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstantSnapshotList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InstantSnapshotResourceStatus
        include Google::Apis::Core::Hashable
      
        # [Output Only] The storage size of this instant snapshot.
        # Corresponds to the JSON property `storageSizeBytes`
        # @return [Fixnum]
        attr_accessor :storage_size_bytes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @storage_size_bytes = args[:storage_size_bytes] if args.key?(:storage_size_bytes)
        end
      end
      
      # 
      class InstantSnapshotsScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of instantSnapshots contained in this scope.
        # Corresponds to the JSON property `instantSnapshots`
        # @return [Array<Google::Apis::ComputeV1::InstantSnapshot>]
        attr_accessor :instant_snapshots
      
        # [Output Only] Informational warning which replaces the list of
        # instantSnapshots when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InstantSnapshotsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instant_snapshots = args[:instant_snapshots] if args.key?(:instant_snapshots)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning which replaces the list of
        # instantSnapshots when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InstantSnapshotsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # HttpRouteRuleMatch criteria for field values that must stay
      # within the specified integer range.
      class Int64RangeMatch
        include Google::Apis::Core::Hashable
      
        # The end of the range (exclusive) in signed long integer format.
        # Corresponds to the JSON property `rangeEnd`
        # @return [Fixnum]
        attr_accessor :range_end
      
        # The start of the range (inclusive) in signed long integer format.
        # Corresponds to the JSON property `rangeStart`
        # @return [Fixnum]
        attr_accessor :range_start
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @range_end = args[:range_end] if args.key?(:range_end)
          @range_start = args[:range_start] if args.key?(:range_start)
        end
      end
      
      # Represents an Interconnect resource.
      # An Interconnect resource is a dedicated connection between the Google
      # Cloud network and your on-premises network. For more information, read the
      # Dedicated Interconnect Overview.
      class Interconnect
        include Google::Apis::Core::Hashable
      
        # Enable or disable the application awareness feature on this Cloud
        # Interconnect.
        # Corresponds to the JSON property `aaiEnabled`
        # @return [Boolean]
        attr_accessor :aai_enabled
        alias_method :aai_enabled?, :aai_enabled
      
        # Administrative status of the interconnect. When this is set to true, the
        # Interconnect is functional and can carry traffic.
        # When set to false, no packets can be carried over the interconnect and
        # no BGP routes are exchanged over it. By default, the status is set to true.
        # Corresponds to the JSON property `adminEnabled`
        # @return [Boolean]
        attr_accessor :admin_enabled
        alias_method :admin_enabled?, :admin_enabled
      
        # Configuration information for application awareness on this Cloud
        # Interconnect.
        # Corresponds to the JSON property `applicationAwareInterconnect`
        # @return [Google::Apis::ComputeV1::InterconnectApplicationAwareInterconnect]
        attr_accessor :application_aware_interconnect
      
        # [Output only] List of features available for this Interconnect connection,
        # which can take one of the following values:
        # 
        # - IF_MACSEC: If present, then the Interconnect connection is
        # provisioned on MACsec capable hardware ports. If not present, then the
        # Interconnect connection is provisioned on non-MACsec capable ports. Any
        # attempt to enable MACsec will fail.
        # - IF_CROSS_SITE_NETWORK: If present, then the Interconnect connection is
        # provisioned exclusively for Cross-Site Networking. Any attempt to configure
        # VLAN attachments will fail. If not present, then the Interconnect
        # connection is not provisioned for Cross-Site Networking. Any attempt to use
        # it for Cross-Site Networking will fail.
        # Corresponds to the JSON property `availableFeatures`
        # @return [Array<String>]
        attr_accessor :available_features
      
        # Output only. [Output Only] A list of CircuitInfo objects, that describe the
        # individual
        # circuits in this LAG.
        # Corresponds to the JSON property `circuitInfos`
        # @return [Array<Google::Apis::ComputeV1::InterconnectCircuitInfo>]
        attr_accessor :circuit_infos
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Customer name, to put in the Letter of Authorization as the party
        # authorized to request a crossconnect.
        # Corresponds to the JSON property `customerName`
        # @return [String]
        attr_accessor :customer_name
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] A list of outages expected for this Interconnect.
        # Corresponds to the JSON property `expectedOutages`
        # @return [Array<Google::Apis::ComputeV1::InterconnectOutageNotification>]
        attr_accessor :expected_outages
      
        # Output only. [Output Only] IP address configured on the Google side of the
        # Interconnect
        # link. This can be used only for ping tests.
        # Corresponds to the JSON property `googleIpAddress`
        # @return [String]
        attr_accessor :google_ip_address
      
        # Output only. [Output Only] Google reference ID to be used when raising support
        # tickets
        # with Google or otherwise to debug backend connectivity issues.
        # Corresponds to the JSON property `googleReferenceId`
        # @return [String]
        attr_accessor :google_reference_id
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] A list of the URLs of all InterconnectAttachments
        # configured
        # to use  this Interconnect.
        # Corresponds to the JSON property `interconnectAttachments`
        # @return [Array<String>]
        attr_accessor :interconnect_attachments
      
        # Output only. [Output Only] URLs of InterconnectGroups that include this
        # Interconnect.
        # Order is arbitrary and items are unique.
        # Corresponds to the JSON property `interconnectGroups`
        # @return [Array<String>]
        attr_accessor :interconnect_groups
      
        # Type of interconnect, which can take one of the following values:
        # 
        # - PARTNER: A partner-managed interconnection shared between customers
        # though a partner.
        # - DEDICATED: A dedicated physical interconnection with the
        # customer.
        # Note that a value IT_PRIVATE has been deprecated in favor of DEDICATED.
        # Corresponds to the JSON property `interconnectType`
        # @return [String]
        attr_accessor :interconnect_type
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#interconnect
        # for interconnects.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this Interconnect, which
        # is essentially a hash of the labels set used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve an Interconnect.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels for this resource. These can only be added or modified by thesetLabels
        # method. Each label key/value pair must comply withRFC1035.
        # Label values may be empty.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Type of link requested, which can take one of the following values:
        # 
        # - LINK_TYPE_ETHERNET_10G_LR: A 10G Ethernet with LR optics
        # - LINK_TYPE_ETHERNET_100G_LR: A 100G Ethernet with LR optics.
        # - LINK_TYPE_ETHERNET_400G_LR4: A 400G Ethernet with LR4 optics.
        # Note that this field indicates the speed of each of
        # the links in the bundle, not the speed of the entire bundle.
        # Corresponds to the JSON property `linkType`
        # @return [String]
        attr_accessor :link_type
      
        # URL of the InterconnectLocation object that represents where this
        # connection is to be provisioned.
        # Corresponds to the JSON property `location`
        # @return [String]
        attr_accessor :location
      
        # Configuration information for enabling Media Access Control security
        # (MACsec) on this Cloud Interconnect connection between Google and your
        # on-premises router.
        # Corresponds to the JSON property `macsec`
        # @return [Google::Apis::ComputeV1::InterconnectMacsec]
        attr_accessor :macsec
      
        # Enable or disable MACsec on this Interconnect connection. MACsec enablement
        # fails if the MACsec object is not specified.
        # Corresponds to the JSON property `macsecEnabled`
        # @return [Boolean]
        attr_accessor :macsec_enabled
        alias_method :macsec_enabled?, :macsec_enabled
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Email address to contact the customer NOC for operations and maintenance
        # notifications regarding this Interconnect. If specified, this will be used
        # for notifications in addition to all other forms described, such as
        # Cloud Monitoring logs alerting and Cloud Notifications. This field is
        # required for users who sign up for Cloud Interconnect using
        # workforce identity federation.
        # Corresponds to the JSON property `nocContactEmail`
        # @return [String]
        attr_accessor :noc_contact_email
      
        # Output only. [Output Only] The current status of this Interconnect's
        # functionality,
        # which can take one of the following values:
        # 
        # - OS_ACTIVE: A valid Interconnect, which is turned up and is ready to
        # use. Attachments may be provisioned on this Interconnect.
        # - OS_UNPROVISIONED: An Interconnect that has not completed turnup. No
        # attachments may be provisioned on this Interconnect.
        # - OS_UNDER_MAINTENANCE: An Interconnect that is undergoing internal
        # maintenance. No attachments may be provisioned or updated on this
        # Interconnect.
        # Corresponds to the JSON property `operationalStatus`
        # @return [String]
        attr_accessor :operational_status
      
        # Additional interconnect parameters.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::InterconnectParams]
        attr_accessor :params
      
        # Output only. [Output Only] IP address configured on the customer side of the
        # Interconnect link. The customer should configure this IP address during
        # turnup when prompted by Google NOC. This can be used only for ping tests.
        # Corresponds to the JSON property `peerIpAddress`
        # @return [String]
        attr_accessor :peer_ip_address
      
        # Output only. [Output Only] Number of links actually provisioned in this
        # interconnect.
        # Corresponds to the JSON property `provisionedLinkCount`
        # @return [Fixnum]
        attr_accessor :provisioned_link_count
      
        # Indicates that this is a Cross-Cloud Interconnect. This field specifies the
        # location outside of Google's network that the interconnect is connected to.
        # Corresponds to the JSON property `remoteLocation`
        # @return [String]
        attr_accessor :remote_location
      
        # Optional. This parameter can be provided only with Interconnect INSERT. It
        # isn't valid for Interconnect PATCH. List of features requested for this
        # Interconnect connection, which can take one of the following values:
        # 
        # - IF_MACSEC: If specified, then the connection is created on MACsec
        # capable hardware ports. If not specified, non-MACsec capable ports will
        # also be considered.
        # - IF_CROSS_SITE_NETWORK: If specified, then the connection is created
        # exclusively for Cross-Site Networking. The connection can not be used for
        # Cross-Site Networking unless this feature is specified.
        # Corresponds to the JSON property `requestedFeatures`
        # @return [Array<String>]
        attr_accessor :requested_features
      
        # Target number of physical links in the link bundle, as requested by the
        # customer.
        # Corresponds to the JSON property `requestedLinkCount`
        # @return [Fixnum]
        attr_accessor :requested_link_count
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] The current state of Interconnect functionality,
        # which can
        # take one of the following values:
        # 
        # - ACTIVE: The Interconnect is valid, turned up and ready to use.
        # Attachments may be provisioned on this Interconnect.
        # - UNPROVISIONED: The Interconnect has not completed turnup. No
        # attachments may be provisioned on this Interconnect.
        # - UNDER_MAINTENANCE: The Interconnect is undergoing internal maintenance.
        # No attachments may be provisioned or updated on this
        # Interconnect.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # Specific subzone in the InterconnectLocation that represents where
        # this connection is to be provisioned.
        # Corresponds to the JSON property `subzone`
        # @return [String]
        attr_accessor :subzone
      
        # Output only. [Output Only] A list of the URLs of all CrossSiteNetwork
        # WireGroups
        # configured to use this Interconnect. The Interconnect cannot be deleted if
        # this list is non-empty.
        # Corresponds to the JSON property `wireGroups`
        # @return [Array<String>]
        attr_accessor :wire_groups
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @aai_enabled = args[:aai_enabled] if args.key?(:aai_enabled)
          @admin_enabled = args[:admin_enabled] if args.key?(:admin_enabled)
          @application_aware_interconnect = args[:application_aware_interconnect] if args.key?(:application_aware_interconnect)
          @available_features = args[:available_features] if args.key?(:available_features)
          @circuit_infos = args[:circuit_infos] if args.key?(:circuit_infos)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @customer_name = args[:customer_name] if args.key?(:customer_name)
          @description = args[:description] if args.key?(:description)
          @expected_outages = args[:expected_outages] if args.key?(:expected_outages)
          @google_ip_address = args[:google_ip_address] if args.key?(:google_ip_address)
          @google_reference_id = args[:google_reference_id] if args.key?(:google_reference_id)
          @id = args[:id] if args.key?(:id)
          @interconnect_attachments = args[:interconnect_attachments] if args.key?(:interconnect_attachments)
          @interconnect_groups = args[:interconnect_groups] if args.key?(:interconnect_groups)
          @interconnect_type = args[:interconnect_type] if args.key?(:interconnect_type)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @link_type = args[:link_type] if args.key?(:link_type)
          @location = args[:location] if args.key?(:location)
          @macsec = args[:macsec] if args.key?(:macsec)
          @macsec_enabled = args[:macsec_enabled] if args.key?(:macsec_enabled)
          @name = args[:name] if args.key?(:name)
          @noc_contact_email = args[:noc_contact_email] if args.key?(:noc_contact_email)
          @operational_status = args[:operational_status] if args.key?(:operational_status)
          @params = args[:params] if args.key?(:params)
          @peer_ip_address = args[:peer_ip_address] if args.key?(:peer_ip_address)
          @provisioned_link_count = args[:provisioned_link_count] if args.key?(:provisioned_link_count)
          @remote_location = args[:remote_location] if args.key?(:remote_location)
          @requested_features = args[:requested_features] if args.key?(:requested_features)
          @requested_link_count = args[:requested_link_count] if args.key?(:requested_link_count)
          @satisfies_pzs = args[:satisfies_pzs] if args.key?(:satisfies_pzs)
          @self_link = args[:self_link] if args.key?(:self_link)
          @state = args[:state] if args.key?(:state)
          @subzone = args[:subzone] if args.key?(:subzone)
          @wire_groups = args[:wire_groups] if args.key?(:wire_groups)
        end
      end
      
      # Configuration information for application awareness on this Cloud
      # Interconnect.
      class InterconnectApplicationAwareInterconnect
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `bandwidthPercentagePolicy`
        # @return [Google::Apis::ComputeV1::InterconnectApplicationAwareInterconnectBandwidthPercentagePolicy]
        attr_accessor :bandwidth_percentage_policy
      
        # Description for the application awareness profile on this Cloud
        # Interconnect.
        # Corresponds to the JSON property `profileDescription`
        # @return [String]
        attr_accessor :profile_description
      
        # Optional field to specify a list of shape average percentages to be
        # applied in conjunction with StrictPriorityPolicy or
        # BandwidthPercentagePolicy.
        # Corresponds to the JSON property `shapeAveragePercentages`
        # @return [Array<Google::Apis::ComputeV1::InterconnectApplicationAwareInterconnectBandwidthPercentage>]
        attr_accessor :shape_average_percentages
      
        # Specify configuration for StrictPriorityPolicy.
        # Corresponds to the JSON property `strictPriorityPolicy`
        # @return [Google::Apis::ComputeV1::InterconnectApplicationAwareInterconnectStrictPriorityPolicy]
        attr_accessor :strict_priority_policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bandwidth_percentage_policy = args[:bandwidth_percentage_policy] if args.key?(:bandwidth_percentage_policy)
          @profile_description = args[:profile_description] if args.key?(:profile_description)
          @shape_average_percentages = args[:shape_average_percentages] if args.key?(:shape_average_percentages)
          @strict_priority_policy = args[:strict_priority_policy] if args.key?(:strict_priority_policy)
        end
      end
      
      # Specify bandwidth percentages [1-100] for various traffic classes in
      # BandwidthPercentagePolicy. The sum of all percentages must equal 100.
      # All traffic classes must have a percentage value specified.
      class InterconnectApplicationAwareInterconnectBandwidthPercentage
        include Google::Apis::Core::Hashable
      
        # Bandwidth percentage for a specific traffic class.
        # Corresponds to the JSON property `percentage`
        # @return [Fixnum]
        attr_accessor :percentage
      
        # TrafficClass whose bandwidth percentage is being specified.
        # Corresponds to the JSON property `trafficClass`
        # @return [String]
        attr_accessor :traffic_class
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @percentage = args[:percentage] if args.key?(:percentage)
          @traffic_class = args[:traffic_class] if args.key?(:traffic_class)
        end
      end
      
      # 
      class InterconnectApplicationAwareInterconnectBandwidthPercentagePolicy
        include Google::Apis::Core::Hashable
      
        # Specify bandwidth percentages for various traffic classes for queuing
        # type Bandwidth Percent.
        # Corresponds to the JSON property `bandwidthPercentages`
        # @return [Array<Google::Apis::ComputeV1::InterconnectApplicationAwareInterconnectBandwidthPercentage>]
        attr_accessor :bandwidth_percentages
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bandwidth_percentages = args[:bandwidth_percentages] if args.key?(:bandwidth_percentages)
        end
      end
      
      # Specify configuration for StrictPriorityPolicy.
      class InterconnectApplicationAwareInterconnectStrictPriorityPolicy
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # Represents an Interconnect Attachment (VLAN) resource.
      # You can use Interconnect attachments (VLANS) to connect your Virtual Private
      # Cloud networks to your on-premises networks through an Interconnect.
      # For more information, read
      # Creating VLAN Attachments.
      class InterconnectAttachment
        include Google::Apis::Core::Hashable
      
        # Determines whether this Attachment will carry packets.
        # Not present for PARTNER_PROVIDER.
        # Corresponds to the JSON property `adminEnabled`
        # @return [Boolean]
        attr_accessor :admin_enabled
        alias_method :admin_enabled?, :admin_enabled
      
        # Output only. [Output Only] URL of the AttachmentGroup that includes this
        # Attachment.
        # Corresponds to the JSON property `attachmentGroup`
        # @return [String]
        attr_accessor :attachment_group
      
        # Provisioned bandwidth capacity for the interconnect attachment. For
        # attachments of type DEDICATED, the user can set the bandwidth.
        # For attachments of type PARTNER, the Google Partner that is operating
        # the interconnect must set the bandwidth.
        # Output only for PARTNER type, mutable for PARTNER_PROVIDER and DEDICATED,
        # and can take one of the following values:
        # 
        # - BPS_50M: 50 Mbit/s
        # - BPS_100M: 100 Mbit/s
        # - BPS_200M: 200 Mbit/s
        # - BPS_300M: 300 Mbit/s
        # - BPS_400M: 400 Mbit/s
        # - BPS_500M: 500 Mbit/s
        # - BPS_1G: 1 Gbit/s
        # - BPS_2G: 2 Gbit/s
        # - BPS_5G: 5 Gbit/s
        # - BPS_10G: 10 Gbit/s
        # - BPS_20G: 20 Gbit/s
        # - BPS_50G: 50 Gbit/s
        # - BPS_100G: 100 Gbit/s
        # - BPS_400G: 400 Gbit/s
        # Corresponds to the JSON property `bandwidth`
        # @return [String]
        attr_accessor :bandwidth
      
        # Single IPv4 address + prefix length to be configured on the cloud router
        # interface for this interconnect attachment.
        # 
        # - Both candidate_cloud_router_ip_address and
        # candidate_customer_router_ip_address fields must be set or both must be
        # unset.
        # - Prefix length of both candidate_cloud_router_ip_address and
        # candidate_customer_router_ip_address must be the same.
        # - Max prefix length is 31.
        # Corresponds to the JSON property `candidateCloudRouterIpAddress`
        # @return [String]
        attr_accessor :candidate_cloud_router_ip_address
      
        # Single IPv6 address + prefix length to be configured on the cloud router
        # interface for this interconnect attachment.
        # 
        # - Both candidate_cloud_router_ipv6_address and
        # candidate_customer_router_ipv6_address fields must be set or both must be
        # unset.
        # - Prefix length of both candidate_cloud_router_ipv6_address and
        # candidate_customer_router_ipv6_address must be the same.
        # - Max prefix length is 126.
        # Corresponds to the JSON property `candidateCloudRouterIpv6Address`
        # @return [String]
        attr_accessor :candidate_cloud_router_ipv6_address
      
        # Single IPv4 address + prefix length to be configured on the customer router
        # interface for this interconnect attachment.
        # Corresponds to the JSON property `candidateCustomerRouterIpAddress`
        # @return [String]
        attr_accessor :candidate_customer_router_ip_address
      
        # Single IPv6 address + prefix length to be configured on the customer router
        # interface for this interconnect attachment.
        # Corresponds to the JSON property `candidateCustomerRouterIpv6Address`
        # @return [String]
        attr_accessor :candidate_customer_router_ipv6_address
      
        # This field is not available.
        # Corresponds to the JSON property `candidateIpv6Subnets`
        # @return [Array<String>]
        attr_accessor :candidate_ipv6_subnets
      
        # Input only. Up to 16 candidate prefixes that can be used to restrict the
        # allocation
        # of cloudRouterIpAddress and customerRouterIpAddress for this attachment.
        # All prefixes must be within link-local address space (169.254.0.0/16) and
        # must be /29 or shorter (/28, /27, etc). Google will attempt to select an
        # unused /29 from the supplied candidate prefix(es). The request will fail if
        # all possible /29s are in use on Google's edge. If not supplied, Google will
        # randomly select an unused /29 from all of link-local space.
        # Corresponds to the JSON property `candidateSubnets`
        # @return [Array<String>]
        attr_accessor :candidate_subnets
      
        # Output only. [Output Only] IPv4 address + prefix length to be configured on
        # Cloud Router
        # Interface for this interconnect attachment.
        # Corresponds to the JSON property `cloudRouterIpAddress`
        # @return [String]
        attr_accessor :cloud_router_ip_address
      
        # Output only. [Output Only] IPv6 address + prefix length to be configured on
        # Cloud
        # Router Interface for this interconnect attachment.
        # Corresponds to the JSON property `cloudRouterIpv6Address`
        # @return [String]
        attr_accessor :cloud_router_ipv6_address
      
        # This field is not available.
        # Corresponds to the JSON property `cloudRouterIpv6InterfaceId`
        # @return [String]
        attr_accessor :cloud_router_ipv6_interface_id
      
        # Output only. [Output Only] Constraints for this attachment, if any. The
        # attachment does
        # not work if these constraints are not met.
        # Corresponds to the JSON property `configurationConstraints`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentConfigurationConstraints]
        attr_accessor :configuration_constraints
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Output only. [Output Only] IPv4 address + prefix length to be configured on
        # the customer
        # router subinterface for this interconnect attachment.
        # Corresponds to the JSON property `customerRouterIpAddress`
        # @return [String]
        attr_accessor :customer_router_ip_address
      
        # Output only. [Output Only] IPv6 address + prefix length to be configured on
        # the
        # customer router subinterface for this interconnect attachment.
        # Corresponds to the JSON property `customerRouterIpv6Address`
        # @return [String]
        attr_accessor :customer_router_ipv6_address
      
        # This field is not available.
        # Corresponds to the JSON property `customerRouterIpv6InterfaceId`
        # @return [String]
        attr_accessor :customer_router_ipv6_interface_id
      
        # Output only. [Output Only] Dataplane version for this InterconnectAttachment.
        # This
        # field is only present for Dataplane version 2 and higher. Absence of this
        # field in the API output indicates that the Dataplane is version 1.
        # Corresponds to the JSON property `dataplaneVersion`
        # @return [Fixnum]
        attr_accessor :dataplane_version
      
        # An optional description of this resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Input only. Desired availability domain for the attachment. Only available for
        # type
        # PARTNER, at creation time, and can take one of the following values:
        # 
        # - AVAILABILITY_DOMAIN_ANY
        # - AVAILABILITY_DOMAIN_1
        # - AVAILABILITY_DOMAIN_2
        # For improved reliability, customers should configure a pair of attachments,
        # one per availability domain. The selected availability domain will be
        # provided to the Partner via the pairing key, so that the provisioned
        # circuit will lie in the specified domain. If not specified, the value will
        # default to AVAILABILITY_DOMAIN_ANY.
        # Corresponds to the JSON property `edgeAvailabilityDomain`
        # @return [String]
        attr_accessor :edge_availability_domain
      
        # Indicates the user-supplied encryption option of this VLAN attachment
        # (interconnectAttachment). Can only be specified at attachment creation
        # for PARTNER or DEDICATED attachments.
        # Possible values are:
        # 
        # - NONE - This is the default value, which means that the
        # VLAN attachment carries unencrypted traffic. VMs are able to send
        # traffic to, or receive traffic from, such a VLAN attachment.
        # - IPSEC - The VLAN attachment carries only encrypted
        # traffic that is encrypted by an IPsec device, such as an HA VPN gateway or
        # third-party IPsec VPN. VMs cannot directly send traffic to, or receive
        # traffic from, such a VLAN attachment. To use *HA VPN over Cloud
        # Interconnect*, the VLAN attachment must be created with this
        # option.
        # Corresponds to the JSON property `encryption`
        # @return [String]
        attr_accessor :encryption
      
        # Output only. [Output Only] Google reference ID, to be used when raising
        # support tickets
        # with Google or otherwise to debug backend connectivity issues.
        # [Deprecated] This field is not used.
        # Corresponds to the JSON property `googleReferenceId`
        # @return [String]
        attr_accessor :google_reference_id
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # URL of the underlying Interconnect object that this attachment's traffic
        # will traverse through.
        # Corresponds to the JSON property `interconnect`
        # @return [String]
        attr_accessor :interconnect
      
        # A list of URLs of addresses that have been reserved for the VLAN
        # attachment. Used only for the VLAN attachment that has the encryption
        # option as IPSEC. The addresses must be regional internal IP address ranges.
        # When creating an HA VPN gateway over the VLAN attachment, if the attachment
        # is configured to use a regional internal IP address, then the VPN gateway's
        # IP address is allocated from the IP address range specified here. For
        # example, if the HA VPN gateway's interface 0 is paired to this VLAN
        # attachment, then a regional internal IP address for the VPN gateway
        # interface 0 will be allocated from the IP address specified for this
        # VLAN attachment.
        # If this field is not specified when creating the VLAN attachment, then
        # later on when creating an HA VPN gateway on this VLAN attachment, the HA
        # VPN gateway's IP address is allocated from the regional external IP address
        # pool.
        # Corresponds to the JSON property `ipsecInternalAddresses`
        # @return [Array<String>]
        attr_accessor :ipsec_internal_addresses
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # interconnectAttachment for interconnect attachments.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # L2 Interconnect Attachment related configuration.
        # Corresponds to the JSON property `l2Forwarding`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentL2Forwarding]
        attr_accessor :l2_forwarding
      
        # A fingerprint for the labels being applied to this InterconnectAttachment,
        # which is essentially a hash of the labels set used for optimistic locking.
        # The fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve an InterconnectAttachment.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels for this resource. These can only be added or modified by thesetLabels
        # method. Each label key/value pair must comply withRFC1035.
        # Label values may be empty.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Maximum Transmission Unit (MTU), in bytes, of packets passing through this
        # interconnect attachment.
        # Valid values are 1440, 1460, 1500, and 8896. If not specified,
        # the value will default to 1440.
        # Corresponds to the JSON property `mtu`
        # @return [Fixnum]
        attr_accessor :mtu
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The current status of whether or not this
        # interconnect
        # attachment is functional, which can take one of the following values:
        # 
        # - OS_ACTIVE: The attachment has been turned up and is ready to
        # use.
        # - OS_UNPROVISIONED: The attachment is not ready to use yet,
        # because turnup is not complete.
        # Corresponds to the JSON property `operationalStatus`
        # @return [String]
        attr_accessor :operational_status
      
        # [Output only for type PARTNER. Input only for PARTNER_PROVIDER. Not
        # present for DEDICATED].
        # The opaque identifier of a PARTNER attachment used to initiate
        # provisioning with a selected partner.
        # Of the form "XXXXX/region/domain"
        # Corresponds to the JSON property `pairingKey`
        # @return [String]
        attr_accessor :pairing_key
      
        # Additional interconnect attachment parameters.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentParams]
        attr_accessor :params
      
        # Optional BGP ASN for the router supplied by a Layer 3 Partner if they
        # configured BGP on behalf of the customer.
        # Output only for PARTNER type, input only for PARTNER_PROVIDER, not
        # available for DEDICATED.
        # Corresponds to the JSON property `partnerAsn`
        # @return [Fixnum]
        attr_accessor :partner_asn
      
        # Informational metadata about Partner attachments from Partners to display
        # to customers.  These fields are propagated from PARTNER_PROVIDER
        # attachments to their corresponding PARTNER attachments.
        # Corresponds to the JSON property `partnerMetadata`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentPartnerMetadata]
        attr_accessor :partner_metadata
      
        # Information for an interconnect attachment when this belongs to an
        # interconnect of type DEDICATED.
        # Corresponds to the JSON property `privateInterconnectInfo`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentPrivateInfo]
        attr_accessor :private_interconnect_info
      
        # Output only. [Output Only] URL of the region where the regional interconnect
        # attachment
        # resides.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only]
        # If the attachment is on a Cross-Cloud Interconnect connection, this field
        # contains the interconnect's remote location service provider. Example
        # values: "Amazon Web Services" "Microsoft Azure".
        # The field is set only for attachments on Cross-Cloud Interconnect
        # connections. Its value is copied from the InterconnectRemoteLocation
        # remoteService field.
        # Corresponds to the JSON property `remoteService`
        # @return [String]
        attr_accessor :remote_service
      
        # URL of the Cloud Router to be used for dynamic routing. This router must be
        # in the same region as this InterconnectAttachment. The
        # InterconnectAttachment will automatically connect the Interconnect to the
        # network & region within which the Cloud Router is configured.
        # Corresponds to the JSON property `router`
        # @return [String]
        attr_accessor :router
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # The stack type for this interconnect attachment to identify whether the
        # IPv6 feature is enabled or not. If not specified, IPV4_ONLY
        # will be used.
        # This field can be both set at interconnect attachments creation and
        # update interconnect attachment operations.
        # Corresponds to the JSON property `stackType`
        # @return [String]
        attr_accessor :stack_type
      
        # Output only. [Output Only] The current state of this attachment's
        # functionality.
        # Enum values ACTIVE and UNPROVISIONED are shared by DEDICATED/PRIVATE,
        # PARTNER, and PARTNER_PROVIDER interconnect attachments, while enum values
        # PENDING_PARTNER, PARTNER_REQUEST_RECEIVED, and PENDING_CUSTOMER are used
        # for only PARTNER and PARTNER_PROVIDER interconnect attachments.
        # This state can take one of the following values:
        # 
        # - ACTIVE: The attachment has been turned up and is ready to use.
        # - UNPROVISIONED: The attachment is not ready to use yet, because turnup
        # is not complete.
        # - PENDING_PARTNER: A newly-created PARTNER attachment that has not yet
        # been configured on the Partner side.
        # - PARTNER_REQUEST_RECEIVED: A PARTNER attachment is in the process of
        # provisioning after a PARTNER_PROVIDER attachment was created that
        # references it.
        # - PENDING_CUSTOMER: A PARTNER or PARTNER_PROVIDER
        # attachment that is waiting for a customer to activate it.
        # - DEFUNCT:
        # The attachment was deleted externally and is no longer functional. This
        # could be because the associated Interconnect was removed, or because the
        # other side of a Partner attachment was deleted.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # Input only. Length of the IPv4 subnet mask.
        # Allowed values:
        # 
        # 
        # - 29 (default)
        # - 30
        # The default value is 29, except for Cross-Cloud Interconnect
        # connections that use an InterconnectRemoteLocation with a
        # constraints.subnetLengthRange.min equal to 30. For example,
        # connections that use an Azure remote location fall into this
        # category. In these cases, the default value is 30, and requesting
        # 29 returns an error.
        # Where both 29 and 30 are allowed, 29 is preferred, because it gives
        # Google Cloud Support more debugging visibility.
        # Corresponds to the JSON property `subnetLength`
        # @return [Fixnum]
        attr_accessor :subnet_length
      
        # The type of interconnect attachment this is, which can take one of the
        # following values:
        # 
        # - DEDICATED: an attachment to a Dedicated Interconnect.
        # - PARTNER: an attachment to a Partner Interconnect, created by the
        # customer.
        # - PARTNER_PROVIDER: an attachment to a Partner Interconnect, created by
        # the partner.
        # - L2_DEDICATED: a L2 attachment to a Dedicated Interconnect.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # The IEEE 802.1Q VLAN tag for this attachment, in the range 2-4093.
        # Only specified at creation time.
        # Corresponds to the JSON property `vlanTag8021q`
        # @return [Fixnum]
        attr_accessor :vlan_tag8021q
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @admin_enabled = args[:admin_enabled] if args.key?(:admin_enabled)
          @attachment_group = args[:attachment_group] if args.key?(:attachment_group)
          @bandwidth = args[:bandwidth] if args.key?(:bandwidth)
          @candidate_cloud_router_ip_address = args[:candidate_cloud_router_ip_address] if args.key?(:candidate_cloud_router_ip_address)
          @candidate_cloud_router_ipv6_address = args[:candidate_cloud_router_ipv6_address] if args.key?(:candidate_cloud_router_ipv6_address)
          @candidate_customer_router_ip_address = args[:candidate_customer_router_ip_address] if args.key?(:candidate_customer_router_ip_address)
          @candidate_customer_router_ipv6_address = args[:candidate_customer_router_ipv6_address] if args.key?(:candidate_customer_router_ipv6_address)
          @candidate_ipv6_subnets = args[:candidate_ipv6_subnets] if args.key?(:candidate_ipv6_subnets)
          @candidate_subnets = args[:candidate_subnets] if args.key?(:candidate_subnets)
          @cloud_router_ip_address = args[:cloud_router_ip_address] if args.key?(:cloud_router_ip_address)
          @cloud_router_ipv6_address = args[:cloud_router_ipv6_address] if args.key?(:cloud_router_ipv6_address)
          @cloud_router_ipv6_interface_id = args[:cloud_router_ipv6_interface_id] if args.key?(:cloud_router_ipv6_interface_id)
          @configuration_constraints = args[:configuration_constraints] if args.key?(:configuration_constraints)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @customer_router_ip_address = args[:customer_router_ip_address] if args.key?(:customer_router_ip_address)
          @customer_router_ipv6_address = args[:customer_router_ipv6_address] if args.key?(:customer_router_ipv6_address)
          @customer_router_ipv6_interface_id = args[:customer_router_ipv6_interface_id] if args.key?(:customer_router_ipv6_interface_id)
          @dataplane_version = args[:dataplane_version] if args.key?(:dataplane_version)
          @description = args[:description] if args.key?(:description)
          @edge_availability_domain = args[:edge_availability_domain] if args.key?(:edge_availability_domain)
          @encryption = args[:encryption] if args.key?(:encryption)
          @google_reference_id = args[:google_reference_id] if args.key?(:google_reference_id)
          @id = args[:id] if args.key?(:id)
          @interconnect = args[:interconnect] if args.key?(:interconnect)
          @ipsec_internal_addresses = args[:ipsec_internal_addresses] if args.key?(:ipsec_internal_addresses)
          @kind = args[:kind] if args.key?(:kind)
          @l2_forwarding = args[:l2_forwarding] if args.key?(:l2_forwarding)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @mtu = args[:mtu] if args.key?(:mtu)
          @name = args[:name] if args.key?(:name)
          @operational_status = args[:operational_status] if args.key?(:operational_status)
          @pairing_key = args[:pairing_key] if args.key?(:pairing_key)
          @params = args[:params] if args.key?(:params)
          @partner_asn = args[:partner_asn] if args.key?(:partner_asn)
          @partner_metadata = args[:partner_metadata] if args.key?(:partner_metadata)
          @private_interconnect_info = args[:private_interconnect_info] if args.key?(:private_interconnect_info)
          @region = args[:region] if args.key?(:region)
          @remote_service = args[:remote_service] if args.key?(:remote_service)
          @router = args[:router] if args.key?(:router)
          @satisfies_pzs = args[:satisfies_pzs] if args.key?(:satisfies_pzs)
          @self_link = args[:self_link] if args.key?(:self_link)
          @stack_type = args[:stack_type] if args.key?(:stack_type)
          @state = args[:state] if args.key?(:state)
          @subnet_length = args[:subnet_length] if args.key?(:subnet_length)
          @type = args[:type] if args.key?(:type)
          @vlan_tag8021q = args[:vlan_tag8021q] if args.key?(:vlan_tag8021q)
        end
      end
      
      # 
      class InterconnectAttachmentAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InterconnectAttachmentsScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::InterconnectAttachmentsScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # interconnectAttachmentAggregatedList for aggregated
        # lists of interconnect attachments.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InterconnectAttachmentAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InterconnectAttachmentConfigurationConstraints
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Whether the attachment's BGP session
        # requires/allows/disallows BGP MD5 authentication. This can take one of
        # the following values: MD5_OPTIONAL, MD5_REQUIRED, MD5_UNSUPPORTED.
        # For example, a Cross-Cloud Interconnect connection to a remote cloud
        # provider that requires BGP MD5 authentication has the
        # interconnectRemoteLocation attachment_configuration_constraints.bgp_md5
        # field set to MD5_REQUIRED, and that property is propagated to the
        # attachment. Similarly, if BGP MD5 is MD5_UNSUPPORTED, an error is
        # returned if MD5 is requested.
        # Corresponds to the JSON property `bgpMd5`
        # @return [String]
        attr_accessor :bgp_md5
      
        # Output only. [Output Only] List of ASN ranges that the remote location is
        # known to
        # support. Formatted as an array of inclusive ranges `min: min-value, max:
        # max-value`. For example, [`min: 123, max: 123`, `min: 64512, max: 65534`]
        # allows the peer ASN to be 123 or anything in the range 64512-65534.
        # This field is only advisory. Although the API accepts other ranges, these
        # are the ranges that we recommend.
        # Corresponds to the JSON property `bgpPeerAsnRanges`
        # @return [Array<Google::Apis::ComputeV1::InterconnectAttachmentConfigurationConstraintsBgpPeerAsnRange>]
        attr_accessor :bgp_peer_asn_ranges
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bgp_md5 = args[:bgp_md5] if args.key?(:bgp_md5)
          @bgp_peer_asn_ranges = args[:bgp_peer_asn_ranges] if args.key?(:bgp_peer_asn_ranges)
        end
      end
      
      # 
      class InterconnectAttachmentConfigurationConstraintsBgpPeerAsnRange
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `max`
        # @return [Fixnum]
        attr_accessor :max
      
        # 
        # Corresponds to the JSON property `min`
        # @return [Fixnum]
        attr_accessor :min
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max = args[:max] if args.key?(:max)
          @min = args[:min] if args.key?(:min)
        end
      end
      
      # An interconnect attachment group resource allows customers to create,
      # analyze, and expand highly available deployments.
      class InterconnectAttachmentGroup
        include Google::Apis::Core::Hashable
      
        # Attachments in the AttachmentGroup. Keys are arbitrary user-specified
        # strings. Users are encouraged, but not required, to use their preferred
        # format for resource links as keys.
        # Note that there are add-members and remove-members methods in gcloud.
        # The size of this map is limited by an "Attachments per group" quota.
        # Corresponds to the JSON property `attachments`
        # @return [Hash<String,Google::Apis::ComputeV1::InterconnectAttachmentGroupAttachment>]
        attr_accessor :attachments
      
        # [Output Only] The redundancy this group is configured to support. The way a
        # user queries what SLA their Attachment gets is by looking at this field of
        # the Attachment's AttachmentGroup.
        # Corresponds to the JSON property `configured`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentGroupConfigured]
        attr_accessor :configured
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Opaque system-generated token that uniquely identifies the configuration.
        # If provided when patching a configuration in update mode, the provided
        # token must match the current token or the update is rejected. This provides
        # a reliable means of doing read-modify-write (optimistic locking) as
        # described byAIP 154.
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # Output only. [Output Only] The unique identifier for the resource type. The
        # server
        # generates this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # The user's intent for this AttachmentGroup. This is the only required field
        # besides the name that must be specified on group creation.
        # Corresponds to the JSON property `intent`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentGroupIntent]
        attr_accessor :intent
      
        # The URL of an InterconnectGroup that groups these Attachments'
        # Interconnects. Customers do not need to set this unless directed by
        # Google Support.
        # Corresponds to the JSON property `interconnectGroup`
        # @return [String]
        attr_accessor :interconnect_group
      
        # Output only. [Output Only] Type of the resource. Always
        # compute#interconnectAttachmentGroup.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] An analysis of the logical layout of Attachments in this
        # group. Every Attachment in the group is shown once in this structure.
        # Corresponds to the JSON property `logicalStructure`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentGroupLogicalStructure]
        attr_accessor :logical_structure
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @attachments = args[:attachments] if args.key?(:attachments)
          @configured = args[:configured] if args.key?(:configured)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @intent = args[:intent] if args.key?(:intent)
          @interconnect_group = args[:interconnect_group] if args.key?(:interconnect_group)
          @kind = args[:kind] if args.key?(:kind)
          @logical_structure = args[:logical_structure] if args.key?(:logical_structure)
          @name = args[:name] if args.key?(:name)
          @self_link = args[:self_link] if args.key?(:self_link)
        end
      end
      
      # An Attachment in this AttachmentGroup.
      class InterconnectAttachmentGroupAttachment
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `attachment`
        # @return [String]
        attr_accessor :attachment
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @attachment = args[:attachment] if args.key?(:attachment)
        end
      end
      
      # [Output Only] The redundancy this group is configured to support. The way a
      # user queries what SLA their Attachment gets is by looking at this field of
      # the Attachment's AttachmentGroup.
      class InterconnectAttachmentGroupConfigured
        include Google::Apis::Core::Hashable
      
        # [Output Only] Which SLA this group is configured to support, and why this
        # group does or does not meet that SLA's requirements.
        # Corresponds to the JSON property `availabilitySla`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentGroupConfiguredAvailabilitySla]
        attr_accessor :availability_sla
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @availability_sla = args[:availability_sla] if args.key?(:availability_sla)
        end
      end
      
      # [Output Only] Which SLA this group is configured to support, and why this
      # group does or does not meet that SLA's requirements.
      class InterconnectAttachmentGroupConfiguredAvailabilitySla
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `effectiveSla`
        # @return [String]
        attr_accessor :effective_sla
      
        # 
        # Corresponds to the JSON property `intendedSlaBlockers`
        # @return [Array<Google::Apis::ComputeV1::InterconnectAttachmentGroupConfiguredAvailabilitySlaIntendedSlaBlockers>]
        attr_accessor :intended_sla_blockers
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @effective_sla = args[:effective_sla] if args.key?(:effective_sla)
          @intended_sla_blockers = args[:intended_sla_blockers] if args.key?(:intended_sla_blockers)
        end
      end
      
      # [Output Only] Reasons why configuration.availabilitySLA.sla differs from
      # intent.availabilitySLA. This list is empty if and only if those are the
      # same.
      class InterconnectAttachmentGroupConfiguredAvailabilitySlaIntendedSlaBlockers
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] URLs of any particular Attachments to explain this
        # blocker in more detail.
        # Corresponds to the JSON property `attachments`
        # @return [Array<String>]
        attr_accessor :attachments
      
        # 
        # Corresponds to the JSON property `blockerType`
        # @return [String]
        attr_accessor :blocker_type
      
        # Output only. [Output Only] The url of Google Cloud public documentation
        # explaining
        # this requirement. This is set for every type of requirement.
        # Corresponds to the JSON property `documentationLink`
        # @return [String]
        attr_accessor :documentation_link
      
        # Output only. [Output Only] A human-readable explanation of this requirement
        # and
        # why it's not met. This is set for every type of requirement.
        # Corresponds to the JSON property `explanation`
        # @return [String]
        attr_accessor :explanation
      
        # Output only. [Output Only] Metros used to explain this blocker in more detail.
        # These are three-letter lowercase strings like "iad". This will be set
        # for some blockers (like NO_ATTACHMENTS_IN_METRO_AND_ZONE) but does
        # not apply to others.
        # Corresponds to the JSON property `metros`
        # @return [Array<String>]
        attr_accessor :metros
      
        # Output only. [Output Only] Regions used to explain this blocker in more
        # detail. These are region names formatted like "us-central1". This
        # will be set for some blockers (like INCOMPATIBLE_REGIONS) but does
        # not apply to others.
        # Corresponds to the JSON property `regions`
        # @return [Array<String>]
        attr_accessor :regions
      
        # Output only. [Output Only] Zones used to explain this blocker in more detail.
        # Format is "zone1" and/or "zone2". This will be set for some blockers
        # (like  MISSING_ZONE) but does not apply to others.
        # 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)
          @attachments = args[:attachments] if args.key?(:attachments)
          @blocker_type = args[:blocker_type] if args.key?(:blocker_type)
          @documentation_link = args[:documentation_link] if args.key?(:documentation_link)
          @explanation = args[:explanation] if args.key?(:explanation)
          @metros = args[:metros] if args.key?(:metros)
          @regions = args[:regions] if args.key?(:regions)
          @zones = args[:zones] if args.key?(:zones)
        end
      end
      
      # The user's intent for this AttachmentGroup. This is the only required field
      # besides the name that must be specified on group creation.
      class InterconnectAttachmentGroupIntent
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `availabilitySla`
        # @return [String]
        attr_accessor :availability_sla
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @availability_sla = args[:availability_sla] if args.key?(:availability_sla)
        end
      end
      
      # [Output Only] An analysis of the logical layout of Attachments in this
      # group. Every Attachment in the group is shown once in this structure.
      class InterconnectAttachmentGroupLogicalStructure
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `regions`
        # @return [Array<Google::Apis::ComputeV1::InterconnectAttachmentGroupLogicalStructureRegion>]
        attr_accessor :regions
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @regions = args[:regions] if args.key?(:regions)
        end
      end
      
      # [Output Only] The regions Attachments in this group are in.
      class InterconnectAttachmentGroupLogicalStructureRegion
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `metros`
        # @return [Array<Google::Apis::ComputeV1::InterconnectAttachmentGroupLogicalStructureRegionMetro>]
        attr_accessor :metros
      
        # Output only. [Output Only] The name of a region, like "us-central1".
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @metros = args[:metros] if args.key?(:metros)
          @region = args[:region] if args.key?(:region)
        end
      end
      
      # [Output Only] The metros of Attachments in this group in this region.
      class InterconnectAttachmentGroupLogicalStructureRegionMetro
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `facilities`
        # @return [Array<Google::Apis::ComputeV1::InterconnectAttachmentGroupLogicalStructureRegionMetroFacility>]
        attr_accessor :facilities
      
        # Output only. [Output Only] The name of the metro, as a three-letter lowercase
        # string like "iad". This is the first component of the location of an
        # Interconnect.
        # Corresponds to the JSON property `metro`
        # @return [String]
        attr_accessor :metro
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @facilities = args[:facilities] if args.key?(:facilities)
          @metro = args[:metro] if args.key?(:metro)
        end
      end
      
      # [Output Only] The facilities used for this group's Attachments'
      # Interconnects.
      class InterconnectAttachmentGroupLogicalStructureRegionMetroFacility
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The name of a facility, like "iad-1234".
        # Corresponds to the JSON property `facility`
        # @return [String]
        attr_accessor :facility
      
        # 
        # Corresponds to the JSON property `zones`
        # @return [Array<Google::Apis::ComputeV1::InterconnectAttachmentGroupLogicalStructureRegionMetroFacilityZone>]
        attr_accessor :zones
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @facility = args[:facility] if args.key?(:facility)
          @zones = args[:zones] if args.key?(:zones)
        end
      end
      
      # [Output Only] The zones that Attachments in this group are present
      # in, in the given facilities.  This is inherited from their
      # Interconnects.
      class InterconnectAttachmentGroupLogicalStructureRegionMetroFacilityZone
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] URLs of Attachments in the given zone, to the given
        # region, on Interconnects in the given facility and metro. Every
        # Attachment in the AG has such an entry.
        # Corresponds to the JSON property `attachments`
        # @return [Array<String>]
        attr_accessor :attachments
      
        # Output only. [Output Only] The name of a zone, either "zone1" or "zone2".
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @attachments = args[:attachments] if args.key?(:attachments)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # Response for the InterconnectAttachmentGroupsGetOperationalStatusResponse.
      class InterconnectAttachmentGroupsGetOperationalStatusResponse
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # 
        # Corresponds to the JSON property `result`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentGroupsOperationalStatus]
        attr_accessor :result
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @result = args[:result] if args.key?(:result)
        end
      end
      
      # 
      class InterconnectAttachmentGroupsListResponse
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InterconnectAttachmentGroup resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InterconnectAttachmentGroup>]
        attr_accessor :items
      
        # 
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # end_interface:
        # MixerListResponseWithEtagBuilder
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentGroupsListResponse::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InterconnectAttachmentGroupsListResponse::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InterconnectAttachmentGroupsOperationalStatus
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `attachmentStatuses`
        # @return [Array<Google::Apis::ComputeV1::InterconnectAttachmentGroupsOperationalStatusAttachmentStatus>]
        attr_accessor :attachment_statuses
      
        # [Output Only] The redundancy this group is configured to support. The way a
        # user queries what SLA their Attachment gets is by looking at this field of
        # the Attachment's AttachmentGroup.
        # Corresponds to the JSON property `configured`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentGroupConfigured]
        attr_accessor :configured
      
        # Output only. Summarizes the status of the group.
        # Corresponds to the JSON property `groupStatus`
        # @return [String]
        attr_accessor :group_status
      
        # The user's intent for this AttachmentGroup. This is the only required field
        # besides the name that must be specified on group creation.
        # Corresponds to the JSON property `intent`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentGroupIntent]
        attr_accessor :intent
      
        # [Output Only] The redundancy this group is configured to support. The way a
        # user queries what SLA their Attachment gets is by looking at this field of
        # the Attachment's AttachmentGroup.
        # Corresponds to the JSON property `operational`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentGroupConfigured]
        attr_accessor :operational
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @attachment_statuses = args[:attachment_statuses] if args.key?(:attachment_statuses)
          @configured = args[:configured] if args.key?(:configured)
          @group_status = args[:group_status] if args.key?(:group_status)
          @intent = args[:intent] if args.key?(:intent)
          @operational = args[:operational] if args.key?(:operational)
        end
      end
      
      # The status of one Attachment in the group. List order is arbitrary.
      class InterconnectAttachmentGroupsOperationalStatusAttachmentStatus
        include Google::Apis::Core::Hashable
      
        # Output only. Whether this Attachment is enabled. This becomes false when the
        # customer
        # drains their Attachment.
        # Corresponds to the JSON property `adminEnabled`
        # @return [Boolean]
        attr_accessor :admin_enabled
        alias_method :admin_enabled?, :admin_enabled
      
        # Output only. The URL of the Attachment being described.
        # Corresponds to the JSON property `attachment`
        # @return [String]
        attr_accessor :attachment
      
        # Output only. Whether this Attachment is participating in the redundant
        # configuration.
        # This will be ACTIVE if and only if the status below is CONNECTION_UP.
        # Any INACTIVE Attachments are excluded from the analysis that generates
        # operational.availabilitySLA.
        # Corresponds to the JSON property `isActive`
        # @return [String]
        attr_accessor :is_active
      
        # Output only. Whether this Attachment is active, and if so, whether BGP is up.
        # 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)
          @admin_enabled = args[:admin_enabled] if args.key?(:admin_enabled)
          @attachment = args[:attachment] if args.key?(:attachment)
          @is_active = args[:is_active] if args.key?(:is_active)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # L2 Interconnect Attachment related configuration.
      class InterconnectAttachmentL2Forwarding
        include Google::Apis::Core::Hashable
      
        # Optional. A map of VLAN tags to appliances and optional inner mapping
        # rules. If VLANs are not explicitly mapped to any appliance, the
        # defaultApplianceIpAddress is used.
        # Each VLAN tag can be a single number or a range of numbers in the range
        # of 1 to 4094, e.g., "1" or "4001-4094". Non-empty and non-overlapping
        # VLAN tag ranges are enforced, and violating operations will be rejected.
        # The VLAN tags in the Ethernet header must use an ethertype value of
        # 0x88A8 or 0x8100.
        # Corresponds to the JSON property `applianceMappings`
        # @return [Hash<String,Google::Apis::ComputeV1::InterconnectAttachmentL2ForwardingApplianceMapping>]
        attr_accessor :appliance_mappings
      
        # Optional. A single IPv4 or IPv6 address used as the default destination
        # IP when there is no VLAN mapping result found.
        # Unset field (null-value) indicates the unmatched packet should be
        # dropped.
        # Corresponds to the JSON property `defaultApplianceIpAddress`
        # @return [String]
        attr_accessor :default_appliance_ip_address
      
        # GeneveHeader related configurations.
        # Corresponds to the JSON property `geneveHeader`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentL2ForwardingGeneveHeader]
        attr_accessor :geneve_header
      
        # Required. Resource URL of the network to which this attachment belongs.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # Required. A single IPv4 or IPv6 address. This address will be used as the
        # source IP address for packets sent to the appliances, and must be used as
        # the destination IP address for packets that should be sent out through
        # this attachment.
        # Corresponds to the JSON property `tunnelEndpointIpAddress`
        # @return [String]
        attr_accessor :tunnel_endpoint_ip_address
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @appliance_mappings = args[:appliance_mappings] if args.key?(:appliance_mappings)
          @default_appliance_ip_address = args[:default_appliance_ip_address] if args.key?(:default_appliance_ip_address)
          @geneve_header = args[:geneve_header] if args.key?(:geneve_header)
          @network = args[:network] if args.key?(:network)
          @tunnel_endpoint_ip_address = args[:tunnel_endpoint_ip_address] if args.key?(:tunnel_endpoint_ip_address)
        end
      end
      
      # Two-level VLAN-to-Appliance mapping rule.
      class InterconnectAttachmentL2ForwardingApplianceMapping
        include Google::Apis::Core::Hashable
      
        # Optional. A single IPv4 or IPv6 address used as the destination IP
        # address for ingress packets that match on a VLAN tag, but do not match
        # a more specific inner VLAN tag.
        # Unset field (null-value) indicates both VLAN tags are required to be
        # mapped. Otherwise, defaultApplianceIpAddress is used.
        # Corresponds to the JSON property `applianceIpAddress`
        # @return [String]
        attr_accessor :appliance_ip_address
      
        # Optional. Used to match against the inner VLAN when the packet
        # contains two VLAN tags.
        # A list of mapping rules from inner VLAN tags to IP addresses. If the
        # inner VLAN is not explicitly mapped to an IP address range, the
        # applianceIpAddress is used.
        # Corresponds to the JSON property `innerVlanToApplianceMappings`
        # @return [Array<Google::Apis::ComputeV1::InterconnectAttachmentL2ForwardingApplianceMappingInnerVlanToApplianceMapping>]
        attr_accessor :inner_vlan_to_appliance_mappings
      
        # Optional. The name of this appliance mapping rule.
        # 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)
          @appliance_ip_address = args[:appliance_ip_address] if args.key?(:appliance_ip_address)
          @inner_vlan_to_appliance_mappings = args[:inner_vlan_to_appliance_mappings] if args.key?(:inner_vlan_to_appliance_mappings)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # The inner VLAN-to-Appliance mapping.
      class InterconnectAttachmentL2ForwardingApplianceMappingInnerVlanToApplianceMapping
        include Google::Apis::Core::Hashable
      
        # Required in this object. A single IPv4 or IPv6 address used as the
        # destination IP address for ingress packets that match on both VLAN
        # tags.
        # Corresponds to the JSON property `innerApplianceIpAddress`
        # @return [String]
        attr_accessor :inner_appliance_ip_address
      
        # Required in this object. Used to match the inner VLAN tag on the
        # packet. Each entry can be a single number or a range of numbers in
        # the range of 1 to 4094, e.g., ["1", "4001-4094"] is valid. Non-empty
        # and Non-overlapping VLAN tag ranges are enforced, and violating
        # operations will be rejected.
        # The inner VLAN tags must have an ethertype value of 0x8100.
        # Corresponds to the JSON property `innerVlanTags`
        # @return [Array<String>]
        attr_accessor :inner_vlan_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @inner_appliance_ip_address = args[:inner_appliance_ip_address] if args.key?(:inner_appliance_ip_address)
          @inner_vlan_tags = args[:inner_vlan_tags] if args.key?(:inner_vlan_tags)
        end
      end
      
      # GeneveHeader related configurations.
      class InterconnectAttachmentL2ForwardingGeneveHeader
        include Google::Apis::Core::Hashable
      
        # Optional. VNI is a 24-bit unique virtual network identifier, from 0 to
        # 16,777,215.
        # Corresponds to the JSON property `vni`
        # @return [Fixnum]
        attr_accessor :vni
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @vni = args[:vni] if args.key?(:vni)
        end
      end
      
      # Response to the list request, and contains a list of interconnect
      # attachments.
      class InterconnectAttachmentList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InterconnectAttachment resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InterconnectAttachment>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # interconnectAttachmentList for lists of interconnect
        # attachments.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InterconnectAttachmentList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Additional interconnect attachment parameters.
      class InterconnectAttachmentParams
        include Google::Apis::Core::Hashable
      
        # Tag keys/values directly bound to this resource.
        # Tag keys and values have the same definition as resource
        # manager tags. The field is allowed for INSERT
        # only. The keys/values to set on the resource should be specified in
        # either ID ` : ` or Namespaced format
        # ` : `.
        # For example the following are valid inputs:
        # * `"tagKeys/333" : "tagValues/444", "tagKeys/123" : "tagValues/456"`
        # * `"123/environment" : "production", "345/abc" : "xyz"`
        # Note:
        # * Invalid combinations of ID & namespaced format is not supported. For
        # instance: `"123/environment" : "tagValues/444"` is invalid.
        # * Inconsistent format is not supported. For instance:
        # `"tagKeys/333" : "tagValues/444", "123/env" : "prod"` is invalid.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # Informational metadata about Partner attachments from Partners to display
      # to customers.  These fields are propagated from PARTNER_PROVIDER
      # attachments to their corresponding PARTNER attachments.
      class InterconnectAttachmentPartnerMetadata
        include Google::Apis::Core::Hashable
      
        # Plain text name of the Interconnect this attachment is connected to, as
        # displayed in the Partner's portal. For instance "Chicago 1".
        # This value may be validated to match approved Partner values.
        # Corresponds to the JSON property `interconnectName`
        # @return [String]
        attr_accessor :interconnect_name
      
        # Plain text name of the Partner providing this attachment.
        # This value may be validated to match approved Partner values.
        # Corresponds to the JSON property `partnerName`
        # @return [String]
        attr_accessor :partner_name
      
        # URL of the Partner's portal for this Attachment. Partners may customise
        # this to be a deep link to the specific resource on the Partner portal.
        # This value may be validated to match approved Partner values.
        # Corresponds to the JSON property `portalUrl`
        # @return [String]
        attr_accessor :portal_url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @interconnect_name = args[:interconnect_name] if args.key?(:interconnect_name)
          @partner_name = args[:partner_name] if args.key?(:partner_name)
          @portal_url = args[:portal_url] if args.key?(:portal_url)
        end
      end
      
      # Information for an interconnect attachment when this belongs to an
      # interconnect of type DEDICATED.
      class InterconnectAttachmentPrivateInfo
        include Google::Apis::Core::Hashable
      
        # [Output Only] 802.1q encapsulation tag to be used for traffic between
        # Google and the customer, going to and from this network and region.
        # Corresponds to the JSON property `tag8021q`
        # @return [Fixnum]
        attr_accessor :tag8021q
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @tag8021q = args[:tag8021q] if args.key?(:tag8021q)
        end
      end
      
      # 
      class InterconnectAttachmentsScopedList
        include Google::Apis::Core::Hashable
      
        # A list of interconnect attachments contained in this scope.
        # Corresponds to the JSON property `interconnectAttachments`
        # @return [Array<Google::Apis::ComputeV1::InterconnectAttachment>]
        attr_accessor :interconnect_attachments
      
        # Informational warning which replaces the list of addresses when
        # the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @interconnect_attachments = args[:interconnect_attachments] if args.key?(:interconnect_attachments)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of addresses when
        # the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InterconnectAttachmentsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Describes a single physical circuit between the Customer and Google.
      # CircuitInfo objects are created by Google, so all fields are output only.
      class InterconnectCircuitInfo
        include Google::Apis::Core::Hashable
      
        # Customer-side demarc ID for this circuit.
        # Corresponds to the JSON property `customerDemarcId`
        # @return [String]
        attr_accessor :customer_demarc_id
      
        # Google-assigned unique ID for this circuit. Assigned at circuit turn-up.
        # Corresponds to the JSON property `googleCircuitId`
        # @return [String]
        attr_accessor :google_circuit_id
      
        # Google-side demarc ID for this circuit. Assigned at circuit turn-up and
        # provided by Google to the customer in the LOA.
        # Corresponds to the JSON property `googleDemarcId`
        # @return [String]
        attr_accessor :google_demarc_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @customer_demarc_id = args[:customer_demarc_id] if args.key?(:customer_demarc_id)
          @google_circuit_id = args[:google_circuit_id] if args.key?(:google_circuit_id)
          @google_demarc_id = args[:google_demarc_id] if args.key?(:google_demarc_id)
        end
      end
      
      # Diagnostics information about the Interconnect connection, which contains
      # detailed and current technical information about Google's side of the
      # connection.
      class InterconnectDiagnostics
        include Google::Apis::Core::Hashable
      
        # A list of InterconnectDiagnostics.ARPEntry objects,
        # describing individual neighbors currently seen by the Google router in
        # the ARP cache for the Interconnect.
        # This will be empty when the Interconnect is not bundled.
        # Corresponds to the JSON property `arpCaches`
        # @return [Array<Google::Apis::ComputeV1::InterconnectDiagnosticsArpEntry>]
        attr_accessor :arp_caches
      
        # The aggregation type of the bundle interface.
        # Corresponds to the JSON property `bundleAggregationType`
        # @return [String]
        attr_accessor :bundle_aggregation_type
      
        # The operational status of the bundle interface.
        # Corresponds to the JSON property `bundleOperationalStatus`
        # @return [String]
        attr_accessor :bundle_operational_status
      
        # A list of InterconnectDiagnostics.LinkStatus objects,
        # describing the status for each link on the Interconnect.
        # Corresponds to the JSON property `links`
        # @return [Array<Google::Apis::ComputeV1::InterconnectDiagnosticsLinkStatus>]
        attr_accessor :links
      
        # The MAC address of the Interconnect's bundle interface.
        # Corresponds to the JSON property `macAddress`
        # @return [String]
        attr_accessor :mac_address
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @arp_caches = args[:arp_caches] if args.key?(:arp_caches)
          @bundle_aggregation_type = args[:bundle_aggregation_type] if args.key?(:bundle_aggregation_type)
          @bundle_operational_status = args[:bundle_operational_status] if args.key?(:bundle_operational_status)
          @links = args[:links] if args.key?(:links)
          @mac_address = args[:mac_address] if args.key?(:mac_address)
        end
      end
      
      # Describing the ARP neighbor entries seen on this link
      class InterconnectDiagnosticsArpEntry
        include Google::Apis::Core::Hashable
      
        # The IP address of this ARP neighbor.
        # Corresponds to the JSON property `ipAddress`
        # @return [String]
        attr_accessor :ip_address
      
        # The MAC address of this ARP neighbor.
        # Corresponds to the JSON property `macAddress`
        # @return [String]
        attr_accessor :mac_address
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ip_address = args[:ip_address] if args.key?(:ip_address)
          @mac_address = args[:mac_address] if args.key?(:mac_address)
        end
      end
      
      # 
      class InterconnectDiagnosticsLinkLacpStatus
        include Google::Apis::Core::Hashable
      
        # System ID of the port on Google's side of the LACP exchange.
        # Corresponds to the JSON property `googleSystemId`
        # @return [String]
        attr_accessor :google_system_id
      
        # System ID of the port on the neighbor's side of the LACP exchange.
        # Corresponds to the JSON property `neighborSystemId`
        # @return [String]
        attr_accessor :neighbor_system_id
      
        # The state of a LACP link, which can take one of the following values:
        # 
        # - ACTIVE: The link is configured and active within the bundle.
        # - DETACHED: The link is not configured within the bundle. This means
        # that the rest of the object should be empty.
        # 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)
          @google_system_id = args[:google_system_id] if args.key?(:google_system_id)
          @neighbor_system_id = args[:neighbor_system_id] if args.key?(:neighbor_system_id)
          @state = args[:state] if args.key?(:state)
        end
      end
      
      # 
      class InterconnectDiagnosticsLinkOpticalPower
        include Google::Apis::Core::Hashable
      
        # The status of the current value when compared to the warning and alarm
        # levels for the receiving or transmitting transceiver. Possible states
        # include:
        # 
        # 
        # - OK: The value has not crossed a warning threshold.
        # - LOW_WARNING: The value has crossed below the low
        # warning threshold.
        # - HIGH_WARNING: The value has
        # crossed above the high warning threshold.
        # - LOW_ALARM: The value has crossed below the low alarm
        # threshold.
        # - HIGH_ALARM: The value has crossed above the high alarm
        # threshold.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # Value of the current receiving or transmitting optical power, read in
        # dBm. Take a known good optical value, give it a 10% margin and trigger
        # warnings relative to that value. In general, a -7dBm warning and a -11dBm
        # alarm are good optical value estimates for most links.
        # Corresponds to the JSON property `value`
        # @return [Float]
        attr_accessor :value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @state = args[:state] if args.key?(:state)
          @value = args[:value] if args.key?(:value)
        end
      end
      
      # 
      class InterconnectDiagnosticsLinkStatus
        include Google::Apis::Core::Hashable
      
        # A list of InterconnectDiagnostics.ARPEntry objects,
        # describing the ARP neighbor entries seen on this link.
        # This will be empty if the link is bundled
        # Corresponds to the JSON property `arpCaches`
        # @return [Array<Google::Apis::ComputeV1::InterconnectDiagnosticsArpEntry>]
        attr_accessor :arp_caches
      
        # The unique ID for this link assigned during turn up by Google.
        # Corresponds to the JSON property `circuitId`
        # @return [String]
        attr_accessor :circuit_id
      
        # The Demarc address assigned by Google and provided in the LoA.
        # Corresponds to the JSON property `googleDemarc`
        # @return [String]
        attr_accessor :google_demarc
      
        # 
        # Corresponds to the JSON property `lacpStatus`
        # @return [Google::Apis::ComputeV1::InterconnectDiagnosticsLinkLacpStatus]
        attr_accessor :lacp_status
      
        # Describes the status of MACsec encryption on the link.
        # Corresponds to the JSON property `macsec`
        # @return [Google::Apis::ComputeV1::InterconnectDiagnosticsMacsecStatus]
        attr_accessor :macsec
      
        # The operational status of the link.
        # Corresponds to the JSON property `operationalStatus`
        # @return [String]
        attr_accessor :operational_status
      
        # An InterconnectDiagnostics.LinkOpticalPower object,
        # describing the current value and status of the received light level.
        # Corresponds to the JSON property `receivingOpticalPower`
        # @return [Google::Apis::ComputeV1::InterconnectDiagnosticsLinkOpticalPower]
        attr_accessor :receiving_optical_power
      
        # An InterconnectDiagnostics.LinkOpticalPower object,
        # describing the current value and status of the transmitted light level.
        # Corresponds to the JSON property `transmittingOpticalPower`
        # @return [Google::Apis::ComputeV1::InterconnectDiagnosticsLinkOpticalPower]
        attr_accessor :transmitting_optical_power
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @arp_caches = args[:arp_caches] if args.key?(:arp_caches)
          @circuit_id = args[:circuit_id] if args.key?(:circuit_id)
          @google_demarc = args[:google_demarc] if args.key?(:google_demarc)
          @lacp_status = args[:lacp_status] if args.key?(:lacp_status)
          @macsec = args[:macsec] if args.key?(:macsec)
          @operational_status = args[:operational_status] if args.key?(:operational_status)
          @receiving_optical_power = args[:receiving_optical_power] if args.key?(:receiving_optical_power)
          @transmitting_optical_power = args[:transmitting_optical_power] if args.key?(:transmitting_optical_power)
        end
      end
      
      # Describes the status of MACsec encryption on the link.
      class InterconnectDiagnosticsMacsecStatus
        include Google::Apis::Core::Hashable
      
        # Indicates the Connectivity Association Key Name (CKN)
        # currently being used if MACsec is operational.
        # Corresponds to the JSON property `ckn`
        # @return [String]
        attr_accessor :ckn
      
        # Indicates whether or not MACsec is operational on this link.
        # Corresponds to the JSON property `operational`
        # @return [Boolean]
        attr_accessor :operational
        alias_method :operational?, :operational
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ckn = args[:ckn] if args.key?(:ckn)
          @operational = args[:operational] if args.key?(:operational)
        end
      end
      
      # An interconnect group resource allows customers to create, analyze, and
      # expand their redundant connections.
      class InterconnectGroup
        include Google::Apis::Core::Hashable
      
        # [Output Only] The status of the group as configured. This has the same
        # structure as the operational field reported by the OperationalStatus
        # method, but does not take into account the operational status of each
        # resource.
        # Corresponds to the JSON property `configured`
        # @return [Google::Apis::ComputeV1::InterconnectGroupConfigured]
        attr_accessor :configured
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Opaque system-generated token that uniquely identifies the configuration.
        # If provided when patching a configuration in update mode, the provided
        # token must match the current token or the update is rejected. This provides
        # a reliable means of doing read-modify-write (optimistic locking) as
        # described by AIP 154.
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # Output only. [Output Only] The unique identifier for the resource type. The
        # server
        # generates this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # The user's intent for this group. This is the only required field besides
        # the name that must be specified on group creation.
        # Corresponds to the JSON property `intent`
        # @return [Google::Apis::ComputeV1::InterconnectGroupIntent]
        attr_accessor :intent
      
        # Interconnects in the InterconnectGroup. Keys are arbitrary user-specified
        # strings. Users are encouraged, but not required, to use their preferred
        # format for resource links as keys.
        # Note that there are add-members and remove-members methods in gcloud.
        # The size of this map is limited by an "Interconnects per group" quota.
        # Corresponds to the JSON property `interconnects`
        # @return [Hash<String,Google::Apis::ComputeV1::InterconnectGroupInterconnect>]
        attr_accessor :interconnects
      
        # Output only. [Output Only] Type of the resource. Always compute#
        # InterconnectGroup
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # [Output Only] An analysis of the physical layout of Interconnects in this
        # group. Every Interconnect in the group is shown once in this structure.
        # Corresponds to the JSON property `physicalStructure`
        # @return [Google::Apis::ComputeV1::InterconnectGroupPhysicalStructure]
        attr_accessor :physical_structure
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @configured = args[:configured] if args.key?(:configured)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @intent = args[:intent] if args.key?(:intent)
          @interconnects = args[:interconnects] if args.key?(:interconnects)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @physical_structure = args[:physical_structure] if args.key?(:physical_structure)
          @self_link = args[:self_link] if args.key?(:self_link)
        end
      end
      
      # [Output Only] The status of the group as configured. This has the same
      # structure as the operational field reported by the OperationalStatus
      # method, but does not take into account the operational status of each
      # resource.
      class InterconnectGroupConfigured
        include Google::Apis::Core::Hashable
      
        # [Output Only] How reliable this topology is configured to be, and why
        # this group does or does not meet the requirements for the intended
        # capability.
        # Corresponds to the JSON property `topologyCapability`
        # @return [Google::Apis::ComputeV1::InterconnectGroupConfiguredTopologyCapability]
        attr_accessor :topology_capability
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @topology_capability = args[:topology_capability] if args.key?(:topology_capability)
        end
      end
      
      # [Output Only] How reliable this topology is configured to be, and why
      # this group does or does not meet the requirements for the intended
      # capability.
      class InterconnectGroupConfiguredTopologyCapability
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `intendedCapabilityBlockers`
        # @return [Array<Google::Apis::ComputeV1::InterconnectGroupConfiguredTopologyCapabilityIntendedCapabilityBlockers>]
        attr_accessor :intended_capability_blockers
      
        # 
        # Corresponds to the JSON property `supportedSla`
        # @return [String]
        attr_accessor :supported_sla
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @intended_capability_blockers = args[:intended_capability_blockers] if args.key?(:intended_capability_blockers)
          @supported_sla = args[:supported_sla] if args.key?(:supported_sla)
        end
      end
      
      # [Output Only] Reasons why configuration.topologyCapability.sla differs
      # from intent.topologyCapability. This list is empty if and only if those
      # are the same.
      class InterconnectGroupConfiguredTopologyCapabilityIntendedCapabilityBlockers
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `blockerType`
        # @return [String]
        attr_accessor :blocker_type
      
        # Output only. [Output Only] The url of Google Cloud public documentation
        # explaining
        # this requirement. This is set for every type of requirement.
        # Corresponds to the JSON property `documentationLink`
        # @return [String]
        attr_accessor :documentation_link
      
        # Output only. [Output Only] A human-readable explanation of this requirement
        # and
        # why it's not met. This is set for every type of requirement.
        # Corresponds to the JSON property `explanation`
        # @return [String]
        attr_accessor :explanation
      
        # Output only. [Output Only] Facilities used to explain this blocker in more
        # detail.
        # Like physicalStructure.metros.facilities.facility, this is a numeric
        # string like "5467".
        # Corresponds to the JSON property `facilities`
        # @return [Array<String>]
        attr_accessor :facilities
      
        # Output only. [Output Only] Interconnects used to explain this blocker in more
        # detail.
        # Corresponds to the JSON property `interconnects`
        # @return [Array<String>]
        attr_accessor :interconnects
      
        # Output only. [Output Only] Metros used to explain this blocker in more detail.
        # These are three-letter lowercase strings like "iad". A blocker like
        # INCOMPATIBLE_METROS will specify the problematic metros in this
        # field.
        # Corresponds to the JSON property `metros`
        # @return [Array<String>]
        attr_accessor :metros
      
        # Output only. [Output Only] Zones used to explain this blocker in more detail.
        # Zone names are "zone1" and/or "zone2".
        # 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)
          @blocker_type = args[:blocker_type] if args.key?(:blocker_type)
          @documentation_link = args[:documentation_link] if args.key?(:documentation_link)
          @explanation = args[:explanation] if args.key?(:explanation)
          @facilities = args[:facilities] if args.key?(:facilities)
          @interconnects = args[:interconnects] if args.key?(:interconnects)
          @metros = args[:metros] if args.key?(:metros)
          @zones = args[:zones] if args.key?(:zones)
        end
      end
      
      # The user's intent for this group. This is the only required field besides
      # the name that must be specified on group creation.
      class InterconnectGroupIntent
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `topologyCapability`
        # @return [String]
        attr_accessor :topology_capability
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @topology_capability = args[:topology_capability] if args.key?(:topology_capability)
        end
      end
      
      # An Interconnect in this InterconnectGroup.
      class InterconnectGroupInterconnect
        include Google::Apis::Core::Hashable
      
        # The URL of an Interconnect in this group. All Interconnects in the group
        # are unique.
        # Corresponds to the JSON property `interconnect`
        # @return [String]
        attr_accessor :interconnect
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @interconnect = args[:interconnect] if args.key?(:interconnect)
        end
      end
      
      # [Output Only] An analysis of the physical layout of Interconnects in this
      # group. Every Interconnect in the group is shown once in this structure.
      class InterconnectGroupPhysicalStructure
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `metros`
        # @return [Array<Google::Apis::ComputeV1::InterconnectGroupPhysicalStructureMetros>]
        attr_accessor :metros
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @metros = args[:metros] if args.key?(:metros)
        end
      end
      
      # [Output Only] The metros Interconnects in this group are in.
      class InterconnectGroupPhysicalStructureMetros
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `facilities`
        # @return [Array<Google::Apis::ComputeV1::InterconnectGroupPhysicalStructureMetrosFacilities>]
        attr_accessor :facilities
      
        # Output only. [Output Only] The name of the metro, as a three-letter lowercase
        # string
        # like "iad". This is the first component of the location of
        # Interconnects underneath this.
        # Corresponds to the JSON property `metro`
        # @return [String]
        attr_accessor :metro
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @facilities = args[:facilities] if args.key?(:facilities)
          @metro = args[:metro] if args.key?(:metro)
        end
      end
      
      # [Output Only] The facilities Interconnects in this metro are present
      # in.
      class InterconnectGroupPhysicalStructureMetrosFacilities
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The ID of this facility, as a numeric string like
        # "5467". This is the third component of the location of Interconnects
        # in this facility.
        # Corresponds to the JSON property `facility`
        # @return [String]
        attr_accessor :facility
      
        # 
        # Corresponds to the JSON property `zones`
        # @return [Array<Google::Apis::ComputeV1::InterconnectGroupPhysicalStructureMetrosFacilitiesZones>]
        attr_accessor :zones
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @facility = args[:facility] if args.key?(:facility)
          @zones = args[:zones] if args.key?(:zones)
        end
      end
      
      # [Output Only] The zones that Interconnects in this facility are
      # present in.
      class InterconnectGroupPhysicalStructureMetrosFacilitiesZones
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] URLs of Interconnects in this redundancy group in
        # the
        # given metro, facility, and zone.
        # Corresponds to the JSON property `interconnects`
        # @return [Array<String>]
        attr_accessor :interconnects
      
        # Output only. [Output Only] The name of the zone, either "zone1" or "zone2".
        # This is the second component of the location of Interconnects in
        # this facility.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @interconnects = args[:interconnects] if args.key?(:interconnects)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class InterconnectGroupsCreateMembers
        include Google::Apis::Core::Hashable
      
        # How to behave when configured.topologyCapability.supportedSLA would not
        # equal intent.topologyCapability after this call.
        # Corresponds to the JSON property `intentMismatchBehavior`
        # @return [String]
        attr_accessor :intent_mismatch_behavior
      
        # 
        # Corresponds to the JSON property `interconnects`
        # @return [Array<Google::Apis::ComputeV1::InterconnectGroupsCreateMembersInterconnectInput>]
        attr_accessor :interconnects
      
        # LINT.IfChange
        # Corresponds to the JSON property `templateInterconnect`
        # @return [Google::Apis::ComputeV1::InterconnectGroupsCreateMembersInterconnectInput]
        attr_accessor :template_interconnect
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @intent_mismatch_behavior = args[:intent_mismatch_behavior] if args.key?(:intent_mismatch_behavior)
          @interconnects = args[:interconnects] if args.key?(:interconnects)
          @template_interconnect = args[:template_interconnect] if args.key?(:template_interconnect)
        end
      end
      
      # LINT.IfChange
      class InterconnectGroupsCreateMembersInterconnectInput
        include Google::Apis::Core::Hashable
      
        # Administrative status of the interconnect. When this is set to true, the
        # Interconnect is functional and can carry traffic.
        # When set to false, no packets can be carried over the interconnect and
        # no BGP routes are exchanged over it. By default, the status is set to
        # true.
        # Corresponds to the JSON property `adminEnabled`
        # @return [Boolean]
        attr_accessor :admin_enabled
        alias_method :admin_enabled?, :admin_enabled
      
        # Customer name, to put in the Letter of Authorization as the party
        # authorized to request a crossconnect.
        # Corresponds to the JSON property `customerName`
        # @return [String]
        attr_accessor :customer_name
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # A zone-free location to use for all Interconnects created in this call,
        # like "iad-1234".
        # Corresponds to the JSON property `facility`
        # @return [String]
        attr_accessor :facility
      
        # Type of interconnect, which can take one of the following values:
        # 
        # - PARTNER: A partner-managed interconnection shared between
        # customers though a partner.
        # - DEDICATED: A dedicated physical
        # interconnection with the customer.
        # Note that a value IT_PRIVATE
        # has been deprecated in favor of DEDICATED.
        # Corresponds to the JSON property `interconnectType`
        # @return [String]
        attr_accessor :interconnect_type
      
        # Type of link requested, which can take one of the following values:
        # 
        # - LINK_TYPE_ETHERNET_10G_LR: A 10G Ethernet with LR optics
        # - LINK_TYPE_ETHERNET_100G_LR: A 100G Ethernet with LR optics.
        # - LINK_TYPE_ETHERNET_400G_LR4: A 400G Ethernet with LR4
        # optics.
        # Note that this field indicates the speed of each of the
        # links in the bundle, not the speed of the entire bundle.
        # Corresponds to the JSON property `linkType`
        # @return [String]
        attr_accessor :link_type
      
        # Name of the Interconnects to be created. This must be specified on the
        # template and/or on each individual interconnect. The name, if not empty,
        # must be 1-63 characters long, and comply with RFC1035.
        # Specifically, any nonempty name must be 1-63 characters long and match
        # the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Email address to contact the customer NOC for operations and maintenance
        # notifications regarding this Interconnect. If specified, this will be
        # used for notifications in addition to all other forms described, such as
        # Cloud Monitoring logs alerting and Cloud Notifications. This field is
        # required for users who sign up for Cloud Interconnect using
        # workforce identity federation.
        # Corresponds to the JSON property `nocContactEmail`
        # @return [String]
        attr_accessor :noc_contact_email
      
        # Indicates that this is a Cross-Cloud Interconnect. This field specifies
        # the location outside of Google's network that the interconnect is
        # connected to.
        # Corresponds to the JSON property `remoteLocation`
        # @return [String]
        attr_accessor :remote_location
      
        # Optional. List of features requested for this Interconnect connection,
        # which can take one of the following values:
        # 
        # - IF_MACSEC: If specified, then the connection is created on MACsec
        # capable hardware ports. If not specified, non-MACsec capable ports will
        # also be considered.
        # - IF_CROSS_SITE_NETWORK: If specified, then the connection is created
        # exclusively for Cross-Site Networking. The connection can not be used for
        # Cross-Site Networking unless this feature is specified.
        # Corresponds to the JSON property `requestedFeatures`
        # @return [Array<String>]
        attr_accessor :requested_features
      
        # Target number of physical links in the link bundle, as requested by the
        # customer.
        # Corresponds to the JSON property `requestedLinkCount`
        # @return [Fixnum]
        attr_accessor :requested_link_count
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @admin_enabled = args[:admin_enabled] if args.key?(:admin_enabled)
          @customer_name = args[:customer_name] if args.key?(:customer_name)
          @description = args[:description] if args.key?(:description)
          @facility = args[:facility] if args.key?(:facility)
          @interconnect_type = args[:interconnect_type] if args.key?(:interconnect_type)
          @link_type = args[:link_type] if args.key?(:link_type)
          @name = args[:name] if args.key?(:name)
          @noc_contact_email = args[:noc_contact_email] if args.key?(:noc_contact_email)
          @remote_location = args[:remote_location] if args.key?(:remote_location)
          @requested_features = args[:requested_features] if args.key?(:requested_features)
          @requested_link_count = args[:requested_link_count] if args.key?(:requested_link_count)
        end
      end
      
      # 
      class InterconnectGroupsCreateMembersRequest
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `request`
        # @return [Google::Apis::ComputeV1::InterconnectGroupsCreateMembers]
        attr_accessor :request
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @request = args[:request] if args.key?(:request)
        end
      end
      
      # Response for the InterconnectGroupsGetOperationalStatusResponse.
      class InterconnectGroupsGetOperationalStatusResponse
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # Request to get the status of the interconnect group with extra detail.
        # Corresponds to the JSON property `result`
        # @return [Google::Apis::ComputeV1::InterconnectGroupsOperationalStatus]
        attr_accessor :result
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @result = args[:result] if args.key?(:result)
        end
      end
      
      # 
      class InterconnectGroupsListResponse
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InterconnectGroup resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InterconnectGroup>]
        attr_accessor :items
      
        # 
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # end_interface: MixerListResponseWithEtagBuilder
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InterconnectGroupsListResponse::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InterconnectGroupsListResponse::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Request to get the status of the interconnect group with extra detail.
      class InterconnectGroupsOperationalStatus
        include Google::Apis::Core::Hashable
      
        # [Output Only] The status of the group as configured. This has the same
        # structure as the operational field reported by the OperationalStatus
        # method, but does not take into account the operational status of each
        # resource.
        # Corresponds to the JSON property `configured`
        # @return [Google::Apis::ComputeV1::InterconnectGroupConfigured]
        attr_accessor :configured
      
        # Output only. Summarizes the status of the group.
        # Corresponds to the JSON property `groupStatus`
        # @return [String]
        attr_accessor :group_status
      
        # The user's intent for this group. This is the only required field besides
        # the name that must be specified on group creation.
        # Corresponds to the JSON property `intent`
        # @return [Google::Apis::ComputeV1::InterconnectGroupIntent]
        attr_accessor :intent
      
        # 
        # Corresponds to the JSON property `interconnectStatuses`
        # @return [Array<Google::Apis::ComputeV1::InterconnectGroupsOperationalStatusInterconnectStatus>]
        attr_accessor :interconnect_statuses
      
        # [Output Only] The status of the group as configured. This has the same
        # structure as the operational field reported by the OperationalStatus
        # method, but does not take into account the operational status of each
        # resource.
        # Corresponds to the JSON property `operational`
        # @return [Google::Apis::ComputeV1::InterconnectGroupConfigured]
        attr_accessor :operational
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @configured = args[:configured] if args.key?(:configured)
          @group_status = args[:group_status] if args.key?(:group_status)
          @intent = args[:intent] if args.key?(:intent)
          @interconnect_statuses = args[:interconnect_statuses] if args.key?(:interconnect_statuses)
          @operational = args[:operational] if args.key?(:operational)
        end
      end
      
      # The status of one Interconnect in the group. The order is arbitrary.
      class InterconnectGroupsOperationalStatusInterconnectStatus
        include Google::Apis::Core::Hashable
      
        # Output only. Whether the Interconnect is enabled.
        # Corresponds to the JSON property `adminEnabled`
        # @return [Boolean]
        attr_accessor :admin_enabled
        alias_method :admin_enabled?, :admin_enabled
      
        # Diagnostics information about the Interconnect connection, which contains
        # detailed and current technical information about Google's side of the
        # connection.
        # Corresponds to the JSON property `diagnostics`
        # @return [Google::Apis::ComputeV1::InterconnectDiagnostics]
        attr_accessor :diagnostics
      
        # Output only. The URL of the Interconnect being described.
        # Corresponds to the JSON property `interconnect`
        # @return [String]
        attr_accessor :interconnect
      
        # Output only. Whether this interconnect is participating in the redundant
        # configuration.
        # Corresponds to the JSON property `isActive`
        # @return [String]
        attr_accessor :is_active
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @admin_enabled = args[:admin_enabled] if args.key?(:admin_enabled)
          @diagnostics = args[:diagnostics] if args.key?(:diagnostics)
          @interconnect = args[:interconnect] if args.key?(:interconnect)
          @is_active = args[:is_active] if args.key?(:is_active)
        end
      end
      
      # Response to the list request, and contains a list of interconnects.
      class InterconnectList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Interconnect resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Interconnect>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#interconnectList
        # for lists of interconnects.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InterconnectList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InterconnectList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents an Interconnect Attachment (VLAN) Location resource.
      # You can use this resource to find location details about an Interconnect
      # attachment (VLAN). For more information about interconnect attachments, read
      # Creating VLAN Attachments.
      class InterconnectLocation
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The postal address of the Point of Presence, each
        # line in
        # the address is separated by a newline character.
        # Corresponds to the JSON property `address`
        # @return [String]
        attr_accessor :address
      
        # [Output Only] Availability zone for this InterconnectLocation. Within a
        # metropolitan area (metro), maintenance will not be simultaneously scheduled
        # in more than one availability zone.  Example: "zone1" or "zone2".
        # Corresponds to the JSON property `availabilityZone`
        # @return [String]
        attr_accessor :availability_zone
      
        # [Output only] List of features available at this InterconnectLocation,
        # which can take one of the following values:
        # 
        # - IF_MACSEC
        # - IF_CROSS_SITE_NETWORK
        # Corresponds to the JSON property `availableFeatures`
        # @return [Array<String>]
        attr_accessor :available_features
      
        # [Output only] List of link types available at this InterconnectLocation,
        # which can take one of the following values:
        # 
        # - LINK_TYPE_ETHERNET_10G_LR
        # - LINK_TYPE_ETHERNET_100G_LR
        # - LINK_TYPE_ETHERNET_400G_LR4
        # Corresponds to the JSON property `availableLinkTypes`
        # @return [Array<String>]
        attr_accessor :available_link_types
      
        # [Output Only] Metropolitan area designator that indicates which city an
        # interconnect is located.
        # For example: "Chicago, IL", "Amsterdam, Netherlands".
        # Corresponds to the JSON property `city`
        # @return [String]
        attr_accessor :city
      
        # [Output Only] Continent for this location, which can take one of the
        # following values:
        # 
        # - AFRICA
        # - ASIA_PAC
        # - EUROPE
        # - NORTH_AMERICA
        # - SOUTH_AMERICA
        # Corresponds to the JSON property `continent`
        # @return [String]
        attr_accessor :continent
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # [Output Only] A list of InterconnectLocation.CrossSiteInterconnectInfo
        # objects, that describe where Cross-Site Interconnect wires may connect to
        # from this location and associated connection parameters. Cross-Site
        # Interconnect isn't allowed to locations which are not listed.
        # Corresponds to the JSON property `crossSiteInterconnectInfos`
        # @return [Array<Google::Apis::ComputeV1::InterconnectLocationCrossSiteInterconnectInfo>]
        attr_accessor :cross_site_interconnect_infos
      
        # Output only. [Output Only] An optional description of the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] The name of the provider for this facility (e.g.,
        # EQUINIX).
        # Corresponds to the JSON property `facilityProvider`
        # @return [String]
        attr_accessor :facility_provider
      
        # Output only. [Output Only] A provider-assigned Identifier for this facility (e.
        # g.,
        # Ashburn-DC1).
        # Corresponds to the JSON property `facilityProviderFacilityId`
        # @return [String]
        attr_accessor :facility_provider_facility_id
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # interconnectLocation for interconnect locations.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] Name of the resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The peeringdb identifier for this facility (
        # corresponding
        # with a netfac type in peeringdb).
        # Corresponds to the JSON property `peeringdbFacilityId`
        # @return [String]
        attr_accessor :peeringdb_facility_id
      
        # Output only. [Output Only] A list of InterconnectLocation.RegionInfo objects,
        # that
        # describe parameters pertaining to the relation between this
        # InterconnectLocation and various Google Cloud regions.
        # Corresponds to the JSON property `regionInfos`
        # @return [Array<Google::Apis::ComputeV1::InterconnectLocationRegionInfo>]
        attr_accessor :region_infos
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] URLs of the other locations that can pair up with
        # this
        # location to support Single-Region 99.99% SLA. E.g. iad-zone1-1 and
        # iad-zone2-5467 are Single-Region 99.99% peer locations of each other.
        # Corresponds to the JSON property `singleRegionProductionCriticalPeerLocations`
        # @return [Array<String>]
        attr_accessor :single_region_production_critical_peer_locations
      
        # [Output Only] The status of this InterconnectLocation, which can take one
        # of the following values:
        # 
        # - CLOSED: The InterconnectLocation is closed and is unavailable for
        # provisioning new Interconnects.
        # - AVAILABLE: The InterconnectLocation is available for provisioning new
        # Interconnects.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `supportsPzs`
        # @return [Boolean]
        attr_accessor :supports_pzs
        alias_method :supports_pzs?, :supports_pzs
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @address = args[:address] if args.key?(:address)
          @availability_zone = args[:availability_zone] if args.key?(:availability_zone)
          @available_features = args[:available_features] if args.key?(:available_features)
          @available_link_types = args[:available_link_types] if args.key?(:available_link_types)
          @city = args[:city] if args.key?(:city)
          @continent = args[:continent] if args.key?(:continent)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @cross_site_interconnect_infos = args[:cross_site_interconnect_infos] if args.key?(:cross_site_interconnect_infos)
          @description = args[:description] if args.key?(:description)
          @facility_provider = args[:facility_provider] if args.key?(:facility_provider)
          @facility_provider_facility_id = args[:facility_provider_facility_id] if args.key?(:facility_provider_facility_id)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @peeringdb_facility_id = args[:peeringdb_facility_id] if args.key?(:peeringdb_facility_id)
          @region_infos = args[:region_infos] if args.key?(:region_infos)
          @self_link = args[:self_link] if args.key?(:self_link)
          @single_region_production_critical_peer_locations = args[:single_region_production_critical_peer_locations] if args.key?(:single_region_production_critical_peer_locations)
          @status = args[:status] if args.key?(:status)
          @supports_pzs = args[:supports_pzs] if args.key?(:supports_pzs)
        end
      end
      
      # Information about Cross-Site Interconnect wires which may be created
      # between the containing location and another remote location.
      class InterconnectLocationCrossSiteInterconnectInfo
        include Google::Apis::Core::Hashable
      
        # Output only. The remote location for Cross-Site Interconnect wires. This
        # specifies an
        # InterconnectLocation city (metropolitan area designator), which itself
        # may match multiple InterconnectLocations.
        # Corresponds to the JSON property `city`
        # @return [String]
        attr_accessor :city
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @city = args[:city] if args.key?(:city)
        end
      end
      
      # Response to the list request, and contains a list of interconnect locations.
      class InterconnectLocationList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InterconnectLocation resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InterconnectLocation>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # interconnectLocationList for lists of interconnect
        # locations.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InterconnectLocationList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InterconnectLocationList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Information about any potential InterconnectAttachments between an
      # Interconnect at a specific InterconnectLocation, and a specific Cloud
      # Region.
      class InterconnectLocationRegionInfo
        include Google::Apis::Core::Hashable
      
        # Output only. Expected round-trip time in milliseconds, from this
        # InterconnectLocation
        # to a VM in this region.
        # Corresponds to the JSON property `expectedRttMs`
        # @return [Fixnum]
        attr_accessor :expected_rtt_ms
      
        # Output only. Identifies whether L2 Interconnect Attachments can be created in
        # this
        # region for interconnects that are in this location.
        # Corresponds to the JSON property `l2ForwardingEnabled`
        # @return [Boolean]
        attr_accessor :l2_forwarding_enabled
        alias_method :l2_forwarding_enabled?, :l2_forwarding_enabled
      
        # Output only. Identifies the network presence of this location.
        # Corresponds to the JSON property `locationPresence`
        # @return [String]
        attr_accessor :location_presence
      
        # Output only. URL for the region of this location.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @expected_rtt_ms = args[:expected_rtt_ms] if args.key?(:expected_rtt_ms)
          @l2_forwarding_enabled = args[:l2_forwarding_enabled] if args.key?(:l2_forwarding_enabled)
          @location_presence = args[:location_presence] if args.key?(:location_presence)
          @region = args[:region] if args.key?(:region)
        end
      end
      
      # Configuration information for enabling Media Access Control security
      # (MACsec) on this Cloud Interconnect connection between Google and your
      # on-premises router.
      class InterconnectMacsec
        include Google::Apis::Core::Hashable
      
        # If set to true, the Interconnect connection is configured with ashould-secure
        # MACsec security policy, that allows the Google
        # router to fallback to cleartext traffic if the MKA session cannot be
        # established. By default, the Interconnect connection is configured with amust-
        # secure security policy that drops all traffic if the
        # MKA session cannot be established with your router.
        # Corresponds to the JSON property `failOpen`
        # @return [Boolean]
        attr_accessor :fail_open
        alias_method :fail_open?, :fail_open
      
        # Required. A keychain placeholder describing a set of named key objects
        # along with their start times. A MACsec CKN/CAK is generated for each
        # key in the key chain. Google router automatically picks the key with
        # the most recent startTime when establishing or re-establishing a MACsec
        # secure link.
        # Corresponds to the JSON property `preSharedKeys`
        # @return [Array<Google::Apis::ComputeV1::InterconnectMacsecPreSharedKey>]
        attr_accessor :pre_shared_keys
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @fail_open = args[:fail_open] if args.key?(:fail_open)
          @pre_shared_keys = args[:pre_shared_keys] if args.key?(:pre_shared_keys)
        end
      end
      
      # MACsec configuration information for the Interconnect connection. Contains
      # the generated Connectivity Association Key Name (CKN) and the key (CAK) for
      # this Interconnect connection.
      class InterconnectMacsecConfig
        include Google::Apis::Core::Hashable
      
        # A keychain placeholder describing a set of named key objects
        # along with their start times. A MACsec CKN/CAK is generated for each key in
        # the key chain. Google router automatically picks the key with the most
        # recent startTime when establishing or re-establishing a MACsec secure link.
        # Corresponds to the JSON property `preSharedKeys`
        # @return [Array<Google::Apis::ComputeV1::InterconnectMacsecConfigPreSharedKey>]
        attr_accessor :pre_shared_keys
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @pre_shared_keys = args[:pre_shared_keys] if args.key?(:pre_shared_keys)
        end
      end
      
      # Describes a pre-shared key used to setup MACsec in static connectivity
      # association key (CAK) mode.
      class InterconnectMacsecConfigPreSharedKey
        include Google::Apis::Core::Hashable
      
        # An auto-generated Connectivity Association Key (CAK) for this key.
        # Corresponds to the JSON property `cak`
        # @return [String]
        attr_accessor :cak
      
        # An auto-generated Connectivity Association Key Name (CKN) for this key.
        # Corresponds to the JSON property `ckn`
        # @return [String]
        attr_accessor :ckn
      
        # User provided name for this pre-shared key.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # User provided timestamp on or after which this key is valid.
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cak = args[:cak] if args.key?(:cak)
          @ckn = args[:ckn] if args.key?(:ckn)
          @name = args[:name] if args.key?(:name)
          @start_time = args[:start_time] if args.key?(:start_time)
        end
      end
      
      # Describes a pre-shared key used to setup MACsec in static connectivity
      # association key (CAK) mode.
      class InterconnectMacsecPreSharedKey
        include Google::Apis::Core::Hashable
      
        # Required. A name for this pre-shared key.
        # The name must be 1-63 characters long, and comply withRFC1035. Specifically,
        # the name must be 1-63
        # characters long and match the regular expression
        # `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a
        # lowercase letter, and all following characters must be a dash,
        # lowercase letter, or digit, except the last character, which cannot be
        # a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A RFC3339 timestamp on or after which the key is
        # valid. startTime can be in the future. If the keychain has a single
        # key, startTime can be omitted. If the keychain has multiple keys,
        # startTime is mandatory for each key. The start times of keys must be in
        # increasing order. The start times of two consecutive keys must be
        # at least 6 hours apart.
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @start_time = args[:start_time] if args.key?(:start_time)
        end
      end
      
      # Description of a planned outage on this Interconnect.
      class InterconnectOutageNotification
        include Google::Apis::Core::Hashable
      
        # If issue_type is IT_PARTIAL_OUTAGE, a list of the Google-side circuit
        # IDs that will be affected.
        # Corresponds to the JSON property `affectedCircuits`
        # @return [Array<String>]
        attr_accessor :affected_circuits
      
        # A description about the purpose of the outage.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Scheduled end time for the outage (milliseconds since Unix
        # epoch).
        # Corresponds to the JSON property `endTime`
        # @return [Fixnum]
        attr_accessor :end_time
      
        # Form this outage is expected to take, which can take one of the following
        # values:
        # 
        # - OUTAGE: The Interconnect may be completely out of service for
        # some or all of the specified window.
        # - PARTIAL_OUTAGE: Some circuits comprising the Interconnect as a whole
        # should remain up, but with reduced bandwidth.
        # Note that the versions of this enum prefixed with "IT_" have been
        # deprecated in favor of the unprefixed values.
        # Corresponds to the JSON property `issueType`
        # @return [String]
        attr_accessor :issue_type
      
        # Unique identifier for this outage notification.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The party that generated this notification, which can take the following
        # value:
        # 
        # - GOOGLE: this notification as generated by Google.
        # Note that the value of NSRC_GOOGLE has been deprecated in favor of
        # GOOGLE.
        # Corresponds to the JSON property `source`
        # @return [String]
        attr_accessor :source
      
        # Scheduled start time for the outage (milliseconds since Unix
        # epoch).
        # Corresponds to the JSON property `startTime`
        # @return [Fixnum]
        attr_accessor :start_time
      
        # State of this notification, which can take one of the following values:
        # 
        # - ACTIVE: This outage notification is active. The event could be in
        # the past, present, or future. See start_time and end_time for
        # scheduling.
        # - CANCELLED: The outage associated with this notification was cancelled
        # before the outage was due to start.
        # - COMPLETED: The outage associated with this notification is complete.
        # Note that the versions of this enum prefixed with "NS_" have been
        # deprecated in favor of the unprefixed values.
        # 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)
          @affected_circuits = args[:affected_circuits] if args.key?(:affected_circuits)
          @description = args[:description] if args.key?(:description)
          @end_time = args[:end_time] if args.key?(:end_time)
          @issue_type = args[:issue_type] if args.key?(:issue_type)
          @name = args[:name] if args.key?(:name)
          @source = args[:source] if args.key?(:source)
          @start_time = args[:start_time] if args.key?(:start_time)
          @state = args[:state] if args.key?(:state)
        end
      end
      
      # Additional interconnect parameters.
      class InterconnectParams
        include Google::Apis::Core::Hashable
      
        # Tag keys/values directly bound to this resource.
        # Tag keys and values have the same definition as resource
        # manager tags. The field is allowed for INSERT
        # only. The keys/values to set on the resource should be specified in
        # either ID ` : ` or Namespaced format
        # ` : `.
        # For example the following are valid inputs:
        # * `"tagKeys/333" : "tagValues/444", "tagKeys/123" : "tagValues/456"`
        # * `"123/environment" : "production", "345/abc" : "xyz"`
        # Note:
        # * Invalid combinations of ID & namespaced format is not supported. For
        # instance: `"123/environment" : "tagValues/444"` is invalid.
        # * Inconsistent format is not supported. For instance:
        # `"tagKeys/333" : "tagValues/444", "123/env" : "prod"` is invalid.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # Represents a Cross-Cloud Interconnect Remote Location resource.
      # You can use this resource to find remote location details about an
      # Interconnect attachment (VLAN).
      class InterconnectRemoteLocation
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The postal address of the Point of Presence, each
        # line in
        # the address is separated by a newline character.
        # Corresponds to the JSON property `address`
        # @return [String]
        attr_accessor :address
      
        # Output only. [Output Only] Subset of fields from InterconnectAttachment's
        # |configurationConstraints| field that apply to all attachments for this
        # remote location.
        # Corresponds to the JSON property `attachmentConfigurationConstraints`
        # @return [Google::Apis::ComputeV1::InterconnectAttachmentConfigurationConstraints]
        attr_accessor :attachment_configuration_constraints
      
        # Output only. [Output Only] Metropolitan area designator that indicates which
        # city an
        # interconnect is located.
        # For example: "Chicago, IL", "Amsterdam, Netherlands".
        # Corresponds to the JSON property `city`
        # @return [String]
        attr_accessor :city
      
        # Output only. [Output Only] Constraints on the parameters for creating Cross-
        # Cloud
        # Interconnect and associated InterconnectAttachments.
        # Corresponds to the JSON property `constraints`
        # @return [Google::Apis::ComputeV1::InterconnectRemoteLocationConstraints]
        attr_accessor :constraints
      
        # Output only. [Output Only] Continent for this location, which can take one of
        # the
        # following values:
        # 
        # - AFRICA
        # - ASIA_PAC
        # - EUROPE
        # - NORTH_AMERICA
        # - SOUTH_AMERICA
        # Corresponds to the JSON property `continent`
        # @return [String]
        attr_accessor :continent
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Output only. [Output Only] An optional description of the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] The name of the provider for this facility (e.g.,
        # EQUINIX).
        # Corresponds to the JSON property `facilityProvider`
        # @return [String]
        attr_accessor :facility_provider
      
        # Output only. [Output Only] A provider-assigned Identifier for this facility (e.
        # g.,
        # Ashburn-DC1).
        # Corresponds to the JSON property `facilityProviderFacilityId`
        # @return [String]
        attr_accessor :facility_provider_facility_id
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # interconnectRemoteLocation for interconnect remote
        # locations.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] Link Aggregation Control Protocol (LACP)
        # constraints, which
        # can take one of the following values: LACP_SUPPORTED, LACP_UNSUPPORTED
        # Corresponds to the JSON property `lacp`
        # @return [String]
        attr_accessor :lacp
      
        # Output only. [Output Only]
        # The maximum number of 100 Gbps ports supported in a link aggregation group
        # (LAG). When linkType is 100 Gbps, requestedLinkCount cannot exceed
        # max_lag_size_100_gbps.
        # Corresponds to the JSON property `maxLagSize100Gbps`
        # @return [Fixnum]
        attr_accessor :max_lag_size100_gbps
      
        # Output only. [Output Only]
        # The maximum number of 10 Gbps ports supported in a link aggregation group
        # (LAG). When linkType is 10 Gbps, requestedLinkCount cannot exceed
        # max_lag_size_10_gbps.
        # Corresponds to the JSON property `maxLagSize10Gbps`
        # @return [Fixnum]
        attr_accessor :max_lag_size10_gbps
      
        # Output only. [Output Only]
        # The maximum number of 400 Gbps ports supported in a link aggregation group
        # (LAG). When linkType is 400 Gbps, requestedLinkCount cannot exceed
        # max_lag_size_400_gbps.
        # Corresponds to the JSON property `maxLagSize400Gbps`
        # @return [Fixnum]
        attr_accessor :max_lag_size400_gbps
      
        # Output only. [Output Only] Name of the resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The peeringdb identifier for this facility (
        # corresponding
        # with a netfac type in peeringdb).
        # Corresponds to the JSON property `peeringdbFacilityId`
        # @return [String]
        attr_accessor :peeringdb_facility_id
      
        # Output only. [Output Only] Permitted connections.
        # Corresponds to the JSON property `permittedConnections`
        # @return [Array<Google::Apis::ComputeV1::InterconnectRemoteLocationPermittedConnections>]
        attr_accessor :permitted_connections
      
        # Output only. [Output Only] Indicates the service provider present at the
        # remote
        # location. Example values: "Amazon Web Services", "Microsoft Azure".
        # Corresponds to the JSON property `remoteService`
        # @return [String]
        attr_accessor :remote_service
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] The status of this InterconnectRemoteLocation,
        # which can take
        # one of the following values:
        # 
        # - CLOSED: The InterconnectRemoteLocation is closed and is unavailable
        # for provisioning new Cross-Cloud Interconnects.
        # - AVAILABLE: The
        # InterconnectRemoteLocation is available for provisioning new
        # Cross-Cloud Interconnects.
        # 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)
          @address = args[:address] if args.key?(:address)
          @attachment_configuration_constraints = args[:attachment_configuration_constraints] if args.key?(:attachment_configuration_constraints)
          @city = args[:city] if args.key?(:city)
          @constraints = args[:constraints] if args.key?(:constraints)
          @continent = args[:continent] if args.key?(:continent)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @facility_provider = args[:facility_provider] if args.key?(:facility_provider)
          @facility_provider_facility_id = args[:facility_provider_facility_id] if args.key?(:facility_provider_facility_id)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @lacp = args[:lacp] if args.key?(:lacp)
          @max_lag_size100_gbps = args[:max_lag_size100_gbps] if args.key?(:max_lag_size100_gbps)
          @max_lag_size10_gbps = args[:max_lag_size10_gbps] if args.key?(:max_lag_size10_gbps)
          @max_lag_size400_gbps = args[:max_lag_size400_gbps] if args.key?(:max_lag_size400_gbps)
          @name = args[:name] if args.key?(:name)
          @peeringdb_facility_id = args[:peeringdb_facility_id] if args.key?(:peeringdb_facility_id)
          @permitted_connections = args[:permitted_connections] if args.key?(:permitted_connections)
          @remote_service = args[:remote_service] if args.key?(:remote_service)
          @self_link = args[:self_link] if args.key?(:self_link)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # 
      class InterconnectRemoteLocationConstraints
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Port pair remote location constraints, which can
        # take one
        # of the following values: PORT_PAIR_UNCONSTRAINED_REMOTE_LOCATION,
        # PORT_PAIR_MATCHING_REMOTE_LOCATION.
        # Google Cloud API refers only to individual ports, but the UI uses this
        # field when ordering a pair of ports, to prevent users from accidentally
        # ordering something that is incompatible with their cloud provider.
        # Specifically, when ordering a redundant pair of Cross-Cloud Interconnect
        # ports, and one of them uses a remote location with
        # portPairMatchingRemoteLocation set to matching, the UI requires that
        # both ports use the same remote location.
        # Corresponds to the JSON property `portPairRemoteLocation`
        # @return [String]
        attr_accessor :port_pair_remote_location
      
        # Output only. [Output Only] Port pair VLAN constraints, which can take one of
        # the
        # following values: PORT_PAIR_UNCONSTRAINED_VLAN, PORT_PAIR_MATCHING_VLAN
        # Corresponds to the JSON property `portPairVlan`
        # @return [String]
        attr_accessor :port_pair_vlan
      
        # Output only. [Output Only]
        # [min-length, max-length]
        # The minimum and maximum value (inclusive) for the IPv4 subnet
        # length.
        # For example, an  interconnectRemoteLocation for Azure has `min: 30,
        # max:
        # 30` because Azure requires /30 subnets.
        # This range specifies the values supported by both cloud providers.
        # Interconnect currently supports /29 and /30 IPv4 subnet lengths. If a
        # remote cloud has no constraint on IPv4 subnet length, the range would
        # thus be `min: 29, max: 30`.
        # Corresponds to the JSON property `subnetLengthRange`
        # @return [Google::Apis::ComputeV1::InterconnectRemoteLocationConstraintsSubnetLengthRange]
        attr_accessor :subnet_length_range
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @port_pair_remote_location = args[:port_pair_remote_location] if args.key?(:port_pair_remote_location)
          @port_pair_vlan = args[:port_pair_vlan] if args.key?(:port_pair_vlan)
          @subnet_length_range = args[:subnet_length_range] if args.key?(:subnet_length_range)
        end
      end
      
      # 
      class InterconnectRemoteLocationConstraintsSubnetLengthRange
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `max`
        # @return [Fixnum]
        attr_accessor :max
      
        # 
        # Corresponds to the JSON property `min`
        # @return [Fixnum]
        attr_accessor :min
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max = args[:max] if args.key?(:max)
          @min = args[:min] if args.key?(:min)
        end
      end
      
      # Response to the list request, and contains a list of interconnect remote
      # locations.
      class InterconnectRemoteLocationList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InterconnectRemoteLocation resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InterconnectRemoteLocation>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # interconnectRemoteLocationList for lists of
        # interconnect remote locations.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token lets you get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::InterconnectRemoteLocationList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::InterconnectRemoteLocationList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class InterconnectRemoteLocationPermittedConnections
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] URL of an Interconnect location that is permitted
        # to
        # connect to this Interconnect remote location.
        # Corresponds to the JSON property `interconnectLocation`
        # @return [String]
        attr_accessor :interconnect_location
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @interconnect_location = args[:interconnect_location] if args.key?(:interconnect_location)
        end
      end
      
      # Response for the InterconnectsGetDiagnosticsRequest.
      class InterconnectsGetDiagnosticsResponse
        include Google::Apis::Core::Hashable
      
        # Diagnostics information about the Interconnect connection, which contains
        # detailed and current technical information about Google's side of the
        # connection.
        # Corresponds to the JSON property `result`
        # @return [Google::Apis::ComputeV1::InterconnectDiagnostics]
        attr_accessor :result
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @result = args[:result] if args.key?(:result)
        end
      end
      
      # Response for the InterconnectsGetMacsecConfigRequest.
      class InterconnectsGetMacsecConfigResponse
        include Google::Apis::Core::Hashable
      
        # end_interface: MixerGetResponseWithEtagBuilder
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # MACsec configuration information for the Interconnect connection. Contains
        # the generated Connectivity Association Key Name (CKN) and the key (CAK) for
        # this Interconnect connection.
        # Corresponds to the JSON property `result`
        # @return [Google::Apis::ComputeV1::InterconnectMacsecConfig]
        attr_accessor :result
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @result = args[:result] if args.key?(:result)
        end
      end
      
      # Represents a License resource.
      # A License represents billing and aggregate usage data forpublic andmarketplace
      # images.
      # *Caution* This resource is intended for
      # use only by third-party partners who are creatingCloud Marketplace
      # images.
      class License
        include Google::Apis::Core::Hashable
      
        # Specifies licenseCodes of licenses that can replace this license. Note:
        # such replacements are allowed even if removable_from_disk is false.
        # Corresponds to the JSON property `allowedReplacementLicenses`
        # @return [Array<String>]
        attr_accessor :allowed_replacement_licenses
      
        # If true, this license can be appended to an existing disk's set of
        # licenses.
        # Corresponds to the JSON property `appendableToDisk`
        # @return [Boolean]
        attr_accessor :appendable_to_disk
        alias_method :appendable_to_disk?, :appendable_to_disk
      
        # [Output Only] Deprecated. This field no longer reflects whether a license
        # charges a usage fee.
        # Corresponds to the JSON property `chargesUseFee`
        # @return [Boolean]
        attr_accessor :charges_use_fee
        alias_method :charges_use_fee?, :charges_use_fee
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional textual description of the resource; provided by the client
        # when the resource is created.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Specifies licenseCodes of licenses that are incompatible with this license.
        # If a license is incompatible with this license, it cannot be attached to
        # the same disk or image.
        # Corresponds to the JSON property `incompatibleLicenses`
        # @return [Array<String>]
        attr_accessor :incompatible_licenses
      
        # Output only. [Output Only] Type of resource. Always compute#license for
        # licenses.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] The unique code used to attach this license to images,
        # snapshots, and disks.
        # Corresponds to the JSON property `licenseCode`
        # @return [Fixnum]
        attr_accessor :license_code
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `minimumRetention`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :minimum_retention
      
        # If true, this license can only be used on VMs on multi tenant nodes.
        # Corresponds to the JSON property `multiTenantOnly`
        # @return [Boolean]
        attr_accessor :multi_tenant_only
        alias_method :multi_tenant_only?, :multi_tenant_only
      
        # Name of the resource. The name must be 1-63 characters long and
        # comply withRFC1035.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # If true, indicates this is an OS license. Only one OS license can be
        # attached to a disk or image at a time.
        # Corresponds to the JSON property `osLicense`
        # @return [Boolean]
        attr_accessor :os_license
        alias_method :os_license?, :os_license
      
        # Additional license params.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::LicenseParams]
        attr_accessor :params
      
        # If true, this license can be removed from a disk's set of licenses, with no
        # replacement license needed.
        # Corresponds to the JSON property `removableFromDisk`
        # @return [Boolean]
        attr_accessor :removable_from_disk
        alias_method :removable_from_disk?, :removable_from_disk
      
        # Specifies the set of permissible coattached licenseCodes of licenses that
        # satisfy the coattachment requirement of this license. At least one license
        # from the set must be attached to the same disk or image as this license.
        # Corresponds to the JSON property `requiredCoattachedLicenses`
        # @return [Array<String>]
        attr_accessor :required_coattached_licenses
      
        # [Input Only] Deprecated.
        # Corresponds to the JSON property `resourceRequirements`
        # @return [Google::Apis::ComputeV1::LicenseResourceRequirements]
        attr_accessor :resource_requirements
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource with the
        # resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # If true, this license can only be used on VMs on sole tenant nodes.
        # Corresponds to the JSON property `soleTenantOnly`
        # @return [Boolean]
        attr_accessor :sole_tenant_only
        alias_method :sole_tenant_only?, :sole_tenant_only
      
        # If false, licenses will not be copied from the source resource when
        # creating an image from a disk, disk from snapshot, or snapshot from disk.
        # Corresponds to the JSON property `transferable`
        # @return [Boolean]
        attr_accessor :transferable
        alias_method :transferable?, :transferable
      
        # Output only. [Output Only] Last update timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `updateTimestamp`
        # @return [String]
        attr_accessor :update_timestamp
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @allowed_replacement_licenses = args[:allowed_replacement_licenses] if args.key?(:allowed_replacement_licenses)
          @appendable_to_disk = args[:appendable_to_disk] if args.key?(:appendable_to_disk)
          @charges_use_fee = args[:charges_use_fee] if args.key?(:charges_use_fee)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @incompatible_licenses = args[:incompatible_licenses] if args.key?(:incompatible_licenses)
          @kind = args[:kind] if args.key?(:kind)
          @license_code = args[:license_code] if args.key?(:license_code)
          @minimum_retention = args[:minimum_retention] if args.key?(:minimum_retention)
          @multi_tenant_only = args[:multi_tenant_only] if args.key?(:multi_tenant_only)
          @name = args[:name] if args.key?(:name)
          @os_license = args[:os_license] if args.key?(:os_license)
          @params = args[:params] if args.key?(:params)
          @removable_from_disk = args[:removable_from_disk] if args.key?(:removable_from_disk)
          @required_coattached_licenses = args[:required_coattached_licenses] if args.key?(:required_coattached_licenses)
          @resource_requirements = args[:resource_requirements] if args.key?(:resource_requirements)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @sole_tenant_only = args[:sole_tenant_only] if args.key?(:sole_tenant_only)
          @transferable = args[:transferable] if args.key?(:transferable)
          @update_timestamp = args[:update_timestamp] if args.key?(:update_timestamp)
        end
      end
      
      # Represents a License Code resource.
      # A License Code is a unique identifier used to represent alicense
      # resource.
      # *Caution* This resource is intended for
      # use only by third-party partners who are creatingCloud Marketplace
      # images.
      class LicenseCode
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Output only. [Output Only] Description of this License Code.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of resource. Always compute#licenseCode for
        # licenses.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] URL and description aliases of Licenses with the same
        # License Code.
        # Corresponds to the JSON property `licenseAlias`
        # @return [Array<Google::Apis::ComputeV1::LicenseCodeLicenseAlias>]
        attr_accessor :license_alias
      
        # Output only. [Output Only] Name of the resource. The name is 1-20 characters
        # long and
        # must be a valid 64 bit integer.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Current state of this License Code.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # Output only. [Output Only] If true, the license will remain attached when
        # creating
        # images or snapshots from disks. Otherwise, the license is not transferred.
        # Corresponds to the JSON property `transferable`
        # @return [Boolean]
        attr_accessor :transferable
        alias_method :transferable?, :transferable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @license_alias = args[:license_alias] if args.key?(:license_alias)
          @name = args[:name] if args.key?(:name)
          @self_link = args[:self_link] if args.key?(:self_link)
          @state = args[:state] if args.key?(:state)
          @transferable = args[:transferable] if args.key?(:transferable)
        end
      end
      
      # 
      class LicenseCodeLicenseAlias
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Description of this License Code.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] URL of license corresponding to this License Code.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @description = args[:description] if args.key?(:description)
          @self_link = args[:self_link] if args.key?(:self_link)
        end
      end
      
      # Additional license params.
      class LicenseParams
        include Google::Apis::Core::Hashable
      
        # Input only. Resource manager tags to be bound to the license. Tag keys and
        # values
        # have the same definition as resource
        # manager tags. Keys and values can be either in numeric format,
        # such as `tagKeys/`tag_key_id`` and `tagValues/456` or in namespaced
        # format such as ``org_id|project_id`/`tag_key_short_name`` and
        # ``tag_value_short_name``. The field is ignored (both PUT &
        # PATCH) when empty.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # Commitment for a particular license resource.
      class LicenseResourceCommitment
        include Google::Apis::Core::Hashable
      
        # The number of licenses you plan to purchase.
        # Corresponds to the JSON property `amount`
        # @return [Fixnum]
        attr_accessor :amount
      
        # The number of cores per license.
        # Corresponds to the JSON property `coresPerLicense`
        # @return [String]
        attr_accessor :cores_per_license
      
        # The applicable license URI.
        # Corresponds to the JSON property `license`
        # @return [String]
        attr_accessor :license
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @amount = args[:amount] if args.key?(:amount)
          @cores_per_license = args[:cores_per_license] if args.key?(:cores_per_license)
          @license = args[:license] if args.key?(:license)
        end
      end
      
      # 
      class LicenseResourceRequirements
        include Google::Apis::Core::Hashable
      
        # [Input Only] Deprecated. This field no longer reflects the minimum number
        # of guest cpus required to use the Instance.
        # Corresponds to the JSON property `minGuestCpuCount`
        # @return [Fixnum]
        attr_accessor :min_guest_cpu_count
      
        # [Input Only] Deprecated. This field no longer reflects the minimum memory
        # required to use the Instance.
        # Corresponds to the JSON property `minMemoryMb`
        # @return [Fixnum]
        attr_accessor :min_memory_mb
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @min_guest_cpu_count = args[:min_guest_cpu_count] if args.key?(:min_guest_cpu_count)
          @min_memory_mb = args[:min_memory_mb] if args.key?(:min_memory_mb)
        end
      end
      
      # 
      class LicensesListResponse
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of License resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::License>]
        attr_accessor :items
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::LicensesListResponse::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::LicensesListResponse::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class LocalDisk
        include Google::Apis::Core::Hashable
      
        # Specifies the number of such disks.
        # Corresponds to the JSON property `diskCount`
        # @return [Fixnum]
        attr_accessor :disk_count
      
        # Specifies the size of the disk in base-2 GB.
        # Corresponds to the JSON property `diskSizeGb`
        # @return [Fixnum]
        attr_accessor :disk_size_gb
      
        # Specifies the desired disk type on the node. This disk type must be a
        # local storage type (e.g.: local-ssd).
        # Note that for nodeTemplates, this should be the name of the disk type and
        # not its URL.
        # Corresponds to the JSON property `diskType`
        # @return [String]
        attr_accessor :disk_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disk_count = args[:disk_count] if args.key?(:disk_count)
          @disk_size_gb = args[:disk_size_gb] if args.key?(:disk_size_gb)
          @disk_type = args[:disk_type] if args.key?(:disk_type)
        end
      end
      
      # Provides a localized error message that is safe to return to the user
      # which can be attached to an RPC error.
      class LocalizedMessage
        include Google::Apis::Core::Hashable
      
        # The locale used following the specification defined at
        # https://www.rfc-editor.org/rfc/bcp/bcp47.txt.
        # Examples are: "en-US", "fr-CH", "es-MX"
        # Corresponds to the JSON property `locale`
        # @return [String]
        attr_accessor :locale
      
        # The localized error message in the above locale.
        # 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)
          @locale = args[:locale] if args.key?(:locale)
          @message = args[:message] if args.key?(:message)
        end
      end
      
      # Configuration for location policy among multiple possible locations
      # (e.g. preferences for zone selection among zones in a single region).
      class LocationPolicy
        include Google::Apis::Core::Hashable
      
        # Location configurations mapped by location name.
        # Currently only zone names are supported and must be represented as valid
        # internal URLs, such as zones/us-central1-a.
        # Corresponds to the JSON property `locations`
        # @return [Hash<String,Google::Apis::ComputeV1::LocationPolicyLocation>]
        attr_accessor :locations
      
        # Strategy for distributing VMs across zones in a region.
        # Corresponds to the JSON property `targetShape`
        # @return [String]
        attr_accessor :target_shape
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @locations = args[:locations] if args.key?(:locations)
          @target_shape = args[:target_shape] if args.key?(:target_shape)
        end
      end
      
      # 
      class LocationPolicyLocation
        include Google::Apis::Core::Hashable
      
        # Per-zone constraints on location policy for this zone.
        # Corresponds to the JSON property `constraints`
        # @return [Google::Apis::ComputeV1::LocationPolicyLocationConstraints]
        attr_accessor :constraints
      
        # Preference for a given location. Set to either ALLOW orDENY.
        # Corresponds to the JSON property `preference`
        # @return [String]
        attr_accessor :preference
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @constraints = args[:constraints] if args.key?(:constraints)
          @preference = args[:preference] if args.key?(:preference)
        end
      end
      
      # Per-zone constraints on location policy for this zone.
      class LocationPolicyLocationConstraints
        include Google::Apis::Core::Hashable
      
        # Maximum number of items that are allowed to be placed in this zone.
        # The value must be non-negative.
        # Corresponds to the JSON property `maxCount`
        # @return [Fixnum]
        attr_accessor :max_count
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max_count = args[:max_count] if args.key?(:max_count)
        end
      end
      
      # Represents a machine image resource.
      # A machine image is a Compute Engine resource that stores all the
      # configuration, metadata, permissions, and data from one or more disks
      # required to create a Virtual machine (VM) instance. For more information,
      # seeMachine images.
      class MachineImage
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The creation timestamp for this machine image
        # inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Input Only] Whether to attempt an application consistent machine image by
        # informing the OS to prepare for the snapshot process.
        # Corresponds to the JSON property `guestFlush`
        # @return [Boolean]
        attr_accessor :guest_flush
        alias_method :guest_flush?, :guest_flush
      
        # Output only. [Output Only] A unique identifier for this machine image. The
        # server
        # defines this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # [Output Only] Properties of source instance
        # Corresponds to the JSON property `instanceProperties`
        # @return [Google::Apis::ComputeV1::InstanceProperties]
        attr_accessor :instance_properties
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # machineImage for machine image.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this machine image, which is
        # essentially a hash of the labels set used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels.
        # To see the latest fingerprint, make get() request to the
        # machine image.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels to apply to this machine image. These can be later modified by
        # the setLabels method.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Encrypts the machine image using acustomer-supplied
        # encryption key.
        # After you encrypt a machine image using a customer-supplied key, you must
        # provide the same key if you use the machine image later. For example, you
        # must provide the encryption key when you create an instance from the
        # encrypted machine image in a future request.
        # Customer-supplied encryption keys do not protect access to metadata of the
        # machine image.
        # If you do not provide an encryption key when creating the machine image,
        # then the machine image will be encrypted using an automatically generated
        # key and you do not need to provide a key to use the machine image later.
        # Corresponds to the JSON property `machineImageEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :machine_image_encryption_key
      
        # Name of the resource; provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Machine Image parameters
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::MachineImageParams]
        attr_accessor :params
      
        # Output only. Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzi`
        # @return [Boolean]
        attr_accessor :satisfies_pzi
        alias_method :satisfies_pzi?, :satisfies_pzi
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # Output only. An array of Machine Image specific properties for disks attached
        # to the
        # source instance
        # Corresponds to the JSON property `savedDisks`
        # @return [Array<Google::Apis::ComputeV1::SavedDisk>]
        attr_accessor :saved_disks
      
        # Output only. [Output Only] The URL for this machine image. The server defines
        # this URL.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Input Only] Thecustomer-supplied
        # encryption key of the disks attached to the source instance. Required
        # if the source disk is protected by a customer-supplied encryption key.
        # Corresponds to the JSON property `sourceDiskEncryptionKeys`
        # @return [Array<Google::Apis::ComputeV1::SourceDiskEncryptionKey>]
        attr_accessor :source_disk_encryption_keys
      
        # The source instance used to create the machine image. You can provide this
        # as a partial or full URL to the resource. For example, the following are
        # valid values:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/
        # instances/instance
        # - projects/project/zones/zone/instances/instance
        # Corresponds to the JSON property `sourceInstance`
        # @return [String]
        attr_accessor :source_instance
      
        # DEPRECATED: Please use compute#instanceProperties instead.
        # New properties will not be added to this field.
        # Corresponds to the JSON property `sourceInstanceProperties`
        # @return [Google::Apis::ComputeV1::SourceInstanceProperties]
        attr_accessor :source_instance_properties
      
        # Output only. [Output Only] The status of the machine image. One of the
        # following values:INVALID, CREATING, READY,DELETING, and UPLOADING.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # The regional or multi-regional Cloud Storage bucket location where themachine
        # image is
        # stored.
        # Corresponds to the JSON property `storageLocations`
        # @return [Array<String>]
        attr_accessor :storage_locations
      
        # Output only. [Output Only] Total size of the storage used by the machine image.
        # Corresponds to the JSON property `totalStorageBytes`
        # @return [Fixnum]
        attr_accessor :total_storage_bytes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @guest_flush = args[:guest_flush] if args.key?(:guest_flush)
          @id = args[:id] if args.key?(:id)
          @instance_properties = args[:instance_properties] if args.key?(:instance_properties)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @machine_image_encryption_key = args[:machine_image_encryption_key] if args.key?(:machine_image_encryption_key)
          @name = args[:name] if args.key?(:name)
          @params = args[:params] if args.key?(:params)
          @satisfies_pzi = args[:satisfies_pzi] if args.key?(:satisfies_pzi)
          @satisfies_pzs = args[:satisfies_pzs] if args.key?(:satisfies_pzs)
          @saved_disks = args[:saved_disks] if args.key?(:saved_disks)
          @self_link = args[:self_link] if args.key?(:self_link)
          @source_disk_encryption_keys = args[:source_disk_encryption_keys] if args.key?(:source_disk_encryption_keys)
          @source_instance = args[:source_instance] if args.key?(:source_instance)
          @source_instance_properties = args[:source_instance_properties] if args.key?(:source_instance_properties)
          @status = args[:status] if args.key?(:status)
          @storage_locations = args[:storage_locations] if args.key?(:storage_locations)
          @total_storage_bytes = args[:total_storage_bytes] if args.key?(:total_storage_bytes)
        end
      end
      
      # A list of machine images.
      class MachineImageList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of MachineImage resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::MachineImage>]
        attr_accessor :items
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # machineImagesListResponse for machine image lists.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::MachineImageList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::MachineImageList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Machine Image parameters
      class MachineImageParams
        include Google::Apis::Core::Hashable
      
        # Input only. Resource manager tags to be bound to the machine image. Tag keys
        # and values
        # have the same definition as resource
        # manager tags. Keys and values can be either in numeric format,
        # such as `tagKeys/`tag_key_id`` and `tagValues/`tag_value_id`` or in
        # namespaced format such as ``org_id|project_id`/`tag_key_short_name`` and
        # ``tag_value_short_name``. The field is ignored (both PUT &
        # PATCH) when empty.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # Represents a Machine Type resource.
      # You can use specific machine types for your VM instances based on performance
      # and pricing requirements. For more information, readMachine Types.
      class MachineType
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of accelerator configurations assigned to this
        # machine type.
        # Corresponds to the JSON property `accelerators`
        # @return [Array<Google::Apis::ComputeV1::MachineType::Accelerator>]
        attr_accessor :accelerators
      
        # [Output Only] The architecture of the machine type.
        # Corresponds to the JSON property `architecture`
        # @return [String]
        attr_accessor :architecture
      
        # [Output Only] The configuration of bundled local SSD for the machine type.
        # Corresponds to the JSON property `bundledLocalSsds`
        # @return [Google::Apis::ComputeV1::BundledLocalSsds]
        attr_accessor :bundled_local_ssds
      
        # [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Deprecation status for a public resource.
        # Corresponds to the JSON property `deprecated`
        # @return [Google::Apis::ComputeV1::DeprecationStatus]
        attr_accessor :deprecated
      
        # [Output Only] An optional textual description of the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The number of virtual CPUs that are available to the
        # instance.
        # Corresponds to the JSON property `guestCpus`
        # @return [Fixnum]
        attr_accessor :guest_cpus
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # [Deprecated] This property is deprecated and will never be populated with
        # any relevant values.
        # Corresponds to the JSON property `imageSpaceGb`
        # @return [Fixnum]
        attr_accessor :image_space_gb
      
        # [Output Only] Whether this machine type has a shared CPU. SeeShared-core
        # machine
        # types for more information.
        # Corresponds to the JSON property `isSharedCpu`
        # @return [Boolean]
        attr_accessor :is_shared_cpu
        alias_method :is_shared_cpu?, :is_shared_cpu
      
        # Output only. [Output Only] The type of the resource. Alwayscompute#machineType
        # for machine types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] Maximum persistent disks allowed.
        # Corresponds to the JSON property `maximumPersistentDisks`
        # @return [Fixnum]
        attr_accessor :maximum_persistent_disks
      
        # [Output Only] Maximum total persistent disks size (GB) allowed.
        # Corresponds to the JSON property `maximumPersistentDisksSizeGb`
        # @return [Fixnum]
        attr_accessor :maximum_persistent_disks_size_gb
      
        # [Output Only] The amount of physical memory available to the instance,
        # defined in MB.
        # Corresponds to the JSON property `memoryMb`
        # @return [Fixnum]
        attr_accessor :memory_mb
      
        # [Output Only] Name of the resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] The name of the zone where the machine type resides,
        # such as us-central1-a.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @accelerators = args[:accelerators] if args.key?(:accelerators)
          @architecture = args[:architecture] if args.key?(:architecture)
          @bundled_local_ssds = args[:bundled_local_ssds] if args.key?(:bundled_local_ssds)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @deprecated = args[:deprecated] if args.key?(:deprecated)
          @description = args[:description] if args.key?(:description)
          @guest_cpus = args[:guest_cpus] if args.key?(:guest_cpus)
          @id = args[:id] if args.key?(:id)
          @image_space_gb = args[:image_space_gb] if args.key?(:image_space_gb)
          @is_shared_cpu = args[:is_shared_cpu] if args.key?(:is_shared_cpu)
          @kind = args[:kind] if args.key?(:kind)
          @maximum_persistent_disks = args[:maximum_persistent_disks] if args.key?(:maximum_persistent_disks)
          @maximum_persistent_disks_size_gb = args[:maximum_persistent_disks_size_gb] if args.key?(:maximum_persistent_disks_size_gb)
          @memory_mb = args[:memory_mb] if args.key?(:memory_mb)
          @name = args[:name] if args.key?(:name)
          @self_link = args[:self_link] if args.key?(:self_link)
          @zone = args[:zone] if args.key?(:zone)
        end
        
        # 
        class Accelerator
          include Google::Apis::Core::Hashable
        
          # Number of accelerator cards exposed to the guest.
          # Corresponds to the JSON property `guestAcceleratorCount`
          # @return [Fixnum]
          attr_accessor :guest_accelerator_count
        
          # The accelerator type resource name, not a full URL, e.g.nvidia-tesla-t4.
          # Corresponds to the JSON property `guestAcceleratorType`
          # @return [String]
          attr_accessor :guest_accelerator_type
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @guest_accelerator_count = args[:guest_accelerator_count] if args.key?(:guest_accelerator_count)
            @guest_accelerator_type = args[:guest_accelerator_type] if args.key?(:guest_accelerator_type)
          end
        end
      end
      
      # 
      class MachineTypeAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of MachineTypesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::MachineTypesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # machineTypeAggregatedList for aggregated lists of
        # machine types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::MachineTypeAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::MachineTypeAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of machine types.
      class MachineTypeList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of MachineType resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::MachineType>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#machineTypeList
        # for lists of machine types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::MachineTypeList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::MachineTypeList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class MachineTypesScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of machine types contained in this scope.
        # Corresponds to the JSON property `machineTypes`
        # @return [Array<Google::Apis::ComputeV1::MachineType>]
        attr_accessor :machine_types
      
        # [Output Only] An informational warning that appears when the machine types
        # list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::MachineTypesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @machine_types = args[:machine_types] if args.key?(:machine_types)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] An informational warning that appears when the machine types
        # list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::MachineTypesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # A Managed Instance resource.
      class ManagedInstance
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The current action that the managed instance group
        # has
        # scheduled for the instance. Possible values:
        # 
        # - NONE The instance is running, and the managed
        # instance group does not have any scheduled actions for this instance.
        # - CREATING The managed instance group is creating this
        # instance. If the group fails to create this instance, it will try again
        # until it is successful.
        # - CREATING_WITHOUT_RETRIES The managed instance group
        # is attempting to create this instance only once. If the group fails
        # to create this instance, it does not try again and the group'stargetSize
        # value is decreased instead.
        # - RECREATING The managed instance group is recreating
        # this instance.
        # - DELETING The managed instance group is permanently
        # deleting this instance.
        # - ABANDONING The managed instance group is abandoning
        # this instance. The instance will be removed from the instance group
        # and from any target pools that are associated with this group.
        # - RESTARTING The managed instance group is restarting
        # the instance.
        # - REFRESHING The managed instance group is applying
        # configuration changes to the instance without stopping it. For example,
        # the group can update the target pool list for an instance without
        # stopping that instance.
        # - VERIFYING The managed instance group has created the
        # instance and it is in the process of being verified.
        # Corresponds to the JSON property `currentAction`
        # @return [String]
        attr_accessor :current_action
      
        # Output only. [Output only] The unique identifier for this resource. This field
        # is empty
        # when instance does not exist.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] The URL of the instance. The URL can exist even if
        # the
        # instance has not yet been created.
        # Corresponds to the JSON property `instance`
        # @return [String]
        attr_accessor :instance
      
        # Output only. [Output Only] Health state of the instance per health-check.
        # Corresponds to the JSON property `instanceHealth`
        # @return [Array<Google::Apis::ComputeV1::ManagedInstanceInstanceHealth>]
        attr_accessor :instance_health
      
        # Output only. [Output Only] The status of the instance. This field is empty
        # when
        # the instance does not exist.
        # Corresponds to the JSON property `instanceStatus`
        # @return [String]
        attr_accessor :instance_status
      
        # Output only. [Output Only] Information about the last attempt to create or
        # delete
        # the instance.
        # Corresponds to the JSON property `lastAttempt`
        # @return [Google::Apis::ComputeV1::ManagedInstanceLastAttempt]
        attr_accessor :last_attempt
      
        # Output only. [Output Only] The name of the instance. The name always exists
        # even if the
        # instance has not yet been created.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Preserved state for a given instance.
        # Corresponds to the JSON property `preservedStateFromConfig`
        # @return [Google::Apis::ComputeV1::PreservedState]
        attr_accessor :preserved_state_from_config
      
        # Preserved state for a given instance.
        # Corresponds to the JSON property `preservedStateFromPolicy`
        # @return [Google::Apis::ComputeV1::PreservedState]
        attr_accessor :preserved_state_from_policy
      
        # Output only. [Output Only] Instance properties selected for this instance
        # resulting from
        # InstanceFlexibilityPolicy.
        # Corresponds to the JSON property `propertiesFromFlexibilityPolicy`
        # @return [Google::Apis::ComputeV1::ManagedInstancePropertiesFromFlexibilityPolicy]
        attr_accessor :properties_from_flexibility_policy
      
        # Output only. [Output Only] Intended version of this instance.
        # Corresponds to the JSON property `version`
        # @return [Google::Apis::ComputeV1::ManagedInstanceVersion]
        attr_accessor :version
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @current_action = args[:current_action] if args.key?(:current_action)
          @id = args[:id] if args.key?(:id)
          @instance = args[:instance] if args.key?(:instance)
          @instance_health = args[:instance_health] if args.key?(:instance_health)
          @instance_status = args[:instance_status] if args.key?(:instance_status)
          @last_attempt = args[:last_attempt] if args.key?(:last_attempt)
          @name = args[:name] if args.key?(:name)
          @preserved_state_from_config = args[:preserved_state_from_config] if args.key?(:preserved_state_from_config)
          @preserved_state_from_policy = args[:preserved_state_from_policy] if args.key?(:preserved_state_from_policy)
          @properties_from_flexibility_policy = args[:properties_from_flexibility_policy] if args.key?(:properties_from_flexibility_policy)
          @version = args[:version] if args.key?(:version)
        end
      end
      
      # 
      class ManagedInstanceInstanceHealth
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The current detailed instance health state.
        # Corresponds to the JSON property `detailedHealthState`
        # @return [String]
        attr_accessor :detailed_health_state
      
        # Output only. [Output Only] The URL for the health check that verifies whether
        # the
        # instance is healthy.
        # Corresponds to the JSON property `healthCheck`
        # @return [String]
        attr_accessor :health_check
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @detailed_health_state = args[:detailed_health_state] if args.key?(:detailed_health_state)
          @health_check = args[:health_check] if args.key?(:health_check)
        end
      end
      
      # 
      class ManagedInstanceLastAttempt
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Encountered errors during the last attempt to
        # create or
        # delete the instance.
        # Corresponds to the JSON property `errors`
        # @return [Google::Apis::ComputeV1::ManagedInstanceLastAttempt::Errors]
        attr_accessor :errors
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @errors = args[:errors] if args.key?(:errors)
        end
        
        # Output only. [Output Only] Encountered errors during the last attempt to
        # create or
        # delete the instance.
        class Errors
          include Google::Apis::Core::Hashable
        
          # [Output Only] The array of errors encountered while processing this
          # operation.
          # Corresponds to the JSON property `errors`
          # @return [Array<Google::Apis::ComputeV1::ManagedInstanceLastAttempt::Errors::Error>]
          attr_accessor :errors
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @errors = args[:errors] if args.key?(:errors)
          end
          
          # 
          class Error
            include Google::Apis::Core::Hashable
          
            # [Output Only] The error type identifier for this error.
            # Corresponds to the JSON property `code`
            # @return [String]
            attr_accessor :code
          
            # [Output Only] An optional list of messages that contain the error
            # details. There is a set of defined message types to use for providing
            # details.The syntax depends on the error code. For example,
            # QuotaExceededInfo will have details when the error code is
            # QUOTA_EXCEEDED.
            # Corresponds to the JSON property `errorDetails`
            # @return [Array<Google::Apis::ComputeV1::ManagedInstanceLastAttempt::Errors::Error::ErrorDetail>]
            attr_accessor :error_details
          
            # [Output Only] Indicates the field in the request that caused the error.
            # This property is optional.
            # Corresponds to the JSON property `location`
            # @return [String]
            attr_accessor :location
          
            # [Output Only] An optional, human-readable error message.
            # 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)
              @error_details = args[:error_details] if args.key?(:error_details)
              @location = args[:location] if args.key?(:location)
              @message = args[:message] if args.key?(:message)
            end
            
            # 
            class ErrorDetail
              include Google::Apis::Core::Hashable
            
              # Describes the cause of the error with structured details.
              # Example of an error when contacting the "pubsub.googleapis.com" API when it
              # is not enabled:
              # ` "reason": "API_DISABLED"
              # "domain": "googleapis.com"
              # "metadata": `
              # "resource": "projects/123",
              # "service": "pubsub.googleapis.com"
              # `
              # `
              # This response indicates that the pubsub.googleapis.com API is not enabled.
              # Example of an error that is returned when attempting to create a Spanner
              # instance in a region that is out of stock:
              # ` "reason": "STOCKOUT"
              # "domain": "spanner.googleapis.com",
              # "metadata": `
              # "availableRegions": "us-central1,us-east2"
              # `
              # `
              # Corresponds to the JSON property `errorInfo`
              # @return [Google::Apis::ComputeV1::ErrorInfo]
              attr_accessor :error_info
            
              # Provides links to documentation or for performing an out of band action.
              # For example, if a quota check failed with an error indicating the calling
              # project hasn't enabled the accessed service, this can contain a URL pointing
              # directly to the right place in the developer console to flip the bit.
              # Corresponds to the JSON property `help`
              # @return [Google::Apis::ComputeV1::Help]
              attr_accessor :help
            
              # Provides a localized error message that is safe to return to the user
              # which can be attached to an RPC error.
              # Corresponds to the JSON property `localizedMessage`
              # @return [Google::Apis::ComputeV1::LocalizedMessage]
              attr_accessor :localized_message
            
              # Additional details for quota exceeded error for resource quota.
              # Corresponds to the JSON property `quotaInfo`
              # @return [Google::Apis::ComputeV1::QuotaExceededInfo]
              attr_accessor :quota_info
            
              def initialize(**args)
                 update!(**args)
              end
            
              # Update properties of this object
              def update!(**args)
                @error_info = args[:error_info] if args.key?(:error_info)
                @help = args[:help] if args.key?(:help)
                @localized_message = args[:localized_message] if args.key?(:localized_message)
                @quota_info = args[:quota_info] if args.key?(:quota_info)
              end
            end
          end
        end
      end
      
      # 
      class ManagedInstancePropertiesFromFlexibilityPolicy
        include Google::Apis::Core::Hashable
      
        # Output only. The machine type to be used for this instance.
        # Corresponds to the JSON property `machineType`
        # @return [String]
        attr_accessor :machine_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @machine_type = args[:machine_type] if args.key?(:machine_type)
        end
      end
      
      # 
      class ManagedInstanceVersion
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The intended template of the instance. This field
        # is empty
        # when current_action is one of ` DELETING, ABANDONING `.
        # Corresponds to the JSON property `instanceTemplate`
        # @return [String]
        attr_accessor :instance_template
      
        # Output only. [Output Only] Name of the version.
        # 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)
          @instance_template = args[:instance_template] if args.key?(:instance_template)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # A metadata key/value entry.
      class Metadata
        include Google::Apis::Core::Hashable
      
        # Specifies a fingerprint for this request, which is essentially a hash of
        # the metadata's contents and used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update metadata. You must always provide an
        # up-to-date fingerprint hash in order to update or change metadata,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve the resource.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Array of key/value pairs. The total size of all keys and values must be
        # less than 512 KB.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Metadata::Item>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of the resource. Always compute#metadata
        # for metadata.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
        end
        
        # Metadata
        class Item
          include Google::Apis::Core::Hashable
        
          # Key for the metadata entry. Keys must conform to the following
          # regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length.
          # This is reflected as part of a URL in the metadata server. Additionally, to
          # avoid ambiguity, keys must not conflict with any other metadata keys
          # for the project.
          # Corresponds to the JSON property `key`
          # @return [String]
          attr_accessor :key
        
          # Value for the metadata entry. These are free-form strings, and only
          # have meaning as interpreted by the image running in the instance. The
          # only restriction placed on values is that their size must be less than
          # or equal to 262144 bytes (256 KiB).
          # Corresponds to the JSON property `value`
          # @return [String]
          attr_accessor :value
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @key = args[:key] if args.key?(:key)
            @value = args[:value] if args.key?(:value)
          end
        end
      end
      
      # Opaque filter criteria used by load balancers to restrict routing
      # configuration to a limited set of load balancing proxies. Proxies and
      # sidecars involved in load balancing would typically present metadata to the
      # load balancers that need to match criteria specified here. If a match takes
      # place, the relevant configuration is made available to those
      # proxies.
      # For each metadataFilter in this list, if itsfilterMatchCriteria is set to
      # MATCH_ANY, at least
      # one of thefilterLabels must match the corresponding label provided in
      # the metadata. If its filterMatchCriteria is set to
      # MATCH_ALL, then all of its filterLabels must match with
      # corresponding labels provided in the metadata.
      # An example for using metadataFilters would be: if
      # load balancing involves
      # Envoys, they receive routing configuration when values inmetadataFilters match
      # values supplied in  of their XDS requests to loadbalancers.
      class MetadataFilter
        include Google::Apis::Core::Hashable
      
        # The list of label value pairs that must match labels in the provided
        # metadata based on filterMatchCriteria
        # This list must not be empty and can have at the most 64 entries.
        # Corresponds to the JSON property `filterLabels`
        # @return [Array<Google::Apis::ComputeV1::MetadataFilterLabelMatch>]
        attr_accessor :filter_labels
      
        # Specifies how individual filter label matches
        # within the list of filterLabels and contributes toward the
        # overall metadataFilter match.
        # Supported values are:
        # 
        # - MATCH_ANY: at least one of the filterLabels
        # must have a matching label in the provided metadata.
        # - MATCH_ALL: all filterLabels must have
        # matching labels in the provided metadata.
        # Corresponds to the JSON property `filterMatchCriteria`
        # @return [String]
        attr_accessor :filter_match_criteria
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @filter_labels = args[:filter_labels] if args.key?(:filter_labels)
          @filter_match_criteria = args[:filter_match_criteria] if args.key?(:filter_match_criteria)
        end
      end
      
      # MetadataFilter label name value pairs that are expected
      # to match corresponding labels presented as metadata to the load balancer.
      class MetadataFilterLabelMatch
        include Google::Apis::Core::Hashable
      
        # Name of metadata label.
        # The name can have a maximum length of 1024 characters and must be at
        # least 1 character long.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The value of the label must match the specified value.
        # value can have a maximum length of 1024 characters.
        # Corresponds to the JSON property `value`
        # @return [String]
        attr_accessor :value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @value = args[:value] if args.key?(:value)
        end
      end
      
      # The named port. For example: <"http", 80>.
      class NamedPort
        include Google::Apis::Core::Hashable
      
        # The name for this named port.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The port number, which can be a value between 1 and 65535.
        # Corresponds to the JSON property `port`
        # @return [Fixnum]
        attr_accessor :port
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @port = args[:port] if args.key?(:port)
        end
      end
      
      # Contains NAT IP information of a NAT config (i.e. usage status, mode).
      class NatIpInfo
        include Google::Apis::Core::Hashable
      
        # Output only. A list of all NAT IPs assigned to this NAT config.
        # Corresponds to the JSON property `natIpInfoMappings`
        # @return [Array<Google::Apis::ComputeV1::NatIpInfoNatIpInfoMapping>]
        attr_accessor :nat_ip_info_mappings
      
        # Output only. Name of the NAT config which the NAT IP belongs to.
        # Corresponds to the JSON property `natName`
        # @return [String]
        attr_accessor :nat_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @nat_ip_info_mappings = args[:nat_ip_info_mappings] if args.key?(:nat_ip_info_mappings)
          @nat_name = args[:nat_name] if args.key?(:nat_name)
        end
      end
      
      # Contains information of a NAT IP.
      class NatIpInfoNatIpInfoMapping
        include Google::Apis::Core::Hashable
      
        # Output only. Specifies whether NAT IP is auto or manual.
        # Corresponds to the JSON property `mode`
        # @return [String]
        attr_accessor :mode
      
        # Output only. NAT IP address. For example: 203.0.113.11.
        # Corresponds to the JSON property `natIp`
        # @return [String]
        attr_accessor :nat_ip
      
        # Output only. Specifies whether NAT IP is currently serving at least one
        # endpoint or
        # not.
        # Corresponds to the JSON property `usage`
        # @return [String]
        attr_accessor :usage
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @mode = args[:mode] if args.key?(:mode)
          @nat_ip = args[:nat_ip] if args.key?(:nat_ip)
          @usage = args[:usage] if args.key?(:usage)
        end
      end
      
      # 
      class NatIpInfoResponse
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of NAT IP information.
        # Corresponds to the JSON property `result`
        # @return [Array<Google::Apis::ComputeV1::NatIpInfo>]
        attr_accessor :result
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @result = args[:result] if args.key?(:result)
        end
      end
      
      # Represents a VPC Network resource.
      # Networks connect resources to each other and to the internet. For more
      # information, readVirtual Private Cloud (VPC) Network.
      class Network
        include Google::Apis::Core::Hashable
      
        # Deprecated in favor of subnet mode networks.
        # The range of internal addresses that are legal on this network. This
        # range is aCIDR specification, for example:192.168.0.0/16. Provided by the
        # client when the network is
        # created.
        # Corresponds to the JSON property `IPv4Range`
        # @return [String]
        attr_accessor :i_pv4_range
      
        # Must be set to create a VPC network. If not set, a legacy network is
        # created.
        # When set to true, the VPC network is created in auto mode.
        # When set to false, the VPC network is created in custom mode.
        # An auto mode VPC network starts with one subnet per region. Each subnet
        # has a predetermined range as described inAuto mode VPC network IP ranges.
        # For custom mode VPC networks, you can add subnets using the subnetworksinsert
        # method.
        # Corresponds to the JSON property `autoCreateSubnetworks`
        # @return [Boolean]
        attr_accessor :auto_create_subnetworks
        alias_method :auto_create_subnetworks?, :auto_create_subnetworks
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this field when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Enable ULA internal ipv6 on this network. Enabling this feature will assign
        # a /48 from google defined ULA prefix fd20::/20.
        # .
        # Corresponds to the JSON property `enableUlaInternalIpv6`
        # @return [Boolean]
        attr_accessor :enable_ula_internal_ipv6
        alias_method :enable_ula_internal_ipv6?, :enable_ula_internal_ipv6
      
        # Output only. [Output Only] URL of the firewall policy the network is
        # associated with.
        # Corresponds to the JSON property `firewallPolicy`
        # @return [String]
        attr_accessor :firewall_policy
      
        # [Output Only] The gateway address for default routing out of the network,
        # selected by Google Cloud.
        # Corresponds to the JSON property `gatewayIPv4`
        # @return [String]
        attr_accessor :gateway_i_pv4
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # When enabling ula internal ipv6, caller optionally can specify the /48
        # range they want from the google defined ULA prefix fd20::/20. The input
        # must be a valid /48 ULA IPv6 address and must be within the fd20::/20.
        # Operation will fail if the speficied /48 is already in used by another
        # resource. If the field is not speficied, then a /48 range will be randomly
        # allocated from fd20::/20 and returned via this field.
        # .
        # Corresponds to the JSON property `internalIpv6Range`
        # @return [String]
        attr_accessor :internal_ipv6_range
      
        # Output only. [Output Only] Type of the resource. Always compute#network for
        # networks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Maximum Transmission Unit in bytes.
        # The minimum value for this field is 1300 and the maximum value is 8896.
        # The suggested value is 1500, which is the default MTU used on the
        # Internet, or 8896 if you want to use Jumbo frames. If unspecified, the
        # value defaults to 1460.
        # Corresponds to the JSON property `mtu`
        # @return [Fixnum]
        attr_accessor :mtu
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?`. The first character must be a
        # lowercase letter, and all following characters (except for the last
        # character) must be a dash, lowercase letter, or digit. The last character
        # must be a lowercase letter or digit.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The network firewall policy enforcement order. Can be either
        # AFTER_CLASSIC_FIREWALL or BEFORE_CLASSIC_FIREWALL. Defaults to
        # AFTER_CLASSIC_FIREWALL if the field is not specified.
        # Corresponds to the JSON property `networkFirewallPolicyEnforcementOrder`
        # @return [String]
        attr_accessor :network_firewall_policy_enforcement_order
      
        # A full or partial URL of the network profile to apply to this network.
        # This field can be set only at resource creation time. For example, the
        # following are valid URLs:
        # 
        # - https://www.googleapis.com/compute/`api_version`/projects/`project_id`/
        # global/networkProfiles/`network_profile_name`
        # - projects/`project_id`/global/networkProfiles/`network_profile_name`
        # Corresponds to the JSON property `networkProfile`
        # @return [String]
        attr_accessor :network_profile
      
        # Additional network parameters.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::NetworkParams]
        attr_accessor :params
      
        # Output only. [Output Only] A list of network peerings for the resource.
        # Corresponds to the JSON property `peerings`
        # @return [Array<Google::Apis::ComputeV1::NetworkPeering>]
        attr_accessor :peerings
      
        # A routing configuration attached to a network resource. The message
        # includes the list of routers associated with the network, and a flag
        # indicating the type of routing behavior to enforce network-wide.
        # Corresponds to the JSON property `routingConfig`
        # @return [Google::Apis::ComputeV1::NetworkRoutingConfig]
        attr_accessor :routing_config
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource with the
        # resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # [Output Only] Server-defined fully-qualified URLs for all subnetworks
        # in this VPC network.
        # Corresponds to the JSON property `subnetworks`
        # @return [Array<String>]
        attr_accessor :subnetworks
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @i_pv4_range = args[:i_pv4_range] if args.key?(:i_pv4_range)
          @auto_create_subnetworks = args[:auto_create_subnetworks] if args.key?(:auto_create_subnetworks)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @enable_ula_internal_ipv6 = args[:enable_ula_internal_ipv6] if args.key?(:enable_ula_internal_ipv6)
          @firewall_policy = args[:firewall_policy] if args.key?(:firewall_policy)
          @gateway_i_pv4 = args[:gateway_i_pv4] if args.key?(:gateway_i_pv4)
          @id = args[:id] if args.key?(:id)
          @internal_ipv6_range = args[:internal_ipv6_range] if args.key?(:internal_ipv6_range)
          @kind = args[:kind] if args.key?(:kind)
          @mtu = args[:mtu] if args.key?(:mtu)
          @name = args[:name] if args.key?(:name)
          @network_firewall_policy_enforcement_order = args[:network_firewall_policy_enforcement_order] if args.key?(:network_firewall_policy_enforcement_order)
          @network_profile = args[:network_profile] if args.key?(:network_profile)
          @params = args[:params] if args.key?(:params)
          @peerings = args[:peerings] if args.key?(:peerings)
          @routing_config = args[:routing_config] if args.key?(:routing_config)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @subnetworks = args[:subnetworks] if args.key?(:subnetworks)
        end
      end
      
      # NetworkAttachments
      # A network attachment resource ...
      class NetworkAttachment
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] An array of connections for all the producers
        # connected
        # to this network attachment.
        # Corresponds to the JSON property `connectionEndpoints`
        # @return [Array<Google::Apis::ComputeV1::NetworkAttachmentConnectedEndpoint>]
        attr_accessor :connection_endpoints
      
        # 
        # Corresponds to the JSON property `connectionPreference`
        # @return [String]
        attr_accessor :connection_preference
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Fingerprint of this resource. A hash of the contents stored
        # in this object. This field is used in optimistic locking. An up-to-date
        # fingerprint must be provided in order to patch.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Output only. [Output Only] The unique identifier for the resource type. The
        # server
        # generates this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The URL of the network which the Network Attachment
        # belongs to. Practically it is inferred by fetching the network of the first
        # subnetwork associated. Because it is required that all the subnetworks must
        # be from the same network, it is assured that the Network Attachment belongs
        # to the same network as all the subnetworks.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # Projects that are allowed to connect to this network attachment.
        # The project can be specified using its id or number.
        # Corresponds to the JSON property `producerAcceptLists`
        # @return [Array<String>]
        attr_accessor :producer_accept_lists
      
        # Projects that are not allowed to connect to this network attachment.
        # The project can be specified using its id or number.
        # Corresponds to the JSON property `producerRejectLists`
        # @return [Array<String>]
        attr_accessor :producer_reject_lists
      
        # Output only. [Output Only] URL of the region where the network attachment
        # resides.
        # This field applies only to the region resource. You must specify this
        # field as part of the HTTP request URL. It is not settable as a field in
        # the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource's resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # An array of URLs where each entry is the URL of a subnet
        # provided by the service consumer to use for
        # endpoints in the producers that connect to this network attachment.
        # Corresponds to the JSON property `subnetworks`
        # @return [Array<String>]
        attr_accessor :subnetworks
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @connection_endpoints = args[:connection_endpoints] if args.key?(:connection_endpoints)
          @connection_preference = args[:connection_preference] if args.key?(:connection_preference)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @producer_accept_lists = args[:producer_accept_lists] if args.key?(:producer_accept_lists)
          @producer_reject_lists = args[:producer_reject_lists] if args.key?(:producer_reject_lists)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @subnetworks = args[:subnetworks] if args.key?(:subnetworks)
        end
      end
      
      # Contains a list of NetworkAttachmentsScopedList.
      class NetworkAttachmentAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NetworkAttachmentsScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::NetworkAttachmentsScopedList>]
        attr_accessor :items
      
        # 
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NetworkAttachmentAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NetworkAttachmentAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # [Output Only] A connection connected to this network attachment.
      class NetworkAttachmentConnectedEndpoint
        include Google::Apis::Core::Hashable
      
        # The IPv4 address assigned to the producer instance network interface.
        # This value will be a range in case of Serverless.
        # Corresponds to the JSON property `ipAddress`
        # @return [String]
        attr_accessor :ip_address
      
        # The IPv6 address assigned to the producer instance network interface.
        # This is only assigned when the stack types of both the instance network
        # interface and the consumer subnet are IPv4_IPv6.
        # Corresponds to the JSON property `ipv6Address`
        # @return [String]
        attr_accessor :ipv6_address
      
        # The project id or number of the interface to which the IP was assigned.
        # Corresponds to the JSON property `projectIdOrNum`
        # @return [String]
        attr_accessor :project_id_or_num
      
        # Alias IP ranges from the same subnetwork.
        # Corresponds to the JSON property `secondaryIpCidrRanges`
        # @return [Array<String>]
        attr_accessor :secondary_ip_cidr_ranges
      
        # The status of a connected endpoint to this network attachment.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # The subnetwork used to assign the IP to the producer
        # instance network interface.
        # Corresponds to the JSON property `subnetwork`
        # @return [String]
        attr_accessor :subnetwork
      
        # Output only. [Output Only] The CIDR range of the subnet from which the IPv4
        # internal
        # IP was allocated from.
        # Corresponds to the JSON property `subnetworkCidrRange`
        # @return [String]
        attr_accessor :subnetwork_cidr_range
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ip_address = args[:ip_address] if args.key?(:ip_address)
          @ipv6_address = args[:ipv6_address] if args.key?(:ipv6_address)
          @project_id_or_num = args[:project_id_or_num] if args.key?(:project_id_or_num)
          @secondary_ip_cidr_ranges = args[:secondary_ip_cidr_ranges] if args.key?(:secondary_ip_cidr_ranges)
          @status = args[:status] if args.key?(:status)
          @subnetwork = args[:subnetwork] if args.key?(:subnetwork)
          @subnetwork_cidr_range = args[:subnetwork_cidr_range] if args.key?(:subnetwork_cidr_range)
        end
      end
      
      # 
      class NetworkAttachmentList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NetworkAttachment resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::NetworkAttachment>]
        attr_accessor :items
      
        # 
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NetworkAttachmentList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NetworkAttachmentList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class NetworkAttachmentsScopedList
        include Google::Apis::Core::Hashable
      
        # A list of NetworkAttachments contained in this scope.
        # Corresponds to the JSON property `networkAttachments`
        # @return [Array<Google::Apis::ComputeV1::NetworkAttachment>]
        attr_accessor :network_attachments
      
        # Informational warning which replaces the list of
        # network attachments when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NetworkAttachmentsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @network_attachments = args[:network_attachments] if args.key?(:network_attachments)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of
        # network attachments when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NetworkAttachmentsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a Google Cloud Armor network edge security service resource.
      class NetworkEdgeSecurityService
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Fingerprint of this resource. A hash of the contents stored in this object.
        # This field is used in optimistic locking. This field will be ignored when
        # inserting a NetworkEdgeSecurityService. An up-to-date fingerprint must be
        # provided in order to update the NetworkEdgeSecurityService,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a NetworkEdgeSecurityService.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output only] Type of the resource. Alwayscompute#
        # networkEdgeSecurityService for
        # NetworkEdgeSecurityServices
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] URL of the region where the resource resides. You
        # must
        # specify this field as part of the HTTP request URL. It is not settable as a
        # field in the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # The resource URL for the network edge security service associated with this
        # network edge security service.
        # Corresponds to the JSON property `securityPolicy`
        # @return [String]
        attr_accessor :security_policy
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource with the
        # resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @region = args[:region] if args.key?(:region)
          @security_policy = args[:security_policy] if args.key?(:security_policy)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
        end
      end
      
      # 
      class NetworkEdgeSecurityServiceAggregatedList
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NetworkEdgeSecurityServicesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::NetworkEdgeSecurityServicesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # networkEdgeSecurityServiceAggregatedList for lists of
        # Network Edge Security Services.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NetworkEdgeSecurityServiceAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NetworkEdgeSecurityServiceAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class NetworkEdgeSecurityServicesScopedList
        include Google::Apis::Core::Hashable
      
        # A list of NetworkEdgeSecurityServices contained in this scope.
        # Corresponds to the JSON property `networkEdgeSecurityServices`
        # @return [Array<Google::Apis::ComputeV1::NetworkEdgeSecurityService>]
        attr_accessor :network_edge_security_services
      
        # Informational warning which replaces the list of
        # security policies when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NetworkEdgeSecurityServicesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @network_edge_security_services = args[:network_edge_security_services] if args.key?(:network_edge_security_services)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of
        # security policies when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NetworkEdgeSecurityServicesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # The network endpoint.
      class NetworkEndpoint
        include Google::Apis::Core::Hashable
      
        # Optional metadata defined as annotations on the network endpoint.
        # Corresponds to the JSON property `annotations`
        # @return [Hash<String,String>]
        attr_accessor :annotations
      
        # Represents the port number to which PSC consumer sends packets.
        # Optional. Only valid for network endpoint groups created withGCE_VM_IP_PORTMAP
        # endpoint type.
        # Corresponds to the JSON property `clientDestinationPort`
        # @return [Fixnum]
        attr_accessor :client_destination_port
      
        # Optional fully qualified domain name of network endpoint. This can only be
        # specified when NetworkEndpointGroup.network_endpoint_type isNON_GCP_FQDN_PORT.
        # Corresponds to the JSON property `fqdn`
        # @return [String]
        attr_accessor :fqdn
      
        # The name or a URL of VM instance of this network endpoint.
        # Optional, the field presence depends on the network endpoint type. The
        # field is required for network endpoints of type GCE_VM_IP andGCE_VM_IP_PORT.
        # The instance must be in the same zone of network endpoint group (for zonal
        # NEGs) or in the zone within the region of the NEG (for regional NEGs).
        # If the ipAddress is specified, it must belongs to the VM
        # instance.
        # The name must be 1-63 characters long, and comply withRFC1035
        # or be a valid URL pointing to an existing instance.
        # Corresponds to the JSON property `instance`
        # @return [String]
        attr_accessor :instance
      
        # Optional IPv4 address of network endpoint. The IP address must belong to a
        # VM in Compute Engine (either the primary IP or as part of an aliased IP
        # range). If the IP address is not specified, then the primary IP address for
        # the VM instance in the network that the network endpoint group belongs to
        # will be used.
        # This field is redundant and need not be set for network endpoints of
        # typeGCE_VM_IP. If set, it must be set to the primary internal IP
        # address of the attached VM instance that matches the subnetwork of the NEG.
        # The primary internal IP address from any NIC of a multi-NIC VM instance can
        # be added to a NEG as long as it matches the NEG subnetwork.
        # Corresponds to the JSON property `ipAddress`
        # @return [String]
        attr_accessor :ip_address
      
        # Optional IPv6 address of network endpoint.
        # Corresponds to the JSON property `ipv6Address`
        # @return [String]
        attr_accessor :ipv6_address
      
        # Optional port number of network endpoint. If not specified, the
        # defaultPort for the network endpoint group will be used.
        # This field can not be set for network endpoints of typeGCE_VM_IP.
        # Corresponds to the JSON property `port`
        # @return [Fixnum]
        attr_accessor :port
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @annotations = args[:annotations] if args.key?(:annotations)
          @client_destination_port = args[:client_destination_port] if args.key?(:client_destination_port)
          @fqdn = args[:fqdn] if args.key?(:fqdn)
          @instance = args[:instance] if args.key?(:instance)
          @ip_address = args[:ip_address] if args.key?(:ip_address)
          @ipv6_address = args[:ipv6_address] if args.key?(:ipv6_address)
          @port = args[:port] if args.key?(:port)
        end
      end
      
      # Represents a collection of network endpoints.
      # A network endpoint group (NEG) defines how a set of endpoints should be
      # reached, whether they are reachable, and where they are located.
      # For more information about using NEGs for different use cases, seeNetwork
      # endpoint groups overview.
      class NetworkEndpointGroup
        include Google::Apis::Core::Hashable
      
        # Optional. Metadata defined as annotations on the network endpoint group.
        # Corresponds to the JSON property `annotations`
        # @return [Hash<String,String>]
        attr_accessor :annotations
      
        # Configuration for an App Engine network endpoint group (NEG).
        # The service is optional, may be provided explicitly or in the
        # URL mask. The version is optional and can only be provided
        # explicitly or in the URL mask when service is present.
        # Note: App Engine service must be in the same project and located in the
        # same region as the Serverless NEG.
        # Corresponds to the JSON property `appEngine`
        # @return [Google::Apis::ComputeV1::NetworkEndpointGroupAppEngine]
        attr_accessor :app_engine
      
        # Configuration for a Cloud Function network endpoint group (NEG).
        # The function must be provided explicitly or in the URL mask.
        # Note: Cloud Function must be in the same project and located in the same
        # region as the Serverless NEG.
        # Corresponds to the JSON property `cloudFunction`
        # @return [Google::Apis::ComputeV1::NetworkEndpointGroupCloudFunction]
        attr_accessor :cloud_function
      
        # Configuration for a Cloud Run network endpoint group (NEG).
        # The service must be provided explicitly or in the URL mask.
        # The tag is optional, may be provided explicitly or in the URL
        # mask.
        # Note: Cloud Run service must be in the same project and located in the same
        # region as the Serverless NEG.
        # Corresponds to the JSON property `cloudRun`
        # @return [Google::Apis::ComputeV1::NetworkEndpointGroupCloudRun]
        attr_accessor :cloud_run
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # The default port used if the port number is not specified in the network
        # endpoint.
        # Optional. If the network endpoint type is either GCE_VM_IP,SERVERLESS or
        # PRIVATE_SERVICE_CONNECT, this
        # field must not be specified.
        # Corresponds to the JSON property `defaultPort`
        # @return [Fixnum]
        attr_accessor :default_port
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # networkEndpointGroup for network endpoint group.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource; provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The URL of the network to which all network endpoints in the NEG belong.
        # Uses default project network if unspecified.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # Type of network endpoints in this network endpoint group. Can be one
        # ofGCE_VM_IP, GCE_VM_IP_PORT,NON_GCP_PRIVATE_IP_PORT, INTERNET_FQDN_PORT,
        # INTERNET_IP_PORT, SERVERLESS,PRIVATE_SERVICE_CONNECT, GCE_VM_IP_PORTMAP.
        # Corresponds to the JSON property `networkEndpointType`
        # @return [String]
        attr_accessor :network_endpoint_type
      
        # All data that is specifically relevant to only network endpoint groups of
        # type PRIVATE_SERVICE_CONNECT.
        # Corresponds to the JSON property `pscData`
        # @return [Google::Apis::ComputeV1::NetworkEndpointGroupPscData]
        attr_accessor :psc_data
      
        # The target service url used to set up private service connection to
        # a Google API or a PSC Producer Service Attachment.
        # An example value is: asia-northeast3-cloudkms.googleapis.com.
        # Optional. Only valid when networkEndpointType isPRIVATE_SERVICE_CONNECT.
        # Corresponds to the JSON property `pscTargetService`
        # @return [String]
        attr_accessor :psc_target_service
      
        # Output only. [Output Only] The URL of theregion
        # where the network endpoint group is located.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output only] Number of network endpoints in the network endpoint
        # group.
        # Corresponds to the JSON property `size`
        # @return [Fixnum]
        attr_accessor :size
      
        # Optional URL of the subnetwork to which all network endpoints in the NEG
        # belong.
        # Corresponds to the JSON property `subnetwork`
        # @return [String]
        attr_accessor :subnetwork
      
        # Output only. [Output Only] The URL of thezone
        # where the network endpoint group is located.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @annotations = args[:annotations] if args.key?(:annotations)
          @app_engine = args[:app_engine] if args.key?(:app_engine)
          @cloud_function = args[:cloud_function] if args.key?(:cloud_function)
          @cloud_run = args[:cloud_run] if args.key?(:cloud_run)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @default_port = args[:default_port] if args.key?(:default_port)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @network_endpoint_type = args[:network_endpoint_type] if args.key?(:network_endpoint_type)
          @psc_data = args[:psc_data] if args.key?(:psc_data)
          @psc_target_service = args[:psc_target_service] if args.key?(:psc_target_service)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @size = args[:size] if args.key?(:size)
          @subnetwork = args[:subnetwork] if args.key?(:subnetwork)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class NetworkEndpointGroupAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NetworkEndpointGroupsScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::NetworkEndpointGroupsScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # networkEndpointGroupAggregatedList for aggregated
        # lists of network endpoint groups.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NetworkEndpointGroupAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NetworkEndpointGroupAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Configuration for an App Engine network endpoint group (NEG).
      # The service is optional, may be provided explicitly or in the
      # URL mask. The version is optional and can only be provided
      # explicitly or in the URL mask when service is present.
      # Note: App Engine service must be in the same project and located in the
      # same region as the Serverless NEG.
      class NetworkEndpointGroupAppEngine
        include Google::Apis::Core::Hashable
      
        # Optional serving service.
        # The service name is case-sensitive and must be 1-63
        # characters long.
        # Example value: default, my-service.
        # Corresponds to the JSON property `service`
        # @return [String]
        attr_accessor :service
      
        # An URL
        # mask is one of the main components of the Cloud Function.
        # A template to parse service and version fields
        # from a request URL. URL mask allows for routing to multiple App Engine
        # services without having to create multiple Network Endpoint Groups and
        # backend services.
        # For example, the request URLsfoo1-dot-appname.appspot.com/v1 andfoo1-dot-
        # appname.appspot.com/v2 can be backed by the same
        # Serverless NEG with URL mask<service>-dot-appname.appspot.com/<version>.
        # The URL mask will parse them to ` service = "foo1", version = "v1"
        # ` and ` service = "foo1", version = "v2" `
        # respectively.
        # Corresponds to the JSON property `urlMask`
        # @return [String]
        attr_accessor :url_mask
      
        # Optional serving version.
        # The version name is case-sensitive and must be 1-100
        # characters long.
        # Example value: v1, v2.
        # 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)
          @service = args[:service] if args.key?(:service)
          @url_mask = args[:url_mask] if args.key?(:url_mask)
          @version = args[:version] if args.key?(:version)
        end
      end
      
      # Configuration for a Cloud Function network endpoint group (NEG).
      # The function must be provided explicitly or in the URL mask.
      # Note: Cloud Function must be in the same project and located in the same
      # region as the Serverless NEG.
      class NetworkEndpointGroupCloudFunction
        include Google::Apis::Core::Hashable
      
        # A user-defined name of the Cloud Function.
        # The function name is case-sensitive and must be 1-63
        # characters long.
        # Example value: func1.
        # Corresponds to the JSON property `function`
        # @return [String]
        attr_accessor :function
      
        # An URL
        # mask is one of the main components of the Cloud Function.
        # A template to parse function field from a request URL. URL
        # mask allows for routing to multiple Cloud Functions without having to
        # create multiple Network Endpoint Groups and backend services.
        # For example, request URLs mydomain.com/function1 andmydomain.com/function2 can
        # be backed by the same
        # Serverless NEG with URL mask /<function>. The URL
        # mask will parse them to ` function = "function1" ` and` function = "function2"
        # ` respectively.
        # Corresponds to the JSON property `urlMask`
        # @return [String]
        attr_accessor :url_mask
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @function = args[:function] if args.key?(:function)
          @url_mask = args[:url_mask] if args.key?(:url_mask)
        end
      end
      
      # Configuration for a Cloud Run network endpoint group (NEG).
      # The service must be provided explicitly or in the URL mask.
      # The tag is optional, may be provided explicitly or in the URL
      # mask.
      # Note: Cloud Run service must be in the same project and located in the same
      # region as the Serverless NEG.
      class NetworkEndpointGroupCloudRun
        include Google::Apis::Core::Hashable
      
        # Cloud Run service is the main resource of Cloud Run.
        # The service must be 1-63 characters long, and comply withRFC1035.
        # Example value: "run-service".
        # Corresponds to the JSON property `service`
        # @return [String]
        attr_accessor :service
      
        # Optional Cloud Run tag represents the "named-revision" to provide additional
        # fine-grained traffic routing information.
        # The tag must be 1-63 characters long, and comply withRFC1035.
        # Example value: "revision-0010".
        # Corresponds to the JSON property `tag`
        # @return [String]
        attr_accessor :tag
      
        # An URL
        # mask is one of the main components of the Cloud Function.
        # A template to parse <service> and<tag> fields from a request URL. URL mask
        # allows for
        # routing to multiple Run services without having to create multiple
        # network endpoint groups and backend services.
        # For example, request URLs foo1.domain.com/bar1 andfoo1.domain.com/bar2 can be
        # backed by the same Serverless
        # Network Endpoint Group (NEG) with URL mask<tag>.domain.com/<service>. The URL
        # mask will
        # parse them to ` service="bar1", tag="foo1" ` and `
        # service="bar2", tag="foo2" ` respectively.
        # Corresponds to the JSON property `urlMask`
        # @return [String]
        attr_accessor :url_mask
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @service = args[:service] if args.key?(:service)
          @tag = args[:tag] if args.key?(:tag)
          @url_mask = args[:url_mask] if args.key?(:url_mask)
        end
      end
      
      # 
      class NetworkEndpointGroupList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NetworkEndpointGroup resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::NetworkEndpointGroup>]
        attr_accessor :items
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # networkEndpointGroupList for network endpoint group
        # lists.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NetworkEndpointGroupList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NetworkEndpointGroupList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # All data that is specifically relevant to only network endpoint groups of
      # type PRIVATE_SERVICE_CONNECT.
      class NetworkEndpointGroupPscData
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Address allocated from given subnetwork for PSC.
        # This IP
        # address acts as a VIP for a PSC NEG, allowing it to act as an endpoint in
        # L7 PSC-XLB.
        # Corresponds to the JSON property `consumerPscAddress`
        # @return [String]
        attr_accessor :consumer_psc_address
      
        # The psc producer port is used to connect PSC NEG with specific port on
        # the PSC Producer side; should only be used for the
        # PRIVATE_SERVICE_CONNECT NEG type
        # Corresponds to the JSON property `producerPort`
        # @return [Fixnum]
        attr_accessor :producer_port
      
        # Output only. [Output Only] The PSC connection id of the PSC Network Endpoint
        # Group
        # Consumer.
        # Corresponds to the JSON property `pscConnectionId`
        # @return [Fixnum]
        attr_accessor :psc_connection_id
      
        # Output only. [Output Only] The connection status of the PSC Forwarding Rule.
        # Corresponds to the JSON property `pscConnectionStatus`
        # @return [String]
        attr_accessor :psc_connection_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @consumer_psc_address = args[:consumer_psc_address] if args.key?(:consumer_psc_address)
          @producer_port = args[:producer_port] if args.key?(:producer_port)
          @psc_connection_id = args[:psc_connection_id] if args.key?(:psc_connection_id)
          @psc_connection_status = args[:psc_connection_status] if args.key?(:psc_connection_status)
        end
      end
      
      # 
      class NetworkEndpointGroupsAttachEndpointsRequest
        include Google::Apis::Core::Hashable
      
        # The list of network endpoints to be attached.
        # Corresponds to the JSON property `networkEndpoints`
        # @return [Array<Google::Apis::ComputeV1::NetworkEndpoint>]
        attr_accessor :network_endpoints
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @network_endpoints = args[:network_endpoints] if args.key?(:network_endpoints)
        end
      end
      
      # 
      class NetworkEndpointGroupsDetachEndpointsRequest
        include Google::Apis::Core::Hashable
      
        # The list of network endpoints to be detached.
        # Corresponds to the JSON property `networkEndpoints`
        # @return [Array<Google::Apis::ComputeV1::NetworkEndpoint>]
        attr_accessor :network_endpoints
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @network_endpoints = args[:network_endpoints] if args.key?(:network_endpoints)
        end
      end
      
      # 
      class NetworkEndpointGroupsListEndpointsRequest
        include Google::Apis::Core::Hashable
      
        # Optional query parameter for showing the health status of each network
        # endpoint. Valid options are SKIP or SHOW. If you
        # don't specify this parameter, the health status of network endpoints will
        # not be provided.
        # Corresponds to the JSON property `healthStatus`
        # @return [String]
        attr_accessor :health_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @health_status = args[:health_status] if args.key?(:health_status)
        end
      end
      
      # 
      class NetworkEndpointGroupsListNetworkEndpoints
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NetworkEndpointWithHealthStatus resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::NetworkEndpointWithHealthStatus>]
        attr_accessor :items
      
        # Output only. [Output Only] The resource type, which is alwayscompute#
        # networkEndpointGroupsListNetworkEndpoints for the list
        # of network endpoints in the specified network endpoint group.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NetworkEndpointGroupsListNetworkEndpoints::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NetworkEndpointGroupsListNetworkEndpoints::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class NetworkEndpointGroupsScopedList
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The list ofnetwork
        # endpoint groups that are contained in this scope.
        # Corresponds to the JSON property `networkEndpointGroups`
        # @return [Array<Google::Apis::ComputeV1::NetworkEndpointGroup>]
        attr_accessor :network_endpoint_groups
      
        # Output only. [Output Only] An informational warning that replaces the list of
        # network
        # endpoint groups when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NetworkEndpointGroupsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @network_endpoint_groups = args[:network_endpoint_groups] if args.key?(:network_endpoint_groups)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] An informational warning that replaces the list of
        # network
        # endpoint groups when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NetworkEndpointGroupsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class NetworkEndpointWithHealthStatus
        include Google::Apis::Core::Hashable
      
        # Output only. [Output only] The health status of network endpoint.
        # Optional. Displayed only if the network endpoint has centralized health
        # checking configured.
        # Corresponds to the JSON property `healths`
        # @return [Array<Google::Apis::ComputeV1::HealthStatusForNetworkEndpoint>]
        attr_accessor :healths
      
        # The network endpoint.
        # Corresponds to the JSON property `networkEndpoint`
        # @return [Google::Apis::ComputeV1::NetworkEndpoint]
        attr_accessor :network_endpoint
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @healths = args[:healths] if args.key?(:healths)
          @network_endpoint = args[:network_endpoint] if args.key?(:network_endpoint)
        end
      end
      
      # 
      class NetworkFirewallPolicyAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of FirewallPoliciesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::FirewallPoliciesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # networkFirewallPoliciesAggregatedList for lists of
        # network firewall policies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NetworkFirewallPolicyAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NetworkFirewallPolicyAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # A network interface resource attached to an instance.
      class NetworkInterface
        include Google::Apis::Core::Hashable
      
        # An array of configurations for this interface. Currently, only one access
        # config, ONE_TO_ONE_NAT, is supported. If there are noaccessConfigs specified,
        # then this instance will have
        # no external internet access.
        # Corresponds to the JSON property `accessConfigs`
        # @return [Array<Google::Apis::ComputeV1::AccessConfig>]
        attr_accessor :access_configs
      
        # An array of alias IP ranges for this network interface.
        # You can only specify this field for network interfaces in VPC networks.
        # Corresponds to the JSON property `aliasIpRanges`
        # @return [Array<Google::Apis::ComputeV1::AliasIpRange>]
        attr_accessor :alias_ip_ranges
      
        # Fingerprint hash of contents stored in this network interface.
        # This field will be ignored when inserting an Instance or
        # adding a NetworkInterface. An up-to-date
        # fingerprint must be provided in order to update theNetworkInterface. The
        # request will fail with error400 Bad Request if the fingerprint is not provided,
        # or412 Precondition Failed if the fingerprint is out of date.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Indicate whether igmp query is enabled on the network interface
        # or not. If enabled, also indicates the version of IGMP supported.
        # Corresponds to the JSON property `igmpQuery`
        # @return [String]
        attr_accessor :igmp_query
      
        # The prefix length of the primary internal IPv6 range.
        # Corresponds to the JSON property `internalIpv6PrefixLength`
        # @return [Fixnum]
        attr_accessor :internal_ipv6_prefix_length
      
        # An array of IPv6 access configurations for this interface. Currently, only
        # one IPv6 access config, DIRECT_IPV6, is supported. If there
        # is no ipv6AccessConfig specified, then this instance will
        # have no external IPv6 Internet access.
        # Corresponds to the JSON property `ipv6AccessConfigs`
        # @return [Array<Google::Apis::ComputeV1::AccessConfig>]
        attr_accessor :ipv6_access_configs
      
        # Output only. [Output Only] One of EXTERNAL, INTERNAL to indicate whether the
        # IP can be
        # accessed from the Internet. This field is always inherited from its
        # subnetwork.
        # Valid only if stackType is IPV4_IPV6.
        # Corresponds to the JSON property `ipv6AccessType`
        # @return [String]
        attr_accessor :ipv6_access_type
      
        # An IPv6 internal network address for this network interface. To
        # use a static internal IP address, it must be unused and in the same region
        # as the instance's zone. If not specified, Google Cloud will automatically
        # assign an internal IPv6 address from the instance's subnetwork.
        # Corresponds to the JSON property `ipv6Address`
        # @return [String]
        attr_accessor :ipv6_address
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # networkInterface for network interfaces.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] The name of the network interface, which is generated by the
        # server. For a VM, the network interface uses the nicN naming
        # format. Where N is a value between 0 and7. The default interface value is nic0.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # URL of the VPC network resource for this instance. When creating an
        # instance, if neither the network nor the subnetwork is specified, the
        # default network global/networks/default is used. If the
        # selected project doesn't have the default network, you must specify a
        # network or subnet. If the network is not specified but the subnetwork is
        # specified, the network is inferred.
        # If you specify this property, you can specify the network as
        # a full or partial URL. For example, the following are all valid URLs:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/global/networks/
        # network
        # - projects/project/global/networks/network
        # - global/networks/default
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # The URL of the network attachment that this interface should connect
        # to in the following format:
        # projects/`project_number`/regions/`region_name`/networkAttachments/`
        # network_attachment_name`.
        # Corresponds to the JSON property `networkAttachment`
        # @return [String]
        attr_accessor :network_attachment
      
        # An IPv4 internal IP address to assign to the instance for this network
        # interface. If not specified by the user, an unused internal IP is
        # assigned by the system.
        # Corresponds to the JSON property `networkIP`
        # @return [String]
        attr_accessor :network_ip
      
        # The type of vNIC to be used on this interface. This may be gVNIC or
        # VirtioNet.
        # Corresponds to the JSON property `nicType`
        # @return [String]
        attr_accessor :nic_type
      
        # Name of the parent network interface of a dynamic network interface.
        # Corresponds to the JSON property `parentNicName`
        # @return [String]
        attr_accessor :parent_nic_name
      
        # The networking queue count that's specified by users for the network
        # interface. Both Rx and Tx queues will be set to this number. It'll be empty
        # if not specified by the users.
        # Corresponds to the JSON property `queueCount`
        # @return [Fixnum]
        attr_accessor :queue_count
      
        # The stack type for this network interface. To assign only IPv4 addresses,
        # use IPV4_ONLY. To assign both IPv4 and IPv6 addresses, useIPV4_IPV6. If not
        # specified, IPV4_ONLY is used.
        # This field can be both set at instance creation and update network
        # interface operations.
        # Corresponds to the JSON property `stackType`
        # @return [String]
        attr_accessor :stack_type
      
        # The URL of the Subnetwork resource for this instance. If the network
        # resource is inlegacy
        # mode, do not specify this field. If the network is in auto subnet
        # mode, specifying the subnetwork is optional. If the network is in custom
        # subnet mode, specifying the subnetwork is required. If you specify this
        # field, you can specify the subnetwork as a full or partial URL. For
        # example, the following are all valid URLs:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/regions/region/
        # subnetworks/subnetwork
        # - regions/region/subnetworks/subnetwork
        # Corresponds to the JSON property `subnetwork`
        # @return [String]
        attr_accessor :subnetwork
      
        # VLAN tag of a dynamic network interface, must be  an integer in the range
        # from 2 to 255 inclusively.
        # Corresponds to the JSON property `vlan`
        # @return [Fixnum]
        attr_accessor :vlan
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @access_configs = args[:access_configs] if args.key?(:access_configs)
          @alias_ip_ranges = args[:alias_ip_ranges] if args.key?(:alias_ip_ranges)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @igmp_query = args[:igmp_query] if args.key?(:igmp_query)
          @internal_ipv6_prefix_length = args[:internal_ipv6_prefix_length] if args.key?(:internal_ipv6_prefix_length)
          @ipv6_access_configs = args[:ipv6_access_configs] if args.key?(:ipv6_access_configs)
          @ipv6_access_type = args[:ipv6_access_type] if args.key?(:ipv6_access_type)
          @ipv6_address = args[:ipv6_address] if args.key?(:ipv6_address)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @network_attachment = args[:network_attachment] if args.key?(:network_attachment)
          @network_ip = args[:network_ip] if args.key?(:network_ip)
          @nic_type = args[:nic_type] if args.key?(:nic_type)
          @parent_nic_name = args[:parent_nic_name] if args.key?(:parent_nic_name)
          @queue_count = args[:queue_count] if args.key?(:queue_count)
          @stack_type = args[:stack_type] if args.key?(:stack_type)
          @subnetwork = args[:subnetwork] if args.key?(:subnetwork)
          @vlan = args[:vlan] if args.key?(:vlan)
        end
      end
      
      # Contains a list of networks.
      class NetworkList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Network resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Network>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#networkList for
        # lists of networks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NetworkList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NetworkList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Additional network parameters.
      class NetworkParams
        include Google::Apis::Core::Hashable
      
        # Tag keys/values directly bound to this resource.
        # Tag keys and values have the same definition as resource
        # manager tags. The field is allowed for INSERT
        # only. The keys/values to set on the resource should be specified in
        # either ID ` : ` or Namespaced format
        # ` : `.
        # For example the following are valid inputs:
        # * `"tagKeys/333" : "tagValues/444", "tagKeys/123" : "tagValues/456"`
        # * `"123/environment" : "production", "345/abc" : "xyz"`
        # Note:
        # * Invalid combinations of ID & namespaced format is not supported. For
        # instance: `"123/environment" : "tagValues/444"` is invalid.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # A network peering attached to a network resource. The message includes the
      # peering name, peer network, peering state, and a flag indicating whether
      # Google Compute Engine should automatically create routes for the peering.
      class NetworkPeering
        include Google::Apis::Core::Hashable
      
        # This field will be deprecated soon. Use theexchange_subnet_routes field
        # instead.
        # Indicates whether full mesh connectivity is created and managed
        # automatically between peered networks. Currently this field should always
        # be true since Google Compute Engine will automatically create and manage
        # subnetwork routes between two networks when peering state isACTIVE.
        # Corresponds to the JSON property `autoCreateRoutes`
        # @return [Boolean]
        attr_accessor :auto_create_routes
        alias_method :auto_create_routes?, :auto_create_routes
      
        # [Output Only] Describes the state of a peering connection, not just the
        # local peering. This field provides information about the effective settings
        # for the connection as a whole, including pending delete/update requests for
        # CONSENSUS peerings.
        # Corresponds to the JSON property `connectionStatus`
        # @return [Google::Apis::ComputeV1::NetworkPeeringConnectionStatus]
        attr_accessor :connection_status
      
        # Indicates whether full mesh connectivity is created and managed
        # automatically between peered networks. Currently this field should always
        # be true since Google Compute Engine will automatically create and manage
        # subnetwork routes between two networks when peering state isACTIVE.
        # Corresponds to the JSON property `exchangeSubnetRoutes`
        # @return [Boolean]
        attr_accessor :exchange_subnet_routes
        alias_method :exchange_subnet_routes?, :exchange_subnet_routes
      
        # Whether to export the custom routes to peer network. The default value is
        # false.
        # Corresponds to the JSON property `exportCustomRoutes`
        # @return [Boolean]
        attr_accessor :export_custom_routes
        alias_method :export_custom_routes?, :export_custom_routes
      
        # Whether subnet routes with public IP range are exported. The default value
        # is true, all subnet routes are exported.IPv4
        # special-use ranges are always
        # exported to peers and are not controlled by this field.
        # Corresponds to the JSON property `exportSubnetRoutesWithPublicIp`
        # @return [Boolean]
        attr_accessor :export_subnet_routes_with_public_ip
        alias_method :export_subnet_routes_with_public_ip?, :export_subnet_routes_with_public_ip
      
        # Whether to import the custom routes from peer network. The default value is
        # false.
        # Corresponds to the JSON property `importCustomRoutes`
        # @return [Boolean]
        attr_accessor :import_custom_routes
        alias_method :import_custom_routes?, :import_custom_routes
      
        # Whether subnet routes with public IP range are imported. The default value
        # is false.IPv4
        # special-use ranges are always
        # imported from peers and are not controlled by this field.
        # Corresponds to the JSON property `importSubnetRoutesWithPublicIp`
        # @return [Boolean]
        attr_accessor :import_subnet_routes_with_public_ip
        alias_method :import_subnet_routes_with_public_ip?, :import_subnet_routes_with_public_ip
      
        # Name of this peering. Provided by the client when the peering is created.
        # The name must comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?`. The first character must be a
        # lowercase letter, and all the following characters must be a dash,
        # lowercase letter, or digit, except the last character, which cannot be a
        # dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The URL of the peer network. It can be either full URL or partial URL. The
        # peer network may belong to a different project. If the partial URL does not
        # contain project, it is assumed that the peer network is in the same project
        # as the current network.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # Output only. [Output Only] Maximum Transmission Unit in bytes of the peer
        # network.
        # Corresponds to the JSON property `peerMtu`
        # @return [Fixnum]
        attr_accessor :peer_mtu
      
        # Which IP version(s) of traffic and routes are allowed to be imported or
        # exported between peer networks. The default value is IPV4_ONLY.
        # Corresponds to the JSON property `stackType`
        # @return [String]
        attr_accessor :stack_type
      
        # Output only. [Output Only] State for the peering.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # Output only. [Output Only] Details about the current state of the peering.
        # Corresponds to the JSON property `stateDetails`
        # @return [String]
        attr_accessor :state_details
      
        # The update strategy determines the semantics for updates and deletes to the
        # peering connection configuration.
        # Corresponds to the JSON property `updateStrategy`
        # @return [String]
        attr_accessor :update_strategy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auto_create_routes = args[:auto_create_routes] if args.key?(:auto_create_routes)
          @connection_status = args[:connection_status] if args.key?(:connection_status)
          @exchange_subnet_routes = args[:exchange_subnet_routes] if args.key?(:exchange_subnet_routes)
          @export_custom_routes = args[:export_custom_routes] if args.key?(:export_custom_routes)
          @export_subnet_routes_with_public_ip = args[:export_subnet_routes_with_public_ip] if args.key?(:export_subnet_routes_with_public_ip)
          @import_custom_routes = args[:import_custom_routes] if args.key?(:import_custom_routes)
          @import_subnet_routes_with_public_ip = args[:import_subnet_routes_with_public_ip] if args.key?(:import_subnet_routes_with_public_ip)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @peer_mtu = args[:peer_mtu] if args.key?(:peer_mtu)
          @stack_type = args[:stack_type] if args.key?(:stack_type)
          @state = args[:state] if args.key?(:state)
          @state_details = args[:state_details] if args.key?(:state_details)
          @update_strategy = args[:update_strategy] if args.key?(:update_strategy)
        end
      end
      
      # [Output Only] Describes the state of a peering connection, not just the
      # local peering. This field provides information about the effective settings
      # for the connection as a whole, including pending delete/update requests for
      # CONSENSUS peerings.
      class NetworkPeeringConnectionStatus
        include Google::Apis::Core::Hashable
      
        # The status of update/delete for a consensus peering connection. Only set
        # when connection_status.update_strategy isCONSENSUS or a network peering is
        # proposing to update the
        # strategy to CONSENSUS.
        # Corresponds to the JSON property `consensusState`
        # @return [Google::Apis::ComputeV1::NetworkPeeringConnectionStatusConsensusState]
        attr_accessor :consensus_state
      
        # The active connectivity settings for the peering connection based on the
        # settings of the network peerings.
        # Corresponds to the JSON property `trafficConfiguration`
        # @return [Google::Apis::ComputeV1::NetworkPeeringConnectionStatusTrafficConfiguration]
        attr_accessor :traffic_configuration
      
        # The update strategy determines the update/delete semantics for this
        # peering connection.
        # Corresponds to the JSON property `updateStrategy`
        # @return [String]
        attr_accessor :update_strategy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @consensus_state = args[:consensus_state] if args.key?(:consensus_state)
          @traffic_configuration = args[:traffic_configuration] if args.key?(:traffic_configuration)
          @update_strategy = args[:update_strategy] if args.key?(:update_strategy)
        end
      end
      
      # The status of update/delete for a consensus peering connection. Only set
      # when connection_status.update_strategy isCONSENSUS or a network peering is
      # proposing to update the
      # strategy to CONSENSUS.
      class NetworkPeeringConnectionStatusConsensusState
        include Google::Apis::Core::Hashable
      
        # The status of the delete request.
        # Corresponds to the JSON property `deleteStatus`
        # @return [String]
        attr_accessor :delete_status
      
        # The status of the update request.
        # Corresponds to the JSON property `updateStatus`
        # @return [String]
        attr_accessor :update_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @delete_status = args[:delete_status] if args.key?(:delete_status)
          @update_status = args[:update_status] if args.key?(:update_status)
        end
      end
      
      # 
      class NetworkPeeringConnectionStatusTrafficConfiguration
        include Google::Apis::Core::Hashable
      
        # Whether custom routes are being exported to the peer network.
        # Corresponds to the JSON property `exportCustomRoutesToPeer`
        # @return [Boolean]
        attr_accessor :export_custom_routes_to_peer
        alias_method :export_custom_routes_to_peer?, :export_custom_routes_to_peer
      
        # Whether subnet routes with public IP ranges are being exported to the
        # peer network.
        # Corresponds to the JSON property `exportSubnetRoutesWithPublicIpToPeer`
        # @return [Boolean]
        attr_accessor :export_subnet_routes_with_public_ip_to_peer
        alias_method :export_subnet_routes_with_public_ip_to_peer?, :export_subnet_routes_with_public_ip_to_peer
      
        # Whether custom routes are being imported from the peer network.
        # Corresponds to the JSON property `importCustomRoutesFromPeer`
        # @return [Boolean]
        attr_accessor :import_custom_routes_from_peer
        alias_method :import_custom_routes_from_peer?, :import_custom_routes_from_peer
      
        # Whether subnet routes with public IP ranges are being imported
        # from the peer network.
        # Corresponds to the JSON property `importSubnetRoutesWithPublicIpFromPeer`
        # @return [Boolean]
        attr_accessor :import_subnet_routes_with_public_ip_from_peer
        alias_method :import_subnet_routes_with_public_ip_from_peer?, :import_subnet_routes_with_public_ip_from_peer
      
        # Which IP version(s) of traffic and routes are being imported or
        # exported between peer networks.
        # Corresponds to the JSON property `stackType`
        # @return [String]
        attr_accessor :stack_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @export_custom_routes_to_peer = args[:export_custom_routes_to_peer] if args.key?(:export_custom_routes_to_peer)
          @export_subnet_routes_with_public_ip_to_peer = args[:export_subnet_routes_with_public_ip_to_peer] if args.key?(:export_subnet_routes_with_public_ip_to_peer)
          @import_custom_routes_from_peer = args[:import_custom_routes_from_peer] if args.key?(:import_custom_routes_from_peer)
          @import_subnet_routes_with_public_ip_from_peer = args[:import_subnet_routes_with_public_ip_from_peer] if args.key?(:import_subnet_routes_with_public_ip_from_peer)
          @stack_type = args[:stack_type] if args.key?(:stack_type)
        end
      end
      
      # 
      class NetworkPerformanceConfig
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `totalEgressBandwidthTier`
        # @return [String]
        attr_accessor :total_egress_bandwidth_tier
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @total_egress_bandwidth_tier = args[:total_egress_bandwidth_tier] if args.key?(:total_egress_bandwidth_tier)
        end
      end
      
      # NetworkProfile represents a Google managed network profile resource.
      class NetworkProfile
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Output only. [Output Only] An optional description of this resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] Features supported by the network.
        # Corresponds to the JSON property `features`
        # @return [Google::Apis::ComputeV1::NetworkProfileNetworkFeatures]
        attr_accessor :features
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#networkProfile
        # for network profiles.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] Location to which the network is restricted.
        # Corresponds to the JSON property `location`
        # @return [Google::Apis::ComputeV1::NetworkProfileLocation]
        attr_accessor :location
      
        # Output only. [Output Only] Name of the resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] Type of the network profile.
        # Corresponds to the JSON property `profileType`
        # @return [Google::Apis::ComputeV1::NetworkProfileProfileType]
        attr_accessor :profile_type
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource with the
        # resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @features = args[:features] if args.key?(:features)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @location = args[:location] if args.key?(:location)
          @name = args[:name] if args.key?(:name)
          @profile_type = args[:profile_type] if args.key?(:profile_type)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
        end
      end
      
      # 
      class NetworkProfileLocation
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # 
        # Corresponds to the JSON property `scope`
        # @return [String]
        attr_accessor :scope
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @scope = args[:scope] if args.key?(:scope)
        end
      end
      
      # 
      class NetworkProfileNetworkFeatures
        include Google::Apis::Core::Hashable
      
        # Specifies what address purposes are supported. If empty, all address
        # purposes are supported.
        # Corresponds to the JSON property `addressPurposes`
        # @return [Array<String>]
        attr_accessor :address_purposes
      
        # Specifies whether address creation is allowed.
        # Corresponds to the JSON property `allowAddressCreation`
        # @return [String]
        attr_accessor :allow_address_creation
      
        # Specifies whether alias IP ranges (and secondary address ranges) are
        # allowed.
        # Corresponds to the JSON property `allowAliasIpRanges`
        # @return [String]
        attr_accessor :allow_alias_ip_ranges
      
        # Specifies whether auto mode subnet creation is allowed.
        # Corresponds to the JSON property `allowAutoModeSubnet`
        # @return [String]
        attr_accessor :allow_auto_mode_subnet
      
        # Specifies whether firewalls for Class D address ranges are supported.
        # Corresponds to the JSON property `allowClassDFirewalls`
        # @return [String]
        attr_accessor :allow_class_d_firewalls
      
        # Specifies whether cloud NAT creation is allowed.
        # Corresponds to the JSON property `allowCloudNat`
        # @return [String]
        attr_accessor :allow_cloud_nat
      
        # Specifies whether cloud router creation is allowed.
        # Corresponds to the JSON property `allowCloudRouter`
        # @return [String]
        attr_accessor :allow_cloud_router
      
        # Specifies whether default NIC attachment is allowed.
        # Corresponds to the JSON property `allowDefaultNicAttachment`
        # @return [String]
        attr_accessor :allow_default_nic_attachment
      
        # Specifies whether VMs are allowed to have external IP access on network
        # interfaces connected to this VPC.
        # Corresponds to the JSON property `allowExternalIpAccess`
        # @return [String]
        attr_accessor :allow_external_ip_access
      
        # Specifies whether firewall policy can be attached to the network.
        # Corresponds to the JSON property `allowFirewallPolicy`
        # @return [String]
        attr_accessor :allow_firewall_policy
      
        # Specifies whether Cloud Interconnect creation is allowed.
        # Corresponds to the JSON property `allowInterconnect`
        # @return [String]
        attr_accessor :allow_interconnect
      
        # Specifies whether IP forwarding is allowed.
        # Corresponds to the JSON property `allowIpForwarding`
        # @return [String]
        attr_accessor :allow_ip_forwarding
      
        # Specifies whether cloud load balancing is allowed.
        # Corresponds to the JSON property `allowLoadBalancing`
        # @return [String]
        attr_accessor :allow_load_balancing
      
        # Specifies whether multi-nic in the same network is allowed.
        # Corresponds to the JSON property `allowMultiNicInSameNetwork`
        # @return [String]
        attr_accessor :allow_multi_nic_in_same_network
      
        # Specifies whether multi-nic in the same subnetwork is allowed.
        # Corresponds to the JSON property `allowMultiNicInSameSubnetwork`
        # @return [String]
        attr_accessor :allow_multi_nic_in_same_subnetwork
      
        # Specifies whether multicast is allowed.
        # Corresponds to the JSON property `allowMulticast`
        # @return [String]
        attr_accessor :allow_multicast
      
        # Specifies whether NCC is allowed.
        # Corresponds to the JSON property `allowNcc`
        # @return [String]
        attr_accessor :allow_ncc
      
        # Specifies whether VM network migration is allowed.
        # Corresponds to the JSON property `allowNetworkMigration`
        # @return [String]
        attr_accessor :allow_network_migration
      
        # Specifies whether Packet Mirroring 1.0 is supported.
        # Corresponds to the JSON property `allowPacketMirroring`
        # @return [String]
        attr_accessor :allow_packet_mirroring
      
        # Specifies whether private Google access is allowed.
        # Corresponds to the JSON property `allowPrivateGoogleAccess`
        # @return [String]
        attr_accessor :allow_private_google_access
      
        # Specifies whether PSC creation is allowed.
        # Corresponds to the JSON property `allowPsc`
        # @return [String]
        attr_accessor :allow_psc
      
        # Specifies whether unicast within the same network is allowed.
        # Corresponds to the JSON property `allowSameNetworkUnicast`
        # @return [String]
        attr_accessor :allow_same_network_unicast
      
        # Specifies whether static route creation is allowed.
        # Corresponds to the JSON property `allowStaticRoutes`
        # @return [String]
        attr_accessor :allow_static_routes
      
        # Specifies whether sub interfaces are allowed.
        # Corresponds to the JSON property `allowSubInterfaces`
        # @return [String]
        attr_accessor :allow_sub_interfaces
      
        # Specifies whether subnetwork creation is allowed.
        # Corresponds to the JSON property `allowSubnetworkCreation`
        # @return [String]
        attr_accessor :allow_subnetwork_creation
      
        # Specifies whether VPC firewall rules can be created under the network.
        # Corresponds to the JSON property `allowVpcFirewallRules`
        # @return [String]
        attr_accessor :allow_vpc_firewall_rules
      
        # Specifies whether VPC peering is allowed.
        # Corresponds to the JSON property `allowVpcPeering`
        # @return [String]
        attr_accessor :allow_vpc_peering
      
        # Specifies whether VPN creation is allowed.
        # Corresponds to the JSON property `allowVpn`
        # @return [String]
        attr_accessor :allow_vpn
      
        # 
        # Corresponds to the JSON property `firewallPolicyTypes`
        # @return [Array<String>]
        attr_accessor :firewall_policy_types
      
        # If set, limits the interface types that the network supports. If
        # empty, all interface types are supported.
        # Corresponds to the JSON property `interfaceTypes`
        # @return [Array<String>]
        attr_accessor :interface_types
      
        # Specifies which type of multicast is supported.
        # Corresponds to the JSON property `multicast`
        # @return [String]
        attr_accessor :multicast
      
        # Specifies a predefined internal IPv6 range for the network.
        # Corresponds to the JSON property `predefinedNetworkInternalIpv6Range`
        # @return [String]
        attr_accessor :predefined_network_internal_ipv6_range
      
        # Predefined subnetwork ranges for the network.
        # Corresponds to the JSON property `predefinedSubnetworkRanges`
        # @return [Array<Google::Apis::ComputeV1::NetworkProfileNetworkFeaturesPredefinedSubnetworkRange>]
        attr_accessor :predefined_subnetwork_ranges
      
        # Specifies which subnetwork purposes are supported.
        # Corresponds to the JSON property `subnetPurposes`
        # @return [Array<String>]
        attr_accessor :subnet_purposes
      
        # Specifies which subnetwork stack types are supported.
        # Corresponds to the JSON property `subnetStackTypes`
        # @return [Array<String>]
        attr_accessor :subnet_stack_types
      
        # Output only. Specifies which subnetwork purposes are supported.
        # Corresponds to the JSON property `subnetworkPurposes`
        # @return [Array<String>]
        attr_accessor :subnetwork_purposes
      
        # Output only. Specifies which subnetwork stack types are supported.
        # Corresponds to the JSON property `subnetworkStackTypes`
        # @return [Array<String>]
        attr_accessor :subnetwork_stack_types
      
        # Specifies which type of unicast is supported.
        # Corresponds to the JSON property `unicast`
        # @return [String]
        attr_accessor :unicast
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @address_purposes = args[:address_purposes] if args.key?(:address_purposes)
          @allow_address_creation = args[:allow_address_creation] if args.key?(:allow_address_creation)
          @allow_alias_ip_ranges = args[:allow_alias_ip_ranges] if args.key?(:allow_alias_ip_ranges)
          @allow_auto_mode_subnet = args[:allow_auto_mode_subnet] if args.key?(:allow_auto_mode_subnet)
          @allow_class_d_firewalls = args[:allow_class_d_firewalls] if args.key?(:allow_class_d_firewalls)
          @allow_cloud_nat = args[:allow_cloud_nat] if args.key?(:allow_cloud_nat)
          @allow_cloud_router = args[:allow_cloud_router] if args.key?(:allow_cloud_router)
          @allow_default_nic_attachment = args[:allow_default_nic_attachment] if args.key?(:allow_default_nic_attachment)
          @allow_external_ip_access = args[:allow_external_ip_access] if args.key?(:allow_external_ip_access)
          @allow_firewall_policy = args[:allow_firewall_policy] if args.key?(:allow_firewall_policy)
          @allow_interconnect = args[:allow_interconnect] if args.key?(:allow_interconnect)
          @allow_ip_forwarding = args[:allow_ip_forwarding] if args.key?(:allow_ip_forwarding)
          @allow_load_balancing = args[:allow_load_balancing] if args.key?(:allow_load_balancing)
          @allow_multi_nic_in_same_network = args[:allow_multi_nic_in_same_network] if args.key?(:allow_multi_nic_in_same_network)
          @allow_multi_nic_in_same_subnetwork = args[:allow_multi_nic_in_same_subnetwork] if args.key?(:allow_multi_nic_in_same_subnetwork)
          @allow_multicast = args[:allow_multicast] if args.key?(:allow_multicast)
          @allow_ncc = args[:allow_ncc] if args.key?(:allow_ncc)
          @allow_network_migration = args[:allow_network_migration] if args.key?(:allow_network_migration)
          @allow_packet_mirroring = args[:allow_packet_mirroring] if args.key?(:allow_packet_mirroring)
          @allow_private_google_access = args[:allow_private_google_access] if args.key?(:allow_private_google_access)
          @allow_psc = args[:allow_psc] if args.key?(:allow_psc)
          @allow_same_network_unicast = args[:allow_same_network_unicast] if args.key?(:allow_same_network_unicast)
          @allow_static_routes = args[:allow_static_routes] if args.key?(:allow_static_routes)
          @allow_sub_interfaces = args[:allow_sub_interfaces] if args.key?(:allow_sub_interfaces)
          @allow_subnetwork_creation = args[:allow_subnetwork_creation] if args.key?(:allow_subnetwork_creation)
          @allow_vpc_firewall_rules = args[:allow_vpc_firewall_rules] if args.key?(:allow_vpc_firewall_rules)
          @allow_vpc_peering = args[:allow_vpc_peering] if args.key?(:allow_vpc_peering)
          @allow_vpn = args[:allow_vpn] if args.key?(:allow_vpn)
          @firewall_policy_types = args[:firewall_policy_types] if args.key?(:firewall_policy_types)
          @interface_types = args[:interface_types] if args.key?(:interface_types)
          @multicast = args[:multicast] if args.key?(:multicast)
          @predefined_network_internal_ipv6_range = args[:predefined_network_internal_ipv6_range] if args.key?(:predefined_network_internal_ipv6_range)
          @predefined_subnetwork_ranges = args[:predefined_subnetwork_ranges] if args.key?(:predefined_subnetwork_ranges)
          @subnet_purposes = args[:subnet_purposes] if args.key?(:subnet_purposes)
          @subnet_stack_types = args[:subnet_stack_types] if args.key?(:subnet_stack_types)
          @subnetwork_purposes = args[:subnetwork_purposes] if args.key?(:subnetwork_purposes)
          @subnetwork_stack_types = args[:subnetwork_stack_types] if args.key?(:subnetwork_stack_types)
          @unicast = args[:unicast] if args.key?(:unicast)
        end
      end
      
      # 
      class NetworkProfileNetworkFeaturesPredefinedSubnetworkRange
        include Google::Apis::Core::Hashable
      
        # The IPv6 range of the predefined subnetwork.
        # Corresponds to the JSON property `ipv6Range`
        # @return [String]
        attr_accessor :ipv6_range
      
        # The naming prefix of the predefined subnetwork.
        # Corresponds to the JSON property `namePrefix`
        # @return [String]
        attr_accessor :name_prefix
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ipv6_range = args[:ipv6_range] if args.key?(:ipv6_range)
          @name_prefix = args[:name_prefix] if args.key?(:name_prefix)
        end
      end
      
      # 
      class NetworkProfileProfileType
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `networkType`
        # @return [String]
        attr_accessor :network_type
      
        # 
        # Corresponds to the JSON property `rdmaSubtype`
        # @return [String]
        attr_accessor :rdma_subtype
      
        # 
        # Corresponds to the JSON property `ullSubtype`
        # @return [String]
        attr_accessor :ull_subtype
      
        # 
        # Corresponds to the JSON property `vpcSubtype`
        # @return [String]
        attr_accessor :vpc_subtype
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @network_type = args[:network_type] if args.key?(:network_type)
          @rdma_subtype = args[:rdma_subtype] if args.key?(:rdma_subtype)
          @ull_subtype = args[:ull_subtype] if args.key?(:ull_subtype)
          @vpc_subtype = args[:vpc_subtype] if args.key?(:vpc_subtype)
        end
      end
      
      # Contains a list of network profiles.
      class NetworkProfilesListResponse
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NetworkProfile resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::NetworkProfile>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#networkProfileList
        # for network profiles.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value
        # for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken
        # to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # end_interface: MixerListResponseWithEtagBuilder
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NetworkProfilesListResponse::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NetworkProfilesListResponse::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # A routing configuration attached to a network resource. The message
      # includes the list of routers associated with the network, and a flag
      # indicating the type of routing behavior to enforce network-wide.
      class NetworkRoutingConfig
        include Google::Apis::Core::Hashable
      
        # Enable comparison of Multi-Exit Discriminators (MED) across routes with
        # different neighbor ASNs when using the STANDARD BGP best path selection
        # algorithm.
        # Corresponds to the JSON property `bgpAlwaysCompareMed`
        # @return [Boolean]
        attr_accessor :bgp_always_compare_med
        alias_method :bgp_always_compare_med?, :bgp_always_compare_med
      
        # The BGP best path selection algorithm to be employed within this network
        # for dynamic routes learned by Cloud Routers. Can be LEGACY
        # (default) or STANDARD.
        # Corresponds to the JSON property `bgpBestPathSelectionMode`
        # @return [String]
        attr_accessor :bgp_best_path_selection_mode
      
        # Allows to define a preferred approach for handling inter-region cost in
        # the selection process when using the STANDARD BGP best path
        # selection algorithm. Can be DEFAULT orADD_COST_TO_MED.
        # Corresponds to the JSON property `bgpInterRegionCost`
        # @return [String]
        attr_accessor :bgp_inter_region_cost
      
        # Output only. [Output Only] Effective value of the bgp_always_compare_med
        # field.
        # Corresponds to the JSON property `effectiveBgpAlwaysCompareMed`
        # @return [Boolean]
        attr_accessor :effective_bgp_always_compare_med
        alias_method :effective_bgp_always_compare_med?, :effective_bgp_always_compare_med
      
        # Output only. [Output Only] Effective value of the bgp_inter_region_cost
        # field.
        # Corresponds to the JSON property `effectiveBgpInterRegionCost`
        # @return [String]
        attr_accessor :effective_bgp_inter_region_cost
      
        # The network-wide routing mode to use. If set to REGIONAL,
        # this network's Cloud Routers will only advertise routes with subnets
        # of this network in the same region as the router. If set toGLOBAL, this
        # network's Cloud Routers will advertise
        # routes with all subnets of this network, across regions.
        # Corresponds to the JSON property `routingMode`
        # @return [String]
        attr_accessor :routing_mode
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bgp_always_compare_med = args[:bgp_always_compare_med] if args.key?(:bgp_always_compare_med)
          @bgp_best_path_selection_mode = args[:bgp_best_path_selection_mode] if args.key?(:bgp_best_path_selection_mode)
          @bgp_inter_region_cost = args[:bgp_inter_region_cost] if args.key?(:bgp_inter_region_cost)
          @effective_bgp_always_compare_med = args[:effective_bgp_always_compare_med] if args.key?(:effective_bgp_always_compare_med)
          @effective_bgp_inter_region_cost = args[:effective_bgp_inter_region_cost] if args.key?(:effective_bgp_inter_region_cost)
          @routing_mode = args[:routing_mode] if args.key?(:routing_mode)
        end
      end
      
      # 
      class NetworksAddPeeringRequest
        include Google::Apis::Core::Hashable
      
        # This field will be deprecated soon. Useexchange_subnet_routes in
        # network_peering
        # instead.
        # Indicates whether full mesh connectivity is created and managed
        # automatically between peered networks. Currently this field should always
        # be true since Google Compute Engine will automatically create and manage
        # subnetwork routes between two networks when peering state isACTIVE.
        # Corresponds to the JSON property `autoCreateRoutes`
        # @return [Boolean]
        attr_accessor :auto_create_routes
        alias_method :auto_create_routes?, :auto_create_routes
      
        # Name of the peering, which should conform to RFC1035.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A network peering attached to a network resource. The message includes the
        # peering name, peer network, peering state, and a flag indicating whether
        # Google Compute Engine should automatically create routes for the peering.
        # Corresponds to the JSON property `networkPeering`
        # @return [Google::Apis::ComputeV1::NetworkPeering]
        attr_accessor :network_peering
      
        # URL of the peer network.  It can be either full URL or partial URL. The
        # peer network may belong to a different project. If the partial URL does not
        # contain project, it is assumed that the peer network is in the same project
        # as the current network.
        # Corresponds to the JSON property `peerNetwork`
        # @return [String]
        attr_accessor :peer_network
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auto_create_routes = args[:auto_create_routes] if args.key?(:auto_create_routes)
          @name = args[:name] if args.key?(:name)
          @network_peering = args[:network_peering] if args.key?(:network_peering)
          @peer_network = args[:peer_network] if args.key?(:peer_network)
        end
      end
      
      # 
      class NetworksGetEffectiveFirewallsResponse
        include Google::Apis::Core::Hashable
      
        # [Output Only] Effective firewalls from firewall policy. It returns Global
        # Network Firewall Policies and Hierarchical Firewall Policies.
        # UseregionNetworkFirewallPolicies.getEffectiveFirewalls to get
        # Regional Network Firewall Policies as well.
        # Corresponds to the JSON property `firewallPolicys`
        # @return [Array<Google::Apis::ComputeV1::NetworksGetEffectiveFirewallsResponseEffectiveFirewallPolicy>]
        attr_accessor :firewall_policys
      
        # Effective firewalls on the network.
        # Corresponds to the JSON property `firewalls`
        # @return [Array<Google::Apis::ComputeV1::Firewall>]
        attr_accessor :firewalls
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @firewall_policys = args[:firewall_policys] if args.key?(:firewall_policys)
          @firewalls = args[:firewalls] if args.key?(:firewalls)
        end
      end
      
      # 
      class NetworksGetEffectiveFirewallsResponseEffectiveFirewallPolicy
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Deprecated, please use short name instead. The
        # display name
        # of the firewall policy.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. [Output Only] The name of the firewall policy.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The packet mirroring rules that apply to the
        # network.
        # Corresponds to the JSON property `packetMirroringRules`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicyRule>]
        attr_accessor :packet_mirroring_rules
      
        # Output only. [Output only] Priority of firewall policy association. Not
        # applicable for
        # type=HIERARCHY.
        # Corresponds to the JSON property `priority`
        # @return [Fixnum]
        attr_accessor :priority
      
        # [Output Only] The rules that apply to the network.
        # Corresponds to the JSON property `rules`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicyRule>]
        attr_accessor :rules
      
        # Output only. [Output Only] The short name of the firewall policy.
        # Corresponds to the JSON property `shortName`
        # @return [String]
        attr_accessor :short_name
      
        # Output only. [Output Only] The type of the firewall policy.
        # 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)
          @display_name = args[:display_name] if args.key?(:display_name)
          @name = args[:name] if args.key?(:name)
          @packet_mirroring_rules = args[:packet_mirroring_rules] if args.key?(:packet_mirroring_rules)
          @priority = args[:priority] if args.key?(:priority)
          @rules = args[:rules] if args.key?(:rules)
          @short_name = args[:short_name] if args.key?(:short_name)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # 
      class NetworksRemovePeeringRequest
        include Google::Apis::Core::Hashable
      
        # Name of the peering, which should conform to RFC1035.
        # 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)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # 
      class NetworksRequestRemovePeeringRequest
        include Google::Apis::Core::Hashable
      
        # Name of the peering, which should conform to RFC1035.
        # 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)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # 
      class NetworksUpdatePeeringRequest
        include Google::Apis::Core::Hashable
      
        # A network peering attached to a network resource. The message includes the
        # peering name, peer network, peering state, and a flag indicating whether
        # Google Compute Engine should automatically create routes for the peering.
        # Corresponds to the JSON property `networkPeering`
        # @return [Google::Apis::ComputeV1::NetworkPeering]
        attr_accessor :network_peering
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @network_peering = args[:network_peering] if args.key?(:network_peering)
        end
      end
      
      # Represents a sole-tenant Node Group resource.
      # A sole-tenant node is a physical server that is dedicated to
      # hosting VM instances only for your specific project. Use sole-tenant nodes to
      # keep your instances physically separated from instances in other projects, or
      # to group your instances together on the same host hardware. For more
      # information, readSole-tenant nodes.
      class NodeGroup
        include Google::Apis::Core::Hashable
      
        # Specifies how autoscaling should behave.
        # Corresponds to the JSON property `autoscalingPolicy`
        # @return [Google::Apis::ComputeV1::NodeGroupAutoscalingPolicy]
        attr_accessor :autoscaling_policy
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # 
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] The type of the resource. Alwayscompute#nodeGroup
        # for node group.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # An opaque location hint used to place the Node close to other
        # resources.
        # This field is for use by internal tools that use the public API.
        # The location hint here on the NodeGroup overrides any location_hint
        # present in the NodeTemplate.
        # Corresponds to the JSON property `locationHint`
        # @return [String]
        attr_accessor :location_hint
      
        # Specifies the frequency of planned maintenance events. The accepted values
        # are: `AS_NEEDED` and `RECURRENT`.
        # Corresponds to the JSON property `maintenanceInterval`
        # @return [String]
        attr_accessor :maintenance_interval
      
        # Specifies how to handle instances when a node in the group undergoes
        # maintenance. Set to one of: DEFAULT,RESTART_IN_PLACE, or
        # MIGRATE_WITHIN_NODE_GROUP.
        # The default value is DEFAULT. For more information, see
        # Maintenance policies.
        # Corresponds to the JSON property `maintenancePolicy`
        # @return [String]
        attr_accessor :maintenance_policy
      
        # Time window specified for daily maintenance operations. GCE's internal
        # maintenance will be performed within this window.
        # Corresponds to the JSON property `maintenanceWindow`
        # @return [Google::Apis::ComputeV1::NodeGroupMaintenanceWindow]
        attr_accessor :maintenance_window
      
        # The name of the resource, provided by the client when initially creating
        # the resource. The resource name must be 1-63 characters long, and comply
        # withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # URL of the node template to create the node group from.
        # Corresponds to the JSON property `nodeTemplate`
        # @return [String]
        attr_accessor :node_template
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # The share setting for reservations and sole tenancy node groups.
        # Corresponds to the JSON property `shareSettings`
        # @return [Google::Apis::ComputeV1::ShareSettings]
        attr_accessor :share_settings
      
        # Output only. [Output Only] The total number of nodes in the node group.
        # Corresponds to the JSON property `size`
        # @return [Fixnum]
        attr_accessor :size
      
        # 
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Output only. [Output Only] The name of the zone where the node group resides,
        # such as us-central1-a.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @autoscaling_policy = args[:autoscaling_policy] if args.key?(:autoscaling_policy)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @location_hint = args[:location_hint] if args.key?(:location_hint)
          @maintenance_interval = args[:maintenance_interval] if args.key?(:maintenance_interval)
          @maintenance_policy = args[:maintenance_policy] if args.key?(:maintenance_policy)
          @maintenance_window = args[:maintenance_window] if args.key?(:maintenance_window)
          @name = args[:name] if args.key?(:name)
          @node_template = args[:node_template] if args.key?(:node_template)
          @self_link = args[:self_link] if args.key?(:self_link)
          @share_settings = args[:share_settings] if args.key?(:share_settings)
          @size = args[:size] if args.key?(:size)
          @status = args[:status] if args.key?(:status)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class NodeGroupAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NodeGroupsScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::NodeGroupsScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource.Alwayscompute#
        # nodeGroupAggregatedList for aggregated lists of node
        # groups.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NodeGroupAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NodeGroupAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class NodeGroupAutoscalingPolicy
        include Google::Apis::Core::Hashable
      
        # The maximum number of nodes that the group should have. Must be set if
        # autoscaling is enabled. Maximum value allowed is 100.
        # Corresponds to the JSON property `maxNodes`
        # @return [Fixnum]
        attr_accessor :max_nodes
      
        # The minimum number of nodes that the group should have.
        # Corresponds to the JSON property `minNodes`
        # @return [Fixnum]
        attr_accessor :min_nodes
      
        # The autoscaling mode. Set to one of: ON, OFF,
        # or ONLY_SCALE_OUT. For more information, see
        # Autoscaler modes.
        # Corresponds to the JSON property `mode`
        # @return [String]
        attr_accessor :mode
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max_nodes = args[:max_nodes] if args.key?(:max_nodes)
          @min_nodes = args[:min_nodes] if args.key?(:min_nodes)
          @mode = args[:mode] if args.key?(:mode)
        end
      end
      
      # Contains a list of nodeGroups.
      class NodeGroupList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NodeGroup resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::NodeGroup>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource.Always compute#nodeGroupList
        # for lists of node groups.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NodeGroupList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NodeGroupList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Time window specified for daily maintenance operations. GCE's internal
      # maintenance will be performed within this window.
      class NodeGroupMaintenanceWindow
        include Google::Apis::Core::Hashable
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `maintenanceDuration`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :maintenance_duration
      
        # Start time of the window. This must be in UTC format that resolves to one
        # of 00:00, 04:00, 08:00,12:00, 16:00, or 20:00. For
        # example, both 13:00-5 and 08:00 are valid.
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @maintenance_duration = args[:maintenance_duration] if args.key?(:maintenance_duration)
          @start_time = args[:start_time] if args.key?(:start_time)
        end
      end
      
      # 
      class NodeGroupNode
        include Google::Apis::Core::Hashable
      
        # Accelerators for this node.
        # Corresponds to the JSON property `accelerators`
        # @return [Array<Google::Apis::ComputeV1::AcceleratorConfig>]
        attr_accessor :accelerators
      
        # Output only. Node resources that are reserved by all instances.
        # Corresponds to the JSON property `consumedResources`
        # @return [Google::Apis::ComputeV1::InstanceConsumptionInfo]
        attr_accessor :consumed_resources
      
        # CPU overcommit.
        # Corresponds to the JSON property `cpuOvercommitType`
        # @return [String]
        attr_accessor :cpu_overcommit_type
      
        # Local disk configurations.
        # Corresponds to the JSON property `disks`
        # @return [Array<Google::Apis::ComputeV1::LocalDisk>]
        attr_accessor :disks
      
        # Output only. Instance data that shows consumed resources on the node.
        # Corresponds to the JSON property `instanceConsumptionData`
        # @return [Array<Google::Apis::ComputeV1::InstanceConsumptionData>]
        attr_accessor :instance_consumption_data
      
        # Instances scheduled on this node.
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        attr_accessor :instances
      
        # The name of the node.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The type of this node.
        # Corresponds to the JSON property `nodeType`
        # @return [String]
        attr_accessor :node_type
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # Binding properties for the physical server.
        # Corresponds to the JSON property `serverBinding`
        # @return [Google::Apis::ComputeV1::ServerBinding]
        attr_accessor :server_binding
      
        # Server ID associated with this node.
        # Corresponds to the JSON property `serverId`
        # @return [String]
        attr_accessor :server_id
      
        # 
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Output only. Total amount of available resources on the node.
        # Corresponds to the JSON property `totalResources`
        # @return [Google::Apis::ComputeV1::InstanceConsumptionInfo]
        attr_accessor :total_resources
      
        # Upcoming Maintenance notification information.
        # Corresponds to the JSON property `upcomingMaintenance`
        # @return [Google::Apis::ComputeV1::UpcomingMaintenance]
        attr_accessor :upcoming_maintenance
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @accelerators = args[:accelerators] if args.key?(:accelerators)
          @consumed_resources = args[:consumed_resources] if args.key?(:consumed_resources)
          @cpu_overcommit_type = args[:cpu_overcommit_type] if args.key?(:cpu_overcommit_type)
          @disks = args[:disks] if args.key?(:disks)
          @instance_consumption_data = args[:instance_consumption_data] if args.key?(:instance_consumption_data)
          @instances = args[:instances] if args.key?(:instances)
          @name = args[:name] if args.key?(:name)
          @node_type = args[:node_type] if args.key?(:node_type)
          @satisfies_pzs = args[:satisfies_pzs] if args.key?(:satisfies_pzs)
          @server_binding = args[:server_binding] if args.key?(:server_binding)
          @server_id = args[:server_id] if args.key?(:server_id)
          @status = args[:status] if args.key?(:status)
          @total_resources = args[:total_resources] if args.key?(:total_resources)
          @upcoming_maintenance = args[:upcoming_maintenance] if args.key?(:upcoming_maintenance)
        end
      end
      
      # 
      class NodeGroupsAddNodesRequest
        include Google::Apis::Core::Hashable
      
        # Count of additional nodes to be added to the node group.
        # Corresponds to the JSON property `additionalNodeCount`
        # @return [Fixnum]
        attr_accessor :additional_node_count
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @additional_node_count = args[:additional_node_count] if args.key?(:additional_node_count)
        end
      end
      
      # 
      class NodeGroupsDeleteNodesRequest
        include Google::Apis::Core::Hashable
      
        # Names of the nodes to delete.
        # Corresponds to the JSON property `nodes`
        # @return [Array<String>]
        attr_accessor :nodes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @nodes = args[:nodes] if args.key?(:nodes)
        end
      end
      
      # 
      class NodeGroupsListNodes
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the resource; defined by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Node resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::NodeGroupNode>]
        attr_accessor :items
      
        # Output only. [Output Only] The resource type, which is alwayscompute.
        # nodeGroupsListNodes for the list of nodes in the
        # specified node group.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NodeGroupsListNodes::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NodeGroupsListNodes::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class NodeGroupsPerformMaintenanceRequest
        include Google::Apis::Core::Hashable
      
        # [Required] List of nodes affected by the call.
        # Corresponds to the JSON property `nodes`
        # @return [Array<String>]
        attr_accessor :nodes
      
        # The start time of the schedule. The timestamp is an RFC3339 string.
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @nodes = args[:nodes] if args.key?(:nodes)
          @start_time = args[:start_time] if args.key?(:start_time)
        end
      end
      
      # 
      class NodeGroupsScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of node groups contained in this scope.
        # Corresponds to the JSON property `nodeGroups`
        # @return [Array<Google::Apis::ComputeV1::NodeGroup>]
        attr_accessor :node_groups
      
        # [Output Only] An informational warning that appears when the nodeGroup
        # list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NodeGroupsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @node_groups = args[:node_groups] if args.key?(:node_groups)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] An informational warning that appears when the nodeGroup
        # list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NodeGroupsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class NodeGroupsSetNodeTemplateRequest
        include Google::Apis::Core::Hashable
      
        # Full or partial URL of the node template resource to be updated for this
        # node group.
        # Corresponds to the JSON property `nodeTemplate`
        # @return [String]
        attr_accessor :node_template
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @node_template = args[:node_template] if args.key?(:node_template)
        end
      end
      
      # 
      class NodeGroupsSimulateMaintenanceEventRequest
        include Google::Apis::Core::Hashable
      
        # Names of the nodes to go under maintenance simulation.
        # Corresponds to the JSON property `nodes`
        # @return [Array<String>]
        attr_accessor :nodes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @nodes = args[:nodes] if args.key?(:nodes)
        end
      end
      
      # Represent a sole-tenant Node Template resource.
      # You can use a template to define properties for nodes in a node group. For
      # more information, readCreating node groups
      # and instances.
      class NodeTemplate
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `accelerators`
        # @return [Array<Google::Apis::ComputeV1::AcceleratorConfig>]
        attr_accessor :accelerators
      
        # CPU overcommit.
        # Corresponds to the JSON property `cpuOvercommitType`
        # @return [String]
        attr_accessor :cpu_overcommit_type
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # 
        # Corresponds to the JSON property `disks`
        # @return [Array<Google::Apis::ComputeV1::LocalDisk>]
        attr_accessor :disks
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] The type of the resource. Alwayscompute#
        # nodeTemplate for node templates.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The name of the resource, provided by the client when initially creating
        # the resource. The resource name must be 1-63 characters long, and comply
        # withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Labels to use for node affinity, which will be used in instance scheduling.
        # Corresponds to the JSON property `nodeAffinityLabels`
        # @return [Hash<String,String>]
        attr_accessor :node_affinity_labels
      
        # The node type to use for nodes group that are created from this template.
        # Corresponds to the JSON property `nodeType`
        # @return [String]
        attr_accessor :node_type
      
        # Do not use. Instead, use the node_type property.
        # Corresponds to the JSON property `nodeTypeFlexibility`
        # @return [Google::Apis::ComputeV1::NodeTemplateNodeTypeFlexibility]
        attr_accessor :node_type_flexibility
      
        # Output only. [Output Only] The name of the region where the node template
        # resides,
        # such as us-central1.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Sets the binding properties for the physical server. Valid values include:
        # 
        # - *[Default]* RESTART_NODE_ON_ANY_SERVER:
        # Restarts VMs on any available
        # physical server
        # - RESTART_NODE_ON_MINIMAL_SERVER: Restarts VMs on the same
        # physical server whenever possible
        # See Sole-tenant
        # node options for more information.
        # Corresponds to the JSON property `serverBinding`
        # @return [Google::Apis::ComputeV1::ServerBinding]
        attr_accessor :server_binding
      
        # Output only. [Output Only] The status of the node template. One of the
        # following values:CREATING, READY, and DELETING.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Output only. [Output Only] An optional, human-readable explanation of the
        # status.
        # Corresponds to the JSON property `statusMessage`
        # @return [String]
        attr_accessor :status_message
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @accelerators = args[:accelerators] if args.key?(:accelerators)
          @cpu_overcommit_type = args[:cpu_overcommit_type] if args.key?(:cpu_overcommit_type)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @disks = args[:disks] if args.key?(:disks)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @node_affinity_labels = args[:node_affinity_labels] if args.key?(:node_affinity_labels)
          @node_type = args[:node_type] if args.key?(:node_type)
          @node_type_flexibility = args[:node_type_flexibility] if args.key?(:node_type_flexibility)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @server_binding = args[:server_binding] if args.key?(:server_binding)
          @status = args[:status] if args.key?(:status)
          @status_message = args[:status_message] if args.key?(:status_message)
        end
      end
      
      # 
      class NodeTemplateAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NodeTemplatesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::NodeTemplatesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource.Alwayscompute#
        # nodeTemplateAggregatedList for aggregated lists of
        # node templates.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NodeTemplateAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NodeTemplateAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of node templates.
      class NodeTemplateList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NodeTemplate resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::NodeTemplate>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource.Always compute#nodeTemplateList
        # for lists of node templates.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NodeTemplateList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NodeTemplateList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class NodeTemplateNodeTypeFlexibility
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `cpus`
        # @return [String]
        attr_accessor :cpus
      
        # 
        # Corresponds to the JSON property `localSsd`
        # @return [String]
        attr_accessor :local_ssd
      
        # 
        # Corresponds to the JSON property `memory`
        # @return [String]
        attr_accessor :memory
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cpus = args[:cpus] if args.key?(:cpus)
          @local_ssd = args[:local_ssd] if args.key?(:local_ssd)
          @memory = args[:memory] if args.key?(:memory)
        end
      end
      
      # 
      class NodeTemplatesScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of node templates contained in this scope.
        # Corresponds to the JSON property `nodeTemplates`
        # @return [Array<Google::Apis::ComputeV1::NodeTemplate>]
        attr_accessor :node_templates
      
        # [Output Only] An informational warning that appears when the node templates
        # list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NodeTemplatesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @node_templates = args[:node_templates] if args.key?(:node_templates)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] An informational warning that appears when the node templates
        # list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NodeTemplatesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represent a sole-tenant Node Type resource.
      # Each node within a node group must have a node type. A node type specifies
      # the total amount of cores and memory for that node. Currently, the only
      # available node type is n1-node-96-624 node type that has 96
      # vCPUs and 624 GB of memory, available in multiple zones. For more information
      # readNode types.
      class NodeType
        include Google::Apis::Core::Hashable
      
        # [Output Only] The CPU platform used by this node type.
        # Corresponds to the JSON property `cpuPlatform`
        # @return [String]
        attr_accessor :cpu_platform
      
        # [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Deprecation status for a public resource.
        # Corresponds to the JSON property `deprecated`
        # @return [Google::Apis::ComputeV1::DeprecationStatus]
        attr_accessor :deprecated
      
        # [Output Only] An optional textual description of the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The number of virtual CPUs that are available to the node
        # type.
        # Corresponds to the JSON property `guestCpus`
        # @return [Fixnum]
        attr_accessor :guest_cpus
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] The type of the resource. Alwayscompute#nodeType
        # for node types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] Local SSD available to the node type, defined in GB.
        # Corresponds to the JSON property `localSsdGb`
        # @return [Fixnum]
        attr_accessor :local_ssd_gb
      
        # Output only. [Output Only] Maximum number of VMs that can be created for this
        # node type.
        # Corresponds to the JSON property `maxVms`
        # @return [Fixnum]
        attr_accessor :max_vms
      
        # [Output Only] The amount of physical memory available to the node type,
        # defined in MB.
        # Corresponds to the JSON property `memoryMb`
        # @return [Fixnum]
        attr_accessor :memory_mb
      
        # [Output Only] Name of the resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] The name of the zone where the node type resides,
        # such as us-central1-a.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cpu_platform = args[:cpu_platform] if args.key?(:cpu_platform)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @deprecated = args[:deprecated] if args.key?(:deprecated)
          @description = args[:description] if args.key?(:description)
          @guest_cpus = args[:guest_cpus] if args.key?(:guest_cpus)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @local_ssd_gb = args[:local_ssd_gb] if args.key?(:local_ssd_gb)
          @max_vms = args[:max_vms] if args.key?(:max_vms)
          @memory_mb = args[:memory_mb] if args.key?(:memory_mb)
          @name = args[:name] if args.key?(:name)
          @self_link = args[:self_link] if args.key?(:self_link)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class NodeTypeAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NodeTypesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::NodeTypesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource.Alwayscompute#
        # nodeTypeAggregatedList for aggregated lists of node
        # types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NodeTypeAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NodeTypeAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of node types.
      class NodeTypeList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NodeType resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::NodeType>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource.Always compute#nodeTypeList for
        # lists of node types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NodeTypeList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NodeTypeList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class NodeTypesScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of node types contained in this scope.
        # Corresponds to the JSON property `nodeTypes`
        # @return [Array<Google::Apis::ComputeV1::NodeType>]
        attr_accessor :node_types
      
        # [Output Only] An informational warning that appears when the node types
        # list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NodeTypesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @node_types = args[:node_types] if args.key?(:node_types)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] An informational warning that appears when the node types
        # list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NodeTypesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a notification endpoint.
      # A notification endpoint resource defines an endpoint to receive notifications
      # when there are status changes detected by the associated health check
      # service.
      # For more information, see
      # Health checks overview.
      class NotificationEndpoint
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Represents a gRPC setting that describes one gRPC notification endpoint and
        # the retry duration attempting to send notification to this endpoint.
        # Corresponds to the JSON property `grpcSettings`
        # @return [Google::Apis::ComputeV1::NotificationEndpointGrpcSettings]
        attr_accessor :grpc_settings
      
        # Output only. [Output Only] A unique identifier for this resource type. The
        # server
        # generates this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # notificationEndpoint for notification endpoints.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] URL of the region where the notification endpoint
        # resides.
        # This field applies only to the regional resource. You must specify this
        # field as part of the HTTP request URL. It is not settable as a field in
        # the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @grpc_settings = args[:grpc_settings] if args.key?(:grpc_settings)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
        end
      end
      
      # Represents a gRPC setting that describes one gRPC notification endpoint and
      # the retry duration attempting to send notification to this endpoint.
      class NotificationEndpointGrpcSettings
        include Google::Apis::Core::Hashable
      
        # Optional. If specified, this field is used to set the authority header by
        # the sender of notifications. See
        # https://tools.ietf.org/html/rfc7540#section-8.1.2.3
        # Corresponds to the JSON property `authority`
        # @return [String]
        attr_accessor :authority
      
        # Endpoint to which gRPC notifications are sent. This must be a valid
        # gRPCLB DNS name.
        # Corresponds to the JSON property `endpoint`
        # @return [String]
        attr_accessor :endpoint
      
        # Optional. If specified, this field is used to populate the "name" field
        # in gRPC requests.
        # Corresponds to the JSON property `payloadName`
        # @return [String]
        attr_accessor :payload_name
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `resendInterval`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :resend_interval
      
        # How much time (in seconds) is spent attempting notification retries
        # until a successful response is received. Default is 30s. Limit is 20m
        # (1200s). Must be a positive number.
        # Corresponds to the JSON property `retryDurationSec`
        # @return [Fixnum]
        attr_accessor :retry_duration_sec
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @authority = args[:authority] if args.key?(:authority)
          @endpoint = args[:endpoint] if args.key?(:endpoint)
          @payload_name = args[:payload_name] if args.key?(:payload_name)
          @resend_interval = args[:resend_interval] if args.key?(:resend_interval)
          @retry_duration_sec = args[:retry_duration_sec] if args.key?(:retry_duration_sec)
        end
      end
      
      # 
      class NotificationEndpointList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of NotificationEndpoint resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::NotificationEndpoint>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # notificationEndpoint for notification endpoints.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::NotificationEndpointList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::NotificationEndpointList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents an Operation resource.
      # Google Compute Engine has three Operation resources:
      # * [Global](/compute/docs/reference/rest/v1/globalOperations)
      # * [Regional](/compute/docs/reference/rest/v1/regionOperations)
      # * [Zonal](/compute/docs/reference/rest/v1/zoneOperations)
      # You can use an operation resource to manage asynchronous API requests.
      # For more information, readHandling
      # API responses.
      # Operations can be global, regional or zonal.
      # 
      # - For global operations, use the `globalOperations`
      # resource.
      # - For regional operations, use the
      # `regionOperations` resource.
      # - For zonal operations, use
      # the `zoneOperations` resource.
      # For more information, read
      # Global, Regional, and Zonal Resources.
      # Note that completed Operation resources have a limited
      # retention period.
      class Operation
        include Google::Apis::Core::Hashable
      
        # [Output Only] The value of `requestId` if you provided it in the request.
        # Not present otherwise.
        # Corresponds to the JSON property `clientOperationId`
        # @return [String]
        attr_accessor :client_operation_id
      
        # [Deprecated] This field is deprecated.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # [Output Only] A textual description of the operation, which is
        # set when the operation is created.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The time that this operation was completed. This value is
        # inRFC3339
        # text format.
        # Corresponds to the JSON property `endTime`
        # @return [String]
        attr_accessor :end_time
      
        # [Output Only] If errors are generated during processing of the operation,
        # this field will be populated.
        # Corresponds to the JSON property `error`
        # @return [Google::Apis::ComputeV1::Operation::Error]
        attr_accessor :error
      
        # [Output Only] If the operation fails, this field contains the HTTP error
        # message that was returned, such as `NOT FOUND`.
        # Corresponds to the JSON property `httpErrorMessage`
        # @return [String]
        attr_accessor :http_error_message
      
        # [Output Only] If the operation fails, this field contains the HTTP error
        # status code that was returned. For example, a `404` means the
        # resource was not found.
        # Corresponds to the JSON property `httpErrorStatusCode`
        # @return [Fixnum]
        attr_accessor :http_error_status_code
      
        # [Output Only] The unique identifier for the operation. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # [Output Only] The time that this operation was requested.
        # This value is inRFC3339
        # text format.
        # Corresponds to the JSON property `insertTime`
        # @return [String]
        attr_accessor :insert_time
      
        # 
        # Corresponds to the JSON property `instancesBulkInsertOperationMetadata`
        # @return [Google::Apis::ComputeV1::InstancesBulkInsertOperationMetadata]
        attr_accessor :instances_bulk_insert_operation_metadata
      
        # Output only. [Output Only] Type of the resource. Always `compute#operation`
        # for
        # Operation resources.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] Name of the operation.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] An ID that represents a group of operations, such
        # as when a
        # group of operations results from a `bulkInsert` API request.
        # Corresponds to the JSON property `operationGroupId`
        # @return [String]
        attr_accessor :operation_group_id
      
        # [Output Only] The type of operation, such as `insert`,
        # `update`, or `delete`, and so on.
        # Corresponds to the JSON property `operationType`
        # @return [String]
        attr_accessor :operation_type
      
        # [Output Only] An optional progress indicator that ranges from 0 to 100.
        # There is no requirement that this be linear or support any granularity of
        # operations. This should not be used to guess when the operation will be
        # complete. This number should monotonically increase as the operation
        # progresses.
        # Corresponds to the JSON property `progress`
        # @return [Fixnum]
        attr_accessor :progress
      
        # [Output Only] The URL of the region where the operation resides. Only
        # applicable when performing regional operations.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] If the operation is for projects.
        # setCommonInstanceMetadata,
        # this field will contain information on all underlying zonal actions and
        # their state.
        # Corresponds to the JSON property `setCommonInstanceMetadataOperationMetadata`
        # @return [Google::Apis::ComputeV1::SetCommonInstanceMetadataOperationMetadata]
        attr_accessor :set_common_instance_metadata_operation_metadata
      
        # [Output Only] The time that this operation was started by the server.
        # This value is inRFC3339
        # text format.
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        # [Output Only] The status of the operation, which can be one of the
        # following:
        # `PENDING`, `RUNNING`, or `DONE`.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # [Output Only] An optional textual description of the current status of the
        # operation.
        # Corresponds to the JSON property `statusMessage`
        # @return [String]
        attr_accessor :status_message
      
        # [Output Only] The unique target ID, which identifies a specific incarnation
        # of the target resource.
        # Corresponds to the JSON property `targetId`
        # @return [Fixnum]
        attr_accessor :target_id
      
        # [Output Only] The URL of the resource that the operation modifies. For
        # operations related to creating a snapshot, this points to the disk
        # that the snapshot was created from.
        # Corresponds to the JSON property `targetLink`
        # @return [String]
        attr_accessor :target_link
      
        # [Output Only] User who requested the operation, for example:
        # `user@example.com` or
        # `alice_smith_identifier (global/workforcePools/example-com-us-employees)`.
        # Corresponds to the JSON property `user`
        # @return [String]
        attr_accessor :user
      
        # [Output Only] If warning messages are generated during processing of the
        # operation, this field will be populated.
        # Corresponds to the JSON property `warnings`
        # @return [Array<Google::Apis::ComputeV1::Operation::Warning>]
        attr_accessor :warnings
      
        # [Output Only] The URL of the zone where the operation resides. Only
        # applicable when performing per-zone operations.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @client_operation_id = args[:client_operation_id] if args.key?(:client_operation_id)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @end_time = args[:end_time] if args.key?(:end_time)
          @error = args[:error] if args.key?(:error)
          @http_error_message = args[:http_error_message] if args.key?(:http_error_message)
          @http_error_status_code = args[:http_error_status_code] if args.key?(:http_error_status_code)
          @id = args[:id] if args.key?(:id)
          @insert_time = args[:insert_time] if args.key?(:insert_time)
          @instances_bulk_insert_operation_metadata = args[:instances_bulk_insert_operation_metadata] if args.key?(:instances_bulk_insert_operation_metadata)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @operation_group_id = args[:operation_group_id] if args.key?(:operation_group_id)
          @operation_type = args[:operation_type] if args.key?(:operation_type)
          @progress = args[:progress] if args.key?(:progress)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @set_common_instance_metadata_operation_metadata = args[:set_common_instance_metadata_operation_metadata] if args.key?(:set_common_instance_metadata_operation_metadata)
          @start_time = args[:start_time] if args.key?(:start_time)
          @status = args[:status] if args.key?(:status)
          @status_message = args[:status_message] if args.key?(:status_message)
          @target_id = args[:target_id] if args.key?(:target_id)
          @target_link = args[:target_link] if args.key?(:target_link)
          @user = args[:user] if args.key?(:user)
          @warnings = args[:warnings] if args.key?(:warnings)
          @zone = args[:zone] if args.key?(:zone)
        end
        
        # [Output Only] If errors are generated during processing of the operation,
        # this field will be populated.
        class Error
          include Google::Apis::Core::Hashable
        
          # [Output Only] The array of errors encountered while processing this
          # operation.
          # Corresponds to the JSON property `errors`
          # @return [Array<Google::Apis::ComputeV1::Operation::Error::Error>]
          attr_accessor :errors
        
          def initialize(**args)
             update!(**args)
          end
        
          # Update properties of this object
          def update!(**args)
            @errors = args[:errors] if args.key?(:errors)
          end
          
          # 
          class Error
            include Google::Apis::Core::Hashable
          
            # [Output Only] The error type identifier for this error.
            # Corresponds to the JSON property `code`
            # @return [String]
            attr_accessor :code
          
            # [Output Only] An optional list of messages that contain the error
            # details. There is a set of defined message types to use for providing
            # details.The syntax depends on the error code. For example,
            # QuotaExceededInfo will have details when the error code is
            # QUOTA_EXCEEDED.
            # Corresponds to the JSON property `errorDetails`
            # @return [Array<Google::Apis::ComputeV1::Operation::Error::Error::ErrorDetail>]
            attr_accessor :error_details
          
            # [Output Only] Indicates the field in the request that caused the error.
            # This property is optional.
            # Corresponds to the JSON property `location`
            # @return [String]
            attr_accessor :location
          
            # [Output Only] An optional, human-readable error message.
            # 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)
              @error_details = args[:error_details] if args.key?(:error_details)
              @location = args[:location] if args.key?(:location)
              @message = args[:message] if args.key?(:message)
            end
            
            # 
            class ErrorDetail
              include Google::Apis::Core::Hashable
            
              # Describes the cause of the error with structured details.
              # Example of an error when contacting the "pubsub.googleapis.com" API when it
              # is not enabled:
              # ` "reason": "API_DISABLED"
              # "domain": "googleapis.com"
              # "metadata": `
              # "resource": "projects/123",
              # "service": "pubsub.googleapis.com"
              # `
              # `
              # This response indicates that the pubsub.googleapis.com API is not enabled.
              # Example of an error that is returned when attempting to create a Spanner
              # instance in a region that is out of stock:
              # ` "reason": "STOCKOUT"
              # "domain": "spanner.googleapis.com",
              # "metadata": `
              # "availableRegions": "us-central1,us-east2"
              # `
              # `
              # Corresponds to the JSON property `errorInfo`
              # @return [Google::Apis::ComputeV1::ErrorInfo]
              attr_accessor :error_info
            
              # Provides links to documentation or for performing an out of band action.
              # For example, if a quota check failed with an error indicating the calling
              # project hasn't enabled the accessed service, this can contain a URL pointing
              # directly to the right place in the developer console to flip the bit.
              # Corresponds to the JSON property `help`
              # @return [Google::Apis::ComputeV1::Help]
              attr_accessor :help
            
              # Provides a localized error message that is safe to return to the user
              # which can be attached to an RPC error.
              # Corresponds to the JSON property `localizedMessage`
              # @return [Google::Apis::ComputeV1::LocalizedMessage]
              attr_accessor :localized_message
            
              # Additional details for quota exceeded error for resource quota.
              # Corresponds to the JSON property `quotaInfo`
              # @return [Google::Apis::ComputeV1::QuotaExceededInfo]
              attr_accessor :quota_info
            
              def initialize(**args)
                 update!(**args)
              end
            
              # Update properties of this object
              def update!(**args)
                @error_info = args[:error_info] if args.key?(:error_info)
                @help = args[:help] if args.key?(:help)
                @localized_message = args[:localized_message] if args.key?(:localized_message)
                @quota_info = args[:quota_info] if args.key?(:quota_info)
              end
            end
          end
        end
        
        # 
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::Operation::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class OperationAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # [Output Only] A map of scoped operation lists.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::OperationsScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always `compute#
        # operationAggregatedList`
        # for aggregated lists of operations.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger than
        # `maxResults`, use the `nextPageToken` as a value for
        # the query parameter `pageToken` in the next list request.
        # Subsequent list requests will have their own `nextPageToken` to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::OperationAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::OperationAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of Operation resources.
      class OperationList
        include Google::Apis::Core::Hashable
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # [Output Only] A list of Operation resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Operation>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always `compute#operations` for
        # Operations
        # resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger than
        # `maxResults`, use the `nextPageToken` as a value for
        # the query parameter `pageToken` in the next list request.
        # Subsequent list requests will have their own `nextPageToken` to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::OperationList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::OperationList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class OperationsScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of operations contained in this scope.
        # Corresponds to the JSON property `operations`
        # @return [Array<Google::Apis::ComputeV1::Operation>]
        attr_accessor :operations
      
        # [Output Only] Informational warning which replaces the list of operations
        # when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::OperationsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @operations = args[:operations] if args.key?(:operations)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning which replaces the list of operations
        # when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::OperationsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class OrganizationSecurityPoliciesListAssociationsResponse
        include Google::Apis::Core::Hashable
      
        # A list of associations.
        # Corresponds to the JSON property `associations`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyAssociation>]
        attr_accessor :associations
      
        # Output only. [Output Only] Type of securityPolicy associations. Alwayscompute#
        # organizationSecurityPoliciesListAssociations for lists
        # of securityPolicy associations.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @associations = args[:associations] if args.key?(:associations)
          @kind = args[:kind] if args.key?(:kind)
        end
      end
      
      # Settings controlling the eviction of unhealthy hosts from the load balancing
      # pool for the backend service.
      class OutlierDetection
        include Google::Apis::Core::Hashable
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `baseEjectionTime`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :base_ejection_time
      
        # Number of consecutive errors before a backend endpoint is ejected from the
        # load balancing pool. When the backend endpoint is accessed over HTTP, a 5xx
        # return code qualifies as an error. Defaults to 5.
        # Corresponds to the JSON property `consecutiveErrors`
        # @return [Fixnum]
        attr_accessor :consecutive_errors
      
        # The number of consecutive gateway failures (502, 503, 504 status or
        # connection errors that are mapped to one of those status codes) before a
        # consecutive gateway failure ejection occurs. Defaults to 3.
        # Corresponds to the JSON property `consecutiveGatewayFailure`
        # @return [Fixnum]
        attr_accessor :consecutive_gateway_failure
      
        # The percentage chance that a backend endpoint will be ejected when an
        # outlier status is detected through consecutive 5xx. This setting can be
        # used to disable ejection or to ramp it up slowly. Defaults to 0.
        # Corresponds to the JSON property `enforcingConsecutiveErrors`
        # @return [Fixnum]
        attr_accessor :enforcing_consecutive_errors
      
        # The percentage chance that a backend endpoint will be ejected when an
        # outlier status is detected through consecutive gateway failures. This
        # setting can be used to disable ejection or to ramp it up slowly. Defaults
        # to 100.
        # Corresponds to the JSON property `enforcingConsecutiveGatewayFailure`
        # @return [Fixnum]
        attr_accessor :enforcing_consecutive_gateway_failure
      
        # The percentage chance that a backend endpoint will be ejected when an
        # outlier status is detected through success rate statistics. This setting
        # can be used to disable ejection or to ramp it up slowly. Defaults to 100.
        # Not supported when the backend service uses Serverless NEG.
        # Corresponds to the JSON property `enforcingSuccessRate`
        # @return [Fixnum]
        attr_accessor :enforcing_success_rate
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `interval`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :interval
      
        # Maximum percentage of backend endpoints in the load balancing pool for the
        # backend service that can be ejected if the ejection conditions are met.
        # Defaults to 50%.
        # Corresponds to the JSON property `maxEjectionPercent`
        # @return [Fixnum]
        attr_accessor :max_ejection_percent
      
        # The number of backend endpoints in the load balancing pool that must have
        # enough request volume to detect success rate outliers. If the number of
        # backend endpoints is fewer than this setting, outlier detection via success
        # rate statistics is not performed for any backend endpoint in the load
        # balancing pool. Defaults to 5.
        # Not supported when the backend service uses Serverless NEG.
        # Corresponds to the JSON property `successRateMinimumHosts`
        # @return [Fixnum]
        attr_accessor :success_rate_minimum_hosts
      
        # The minimum number of total requests that must be collected in one interval
        # (as defined by the interval duration above) to include this backend
        # endpoint in success rate based outlier detection. If the volume is lower
        # than this setting, outlier detection via success rate statistics is not
        # performed for that backend endpoint. Defaults to 100.
        # Not supported when the backend service uses Serverless NEG.
        # Corresponds to the JSON property `successRateRequestVolume`
        # @return [Fixnum]
        attr_accessor :success_rate_request_volume
      
        # This factor is used to determine the ejection threshold for success rate
        # outlier ejection. The ejection threshold is the difference between the mean
        # success rate, and the product of this factor and the standard deviation of
        # the mean success rate: mean - (stdev * successRateStdevFactor). This factor
        # is divided by a thousand to get a double. That is, if the desired factor
        # is 1.9, the runtime value should be 1900. Defaults to 1900.
        # Not supported when the backend service uses Serverless NEG.
        # Corresponds to the JSON property `successRateStdevFactor`
        # @return [Fixnum]
        attr_accessor :success_rate_stdev_factor
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @base_ejection_time = args[:base_ejection_time] if args.key?(:base_ejection_time)
          @consecutive_errors = args[:consecutive_errors] if args.key?(:consecutive_errors)
          @consecutive_gateway_failure = args[:consecutive_gateway_failure] if args.key?(:consecutive_gateway_failure)
          @enforcing_consecutive_errors = args[:enforcing_consecutive_errors] if args.key?(:enforcing_consecutive_errors)
          @enforcing_consecutive_gateway_failure = args[:enforcing_consecutive_gateway_failure] if args.key?(:enforcing_consecutive_gateway_failure)
          @enforcing_success_rate = args[:enforcing_success_rate] if args.key?(:enforcing_success_rate)
          @interval = args[:interval] if args.key?(:interval)
          @max_ejection_percent = args[:max_ejection_percent] if args.key?(:max_ejection_percent)
          @success_rate_minimum_hosts = args[:success_rate_minimum_hosts] if args.key?(:success_rate_minimum_hosts)
          @success_rate_request_volume = args[:success_rate_request_volume] if args.key?(:success_rate_request_volume)
          @success_rate_stdev_factor = args[:success_rate_stdev_factor] if args.key?(:success_rate_stdev_factor)
        end
      end
      
      # Next free: 7
      class PacketIntervals
        include Google::Apis::Core::Hashable
      
        # Average observed inter-packet interval in milliseconds.
        # Corresponds to the JSON property `avgMs`
        # @return [Fixnum]
        attr_accessor :avg_ms
      
        # From how long ago in the past these intervals were observed.
        # Corresponds to the JSON property `duration`
        # @return [String]
        attr_accessor :duration
      
        # Maximum observed inter-packet interval in milliseconds.
        # Corresponds to the JSON property `maxMs`
        # @return [Fixnum]
        attr_accessor :max_ms
      
        # Minimum observed inter-packet interval in milliseconds.
        # Corresponds to the JSON property `minMs`
        # @return [Fixnum]
        attr_accessor :min_ms
      
        # Number of inter-packet intervals from which these statistics were derived.
        # Corresponds to the JSON property `numIntervals`
        # @return [Fixnum]
        attr_accessor :num_intervals
      
        # The type of packets for which inter-packet intervals were computed.
        # 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)
          @avg_ms = args[:avg_ms] if args.key?(:avg_ms)
          @duration = args[:duration] if args.key?(:duration)
          @max_ms = args[:max_ms] if args.key?(:max_ms)
          @min_ms = args[:min_ms] if args.key?(:min_ms)
          @num_intervals = args[:num_intervals] if args.key?(:num_intervals)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # Represents a Packet Mirroring resource.
      # Packet Mirroring clones the traffic of specified instances in your Virtual
      # Private Cloud (VPC) network and forwards it to a collector destination,
      # such as an instance group of an internal TCP/UDP load balancer, for analysis
      # or examination.
      # For more information about setting up Packet Mirroring, seeUsing Packet
      # Mirroring.
      class PacketMirroring
        include Google::Apis::Core::Hashable
      
        # The Forwarding Rule resource of typeloadBalancingScheme=INTERNAL that will be
        # used as collector
        # for mirrored traffic.
        # The specified forwarding rule must have isMirroringCollector
        # set to true.
        # Corresponds to the JSON property `collectorIlb`
        # @return [Google::Apis::ComputeV1::PacketMirroringForwardingRuleInfo]
        attr_accessor :collector_ilb
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Indicates whether or not this packet mirroring takes effect.
        # If set to FALSE, this packet mirroring policy will not be enforced on the
        # network.
        # The default is TRUE.
        # Corresponds to the JSON property `enable`
        # @return [String]
        attr_accessor :enable
      
        # Filter for mirrored traffic. If unspecified, all IPv4 traffic is mirrored.
        # Corresponds to the JSON property `filter`
        # @return [Google::Apis::ComputeV1::PacketMirroringFilter]
        attr_accessor :filter
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#packetMirroring
        # for packet mirrorings.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # PacketMirroring mirroredResourceInfos.
        # MirroredResourceInfo specifies a set of mirrored VM instances, subnetworks
        # and/or tags for which traffic from/to all VM instances will be mirrored.
        # Corresponds to the JSON property `mirroredResources`
        # @return [Google::Apis::ComputeV1::PacketMirroringMirroredResourceInfo]
        attr_accessor :mirrored_resources
      
        # Name of the resource; provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Specifies the mirrored VPC network. Only packets in this network will be
        # mirrored. All mirrored VMs should have a NIC in the given network.
        # All mirrored subnetworks should belong to the given network.
        # Corresponds to the JSON property `network`
        # @return [Google::Apis::ComputeV1::PacketMirroringNetworkInfo]
        attr_accessor :network
      
        # The priority of applying this configuration. Priority is used to break ties
        # in cases where there is more than one matching rule. In the case of two
        # rules that apply for a given Instance, the one with the lowest-numbered
        # priority value wins.
        # Default value is 1000. Valid range is 0 through 65535.
        # Corresponds to the JSON property `priority`
        # @return [Fixnum]
        attr_accessor :priority
      
        # [Output Only] URI of the region where the packetMirroring resides.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @collector_ilb = args[:collector_ilb] if args.key?(:collector_ilb)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @enable = args[:enable] if args.key?(:enable)
          @filter = args[:filter] if args.key?(:filter)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @mirrored_resources = args[:mirrored_resources] if args.key?(:mirrored_resources)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @priority = args[:priority] if args.key?(:priority)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
        end
      end
      
      # Contains a list of packetMirrorings.
      class PacketMirroringAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of PacketMirroring resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::PacketMirroringsScopedList>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::PacketMirroringAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::PacketMirroringAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class PacketMirroringFilter
        include Google::Apis::Core::Hashable
      
        # Protocols that apply as filter on mirrored traffic.
        # If no protocols are specified, all traffic that matches the specified
        # CIDR ranges is mirrored.
        # If neither cidrRanges nor IPProtocols is specified, all IPv4 traffic is
        # mirrored.
        # Corresponds to the JSON property `IPProtocols`
        # @return [Array<String>]
        attr_accessor :ip_protocols
      
        # One or more IPv4 or IPv6 CIDR ranges that apply as filters on the source
        # (ingress) or destination (egress) IP in the IP header. If no ranges are
        # specified, all IPv4 traffic that matches the specified IPProtocols is
        # mirrored. If neither cidrRanges nor IPProtocols is specified, all IPv4
        # traffic is mirrored. To mirror all IPv4 and IPv6 traffic, use
        # "0.0.0.0/0,::/0".
        # Corresponds to the JSON property `cidrRanges`
        # @return [Array<String>]
        attr_accessor :cidr_ranges
      
        # Direction of traffic to mirror, either INGRESS, EGRESS, or BOTH.
        # The default is BOTH.
        # Corresponds to the JSON property `direction`
        # @return [String]
        attr_accessor :direction
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ip_protocols = args[:ip_protocols] if args.key?(:ip_protocols)
          @cidr_ranges = args[:cidr_ranges] if args.key?(:cidr_ranges)
          @direction = args[:direction] if args.key?(:direction)
        end
      end
      
      # 
      class PacketMirroringForwardingRuleInfo
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the forwarding rule; defined
        # by the
        # server.
        # Corresponds to the JSON property `canonicalUrl`
        # @return [String]
        attr_accessor :canonical_url
      
        # Resource URL to the forwarding rule representing the ILB
        # configured as destination of the mirrored traffic.
        # 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)
          @canonical_url = args[:canonical_url] if args.key?(:canonical_url)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # Contains a list of PacketMirroring resources.
      class PacketMirroringList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of PacketMirroring resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::PacketMirroring>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#packetMirroring
        # for packetMirrorings.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::PacketMirroringList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::PacketMirroringList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class PacketMirroringMirroredResourceInfo
        include Google::Apis::Core::Hashable
      
        # A set of virtual machine instances that are being mirrored.
        # They must live in zones contained in the same region as this
        # packetMirroring.
        # Note that this config will apply only to those network interfaces of the
        # Instances that belong to the network specified in this packetMirroring.
        # You may specify a maximum of 50 Instances.
        # Corresponds to the JSON property `instances`
        # @return [Array<Google::Apis::ComputeV1::PacketMirroringMirroredResourceInfoInstanceInfo>]
        attr_accessor :instances
      
        # A set of subnetworks for which traffic from/to all VM instances will be
        # mirrored. They must live in the same region as this packetMirroring.
        # You may specify a maximum of 5 subnetworks.
        # Corresponds to the JSON property `subnetworks`
        # @return [Array<Google::Apis::ComputeV1::PacketMirroringMirroredResourceInfoSubnetInfo>]
        attr_accessor :subnetworks
      
        # A set of mirrored tags. Traffic from/to all VM instances that have one or
        # more of these tags will be mirrored.
        # Corresponds to the JSON property `tags`
        # @return [Array<String>]
        attr_accessor :tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instances = args[:instances] if args.key?(:instances)
          @subnetworks = args[:subnetworks] if args.key?(:subnetworks)
          @tags = args[:tags] if args.key?(:tags)
        end
      end
      
      # 
      class PacketMirroringMirroredResourceInfoInstanceInfo
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the instance; defined by the
        # server.
        # Corresponds to the JSON property `canonicalUrl`
        # @return [String]
        attr_accessor :canonical_url
      
        # Resource URL to the virtual machine instance which is being mirrored.
        # 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)
          @canonical_url = args[:canonical_url] if args.key?(:canonical_url)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # 
      class PacketMirroringMirroredResourceInfoSubnetInfo
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the subnetwork; defined by
        # the
        # server.
        # Corresponds to the JSON property `canonicalUrl`
        # @return [String]
        attr_accessor :canonical_url
      
        # Resource URL to the subnetwork for which
        # traffic from/to all VM instances will be mirrored.
        # 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)
          @canonical_url = args[:canonical_url] if args.key?(:canonical_url)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # 
      class PacketMirroringNetworkInfo
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the network; defined by the
        # server.
        # Corresponds to the JSON property `canonicalUrl`
        # @return [String]
        attr_accessor :canonical_url
      
        # URL of the network resource.
        # 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)
          @canonical_url = args[:canonical_url] if args.key?(:canonical_url)
          @url = args[:url] if args.key?(:url)
        end
      end
      
      # 
      class PacketMirroringsScopedList
        include Google::Apis::Core::Hashable
      
        # A list of packetMirrorings contained in this scope.
        # Corresponds to the JSON property `packetMirrorings`
        # @return [Array<Google::Apis::ComputeV1::PacketMirroring>]
        attr_accessor :packet_mirrorings
      
        # Informational warning which replaces the list of packetMirrorings when the
        # list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::PacketMirroringsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @packet_mirrorings = args[:packet_mirrorings] if args.key?(:packet_mirrorings)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of packetMirrorings when the
        # list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::PacketMirroringsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # A matcher for the path portion of the URL. The BackendService
      # from the longest-matched rule will serve the URL. If no rule was matched, the
      # default service is used.
      class PathMatcher
        include Google::Apis::Core::Hashable
      
        # Specifies the custom error response policy that must be applied when the
        # backend service or backend bucket responds with an error.
        # Corresponds to the JSON property `defaultCustomErrorResponsePolicy`
        # @return [Google::Apis::ComputeV1::CustomErrorResponsePolicy]
        attr_accessor :default_custom_error_response_policy
      
        # defaultRouteAction takes effect when none of the
        # pathRules or routeRules match. The load balancer
        # performs advanced routing actions, such as URL rewrites and
        # header transformations, before forwarding the request to the
        # selected backend.
        # Only one of defaultUrlRedirect, defaultService
        # or defaultRouteAction.weightedBackendService can be set.
        # URL maps for classic Application Load Balancers only support
        # the urlRewrite action within a path matcher'sdefaultRouteAction.
        # Corresponds to the JSON property `defaultRouteAction`
        # @return [Google::Apis::ComputeV1::HttpRouteAction]
        attr_accessor :default_route_action
      
        # The full or partial URL to the BackendService resource. This
        # URL is used if none of the pathRules orrouteRules defined by this PathMatcher
        # are
        # matched. For example, the
        # following are all valid URLs to a BackendService resource:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/global/
        # backendServices/backendService
        # - compute/v1/projects/project/global/backendServices/backendService
        # - global/backendServices/backendService
        # If defaultRouteAction is also specified, advanced
        # routing actions, such as URL rewrites, take effect before sending the
        # request to the backend.
        # Only one of defaultUrlRedirect, defaultService
        # or defaultRouteAction.weightedBackendService can be set.
        # Authorization requires one or more of the following Google IAM permissions on
        # the
        # specified resource default_service:
        # 
        # 
        # - compute.backendBuckets.use
        # - compute.backendServices.use
        # Corresponds to the JSON property `defaultService`
        # @return [String]
        attr_accessor :default_service
      
        # Specifies settings for an HTTP redirect.
        # Corresponds to the JSON property `defaultUrlRedirect`
        # @return [Google::Apis::ComputeV1::HttpRedirectAction]
        attr_accessor :default_url_redirect
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # The request and response header transformations that take effect before
        # the request is passed along to the selected backendService.
        # Corresponds to the JSON property `headerAction`
        # @return [Google::Apis::ComputeV1::HttpHeaderAction]
        attr_accessor :header_action
      
        # The name to which this PathMatcher is referred by theHostRule.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The list of path rules. Use this list instead of routeRules
        # when routing based on simple path matching is all that's required. A path
        # rule can only include a wildcard character (*) after a
        # forward slash character ("/").
        # The order by which path rules are specified does not matter.
        # Matches are always done on the longest-path-first basis.
        # For example: a pathRule with a path /a/b/c/* will match
        # before /a/b/* irrespective of the order in which those paths appear in this
        # list.
        # Within a given pathMatcher, only one ofpathRules or routeRules must be set.
        # Corresponds to the JSON property `pathRules`
        # @return [Array<Google::Apis::ComputeV1::PathRule>]
        attr_accessor :path_rules
      
        # The list of HTTP route rules. Use this list instead ofpathRules when advanced
        # route matching and routing actions are
        # desired. routeRules are evaluated in order of priority, from
        # the lowest to highest number.
        # Within a given pathMatcher, you can set only one ofpathRules or routeRules.
        # Corresponds to the JSON property `routeRules`
        # @return [Array<Google::Apis::ComputeV1::HttpRouteRule>]
        attr_accessor :route_rules
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @default_custom_error_response_policy = args[:default_custom_error_response_policy] if args.key?(:default_custom_error_response_policy)
          @default_route_action = args[:default_route_action] if args.key?(:default_route_action)
          @default_service = args[:default_service] if args.key?(:default_service)
          @default_url_redirect = args[:default_url_redirect] if args.key?(:default_url_redirect)
          @description = args[:description] if args.key?(:description)
          @header_action = args[:header_action] if args.key?(:header_action)
          @name = args[:name] if args.key?(:name)
          @path_rules = args[:path_rules] if args.key?(:path_rules)
          @route_rules = args[:route_rules] if args.key?(:route_rules)
        end
      end
      
      # A path-matching rule for a URL. If matched, will use the
      # specifiedBackendService to handle the traffic arriving at this URL.
      class PathRule
        include Google::Apis::Core::Hashable
      
        # Specifies the custom error response policy that must be applied when the
        # backend service or backend bucket responds with an error.
        # Corresponds to the JSON property `customErrorResponsePolicy`
        # @return [Google::Apis::ComputeV1::CustomErrorResponsePolicy]
        attr_accessor :custom_error_response_policy
      
        # The list of path patterns to match. Each must start with /
        # and the only place a * is allowed is at the end following
        # a /.  The string fed to the path matcher does not include
        # any text after the first ? or #, and
        # those chars are not allowed here.
        # Corresponds to the JSON property `paths`
        # @return [Array<String>]
        attr_accessor :paths
      
        # In response to a matching path, the load balancer
        # performs advanced routing actions, such as URL rewrites and header
        # transformations, before forwarding the request to the selected
        # backend.
        # Only one of urlRedirect, service orrouteAction.weightedBackendService can be
        # set.
        # URL maps for classic Application Load Balancers only support
        # the urlRewrite action within a path rule'srouteAction.
        # Corresponds to the JSON property `routeAction`
        # @return [Google::Apis::ComputeV1::HttpRouteAction]
        attr_accessor :route_action
      
        # The full or partial URL of the backend service resource to which traffic
        # is directed if this rule is matched. If routeAction is
        # also specified, advanced routing actions, such as URL rewrites,
        # take effect before sending the request to the backend.
        # Only one of urlRedirect, service orrouteAction.weightedBackendService can be
        # set.
        # Corresponds to the JSON property `service`
        # @return [String]
        attr_accessor :service
      
        # Specifies settings for an HTTP redirect.
        # Corresponds to the JSON property `urlRedirect`
        # @return [Google::Apis::ComputeV1::HttpRedirectAction]
        attr_accessor :url_redirect
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @custom_error_response_policy = args[:custom_error_response_policy] if args.key?(:custom_error_response_policy)
          @paths = args[:paths] if args.key?(:paths)
          @route_action = args[:route_action] if args.key?(:route_action)
          @service = args[:service] if args.key?(:service)
          @url_redirect = args[:url_redirect] if args.key?(:url_redirect)
        end
      end
      
      # 
      class PerInstanceConfig
        include Google::Apis::Core::Hashable
      
        # Fingerprint of this per-instance config. This field can be used in
        # optimistic locking. It is ignored when inserting a per-instance
        # config. An up-to-date fingerprint must be provided in order to update an
        # existing per-instance configuration or the field needs to be unset.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # The name of a per-instance configuration and its corresponding instance.
        # Serves as a merge key during UpdatePerInstanceConfigs
        # operations, that is, if a per-instance configuration with the same name
        # exists then it will be updated, otherwise a new one will be created for the
        # VM instance with the same name. An attempt to create a per-instance
        # configuration for a VM instance that either doesn't exist or is not part
        # of the group will result in an error.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Preserved state for a given instance.
        # Corresponds to the JSON property `preservedState`
        # @return [Google::Apis::ComputeV1::PreservedState]
        attr_accessor :preserved_state
      
        # The status of applying this per-instance configuration on the corresponding
        # managed instance.
        # 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)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @name = args[:name] if args.key?(:name)
          @preserved_state = args[:preserved_state] if args.key?(:preserved_state)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # An Identity and Access Management (IAM) policy, which specifies access
      # controls for Google Cloud resources.
      # A `Policy` is a collection of `bindings`. A `binding` binds one or more
      # `members`, or principals, to a single `role`. Principals can be user
      # accounts, service accounts, Google groups, and domains (such as G Suite). A
      # `role` is a named list of permissions; each `role` can be an IAM predefined
      # role or a user-created custom role.
      # For some types of Google Cloud resources, a `binding` can also specify a
      # `condition`, which is a logical expression that allows access to a resource
      # only if the expression evaluates to `true`. A condition can add constraints
      # based on attributes of the request, the resource, or both. To learn which
      # resources support conditions in their IAM policies, see the
      # [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-
      # policies).
      # **JSON example:**
      # ```
      # `
      # "bindings": [
      # `
      # "role": "roles/resourcemanager.organizationAdmin",
      # "members": [
      # "user:mike@example.com",
      # "group:admins@example.com",
      # "domain:google.com",
      # "serviceAccount:my-project-id@appspot.gserviceaccount.com"
      # ]
      # `,
      # `
      # "role": "roles/resourcemanager.organizationViewer",
      # "members": [
      # "user:eve@example.com"
      # ],
      # "condition": `
      # "title": "expirable access",
      # "description": "Does not grant access after Sep 2020",
      # "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')
      # ",
      # `
      # `
      # ],
      # "etag": "BwWWja0YfJA=",
      # "version": 3
      # `
      # ```
      # **YAML example:**
      # ```
      # bindings:
      # - members:
      # - user:mike@example.com
      # - group:admins@example.com
      # - domain:google.com
      # - serviceAccount:my-project-id@appspot.gserviceaccount.com
      # role: roles/resourcemanager.organizationAdmin
      # - members:
      # - user:eve@example.com
      # role: roles/resourcemanager.organizationViewer
      # condition:
      # title: expirable access
      # description: Does not grant access after Sep 2020
      # expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
      # etag: BwWWja0YfJA=
      # version: 3
      # ```
      # For a description of IAM and its features, see the
      # [IAM documentation](https://cloud.google.com/iam/docs/).
      class Policy
        include Google::Apis::Core::Hashable
      
        # Specifies cloud audit logging configuration for this policy.
        # Corresponds to the JSON property `auditConfigs`
        # @return [Array<Google::Apis::ComputeV1::AuditConfig>]
        attr_accessor :audit_configs
      
        # Associates a list of `members`, or principals, with a `role`. Optionally,
        # may specify a `condition` that determines how and when the `bindings` are
        # applied. Each of the `bindings` must contain at least one principal.
        # The `bindings` in a `Policy` can refer to up to 1,500 principals; up to 250
        # of these principals can be Google groups. Each occurrence of a principal
        # counts towards these limits. For example, if the `bindings` grant 50
        # different roles to `user:alice@example.com`, and not to any other
        # principal, then you can add another 1,450 principals to the `bindings` in
        # the `Policy`.
        # Corresponds to the JSON property `bindings`
        # @return [Array<Google::Apis::ComputeV1::Binding>]
        attr_accessor :bindings
      
        # `etag` is used for optimistic concurrency control as a way to help
        # prevent simultaneous updates of a policy from overwriting each other.
        # It is strongly suggested that systems make use of the `etag` in the
        # read-modify-write cycle to perform policy updates in order to avoid race
        # conditions: An `etag` is returned in the response to `getIamPolicy`, and
        # systems are expected to put that etag in the request to `setIamPolicy` to
        # ensure that their change will be applied to the same version of the policy.
        # **Important:** If you use IAM Conditions, you must include the `etag` field
        # whenever you call `setIamPolicy`. If you omit this field, then IAM allows
        # you to overwrite a version `3` policy with a version `1` policy, and all of
        # the conditions in the version `3` policy are lost.
        # Corresponds to the JSON property `etag`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :etag
      
        # Specifies the format of the policy.
        # Valid values are `0`, `1`, and `3`. Requests that specify an invalid value
        # are rejected.
        # Any operation that affects conditional role bindings must specify version
        # `3`. This requirement applies to the following operations:
        # * Getting a policy that includes a conditional role binding
        # * Adding a conditional role binding to a policy
        # * Changing a conditional role binding in a policy
        # * Removing any role binding, with or without a condition, from a policy
        # that includes conditions
        # **Important:** If you use IAM Conditions, you must include the `etag` field
        # whenever you call `setIamPolicy`. If you omit this field, then IAM allows
        # you to overwrite a version `3` policy with a version `1` policy, and all of
        # the conditions in the version `3` policy are lost.
        # If a policy does not include any conditions, operations on that policy may
        # specify any valid version or leave the field unset.
        # To learn which resources support conditions in their IAM policies, see the
        # [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-
        # policies).
        # Corresponds to the JSON property `version`
        # @return [Fixnum]
        attr_accessor :version
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @audit_configs = args[:audit_configs] if args.key?(:audit_configs)
          @bindings = args[:bindings] if args.key?(:bindings)
          @etag = args[:etag] if args.key?(:etag)
          @version = args[:version] if args.key?(:version)
        end
      end
      
      # 
      class PreconfiguredWafSet
        include Google::Apis::Core::Hashable
      
        # List of entities that are currently supported for WAF rules.
        # Corresponds to the JSON property `expressionSets`
        # @return [Array<Google::Apis::ComputeV1::WafExpressionSet>]
        attr_accessor :expression_sets
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @expression_sets = args[:expression_sets] if args.key?(:expression_sets)
        end
      end
      
      # Preserved state for a given instance.
      class PreservedState
        include Google::Apis::Core::Hashable
      
        # Preserved disks defined for this instance.
        # This map is keyed with the device names of the disks.
        # Corresponds to the JSON property `disks`
        # @return [Hash<String,Google::Apis::ComputeV1::PreservedStatePreservedDisk>]
        attr_accessor :disks
      
        # Preserved external IPs defined for this instance.
        # This map is keyed with the name of the network interface.
        # Corresponds to the JSON property `externalIPs`
        # @return [Hash<String,Google::Apis::ComputeV1::PreservedStatePreservedNetworkIp>]
        attr_accessor :external_i_ps
      
        # Preserved internal IPs defined for this instance.
        # This map is keyed with the name of the network interface.
        # Corresponds to the JSON property `internalIPs`
        # @return [Hash<String,Google::Apis::ComputeV1::PreservedStatePreservedNetworkIp>]
        attr_accessor :internal_i_ps
      
        # Preserved metadata defined for this instance.
        # Corresponds to the JSON property `metadata`
        # @return [Hash<String,String>]
        attr_accessor :metadata
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disks = args[:disks] if args.key?(:disks)
          @external_i_ps = args[:external_i_ps] if args.key?(:external_i_ps)
          @internal_i_ps = args[:internal_i_ps] if args.key?(:internal_i_ps)
          @metadata = args[:metadata] if args.key?(:metadata)
        end
      end
      
      # 
      class PreservedStatePreservedDisk
        include Google::Apis::Core::Hashable
      
        # These stateful disks will never be deleted during autohealing,
        # update, instance recreate operations. This flag is used to configure
        # if the disk should be deleted after it is no longer used by the group,
        # e.g. when the given instance or the whole MIG is deleted.
        # Note: disks attached in READ_ONLY mode cannot be
        # auto-deleted.
        # Corresponds to the JSON property `autoDelete`
        # @return [String]
        attr_accessor :auto_delete
      
        # The mode in which to attach this disk, either READ_WRITE orREAD_ONLY. If not
        # specified, the default is to attach the
        # disk in READ_WRITE mode.
        # Corresponds to the JSON property `mode`
        # @return [String]
        attr_accessor :mode
      
        # The URL of the disk resource that is stateful and should be attached
        # to the VM instance.
        # Corresponds to the JSON property `source`
        # @return [String]
        attr_accessor :source
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auto_delete = args[:auto_delete] if args.key?(:auto_delete)
          @mode = args[:mode] if args.key?(:mode)
          @source = args[:source] if args.key?(:source)
        end
      end
      
      # 
      class PreservedStatePreservedNetworkIp
        include Google::Apis::Core::Hashable
      
        # These stateful IPs will never be released during autohealing,
        # update or VM instance recreate operations.
        # This flag is used to configure if the IP reservation should be deleted
        # after it is no longer used by the group, e.g. when the given instance
        # or the whole group is deleted.
        # Corresponds to the JSON property `autoDelete`
        # @return [String]
        attr_accessor :auto_delete
      
        # Ip address representation
        # Corresponds to the JSON property `ipAddress`
        # @return [Google::Apis::ComputeV1::PreservedStatePreservedNetworkIpIpAddress]
        attr_accessor :ip_address
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auto_delete = args[:auto_delete] if args.key?(:auto_delete)
          @ip_address = args[:ip_address] if args.key?(:ip_address)
        end
      end
      
      # 
      class PreservedStatePreservedNetworkIpIpAddress
        include Google::Apis::Core::Hashable
      
        # The URL of the reservation for this IP address.
        # Corresponds to the JSON property `address`
        # @return [String]
        attr_accessor :address
      
        # An IPv4 internal network address to assign to the instance for this
        # network interface.
        # Corresponds to the JSON property `literal`
        # @return [String]
        attr_accessor :literal
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @address = args[:address] if args.key?(:address)
          @literal = args[:literal] if args.key?(:literal)
        end
      end
      
      # Represents a single Google Compute Engine preview feature.
      class PreviewFeature
        include Google::Apis::Core::Hashable
      
        # Specifies whether the feature is enabled or disabled.
        # Corresponds to the JSON property `activationStatus`
        # @return [String]
        attr_accessor :activation_status
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Output only. [Output Only] Description of the feature.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output only] The type of the feature. Always "compute#
        # previewFeature" for
        # preview features.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the feature.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Represents the rollout operation
        # Corresponds to the JSON property `rolloutOperation`
        # @return [Google::Apis::ComputeV1::PreviewFeatureRolloutOperation]
        attr_accessor :rollout_operation
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] The status of the feature.
        # Corresponds to the JSON property `status`
        # @return [Google::Apis::ComputeV1::PreviewFeatureStatus]
        attr_accessor :status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @activation_status = args[:activation_status] if args.key?(:activation_status)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @rollout_operation = args[:rollout_operation] if args.key?(:rollout_operation)
          @self_link = args[:self_link] if args.key?(:self_link)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # 
      class PreviewFeatureList
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of PreviewFeature resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::PreviewFeature>]
        attr_accessor :items
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # end_interface: MixerListResponseWithEtagBuilder
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::PreviewFeatureList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::PreviewFeatureList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents the rollout operation
      class PreviewFeatureRolloutOperation
        include Google::Apis::Core::Hashable
      
        # Represents the input for the rollout operation.
        # Corresponds to the JSON property `rolloutInput`
        # @return [Google::Apis::ComputeV1::PreviewFeatureRolloutOperationRolloutInput]
        attr_accessor :rollout_input
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @rollout_input = args[:rollout_input] if args.key?(:rollout_input)
        end
      end
      
      # Represents the input for the rollout operation.
      class PreviewFeatureRolloutOperationRolloutInput
        include Google::Apis::Core::Hashable
      
        # The name of the rollout plan
        # Ex.
        # organizations//locations/global/rolloutPlans/
        # Ex.
        # folders//locations/global/rolloutPlans/
        # Ex.
        # projects//locations/global/rolloutPlans/.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Predefined rollout plan.
        # Corresponds to the JSON property `predefinedRolloutPlan`
        # @return [String]
        attr_accessor :predefined_rollout_plan
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @predefined_rollout_plan = args[:predefined_rollout_plan] if args.key?(:predefined_rollout_plan)
        end
      end
      
      # [Output Only] The status of the feature.
      class PreviewFeatureStatus
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The description of the feature.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] Link to the public documentation for the feature.
        # Corresponds to the JSON property `helpLink`
        # @return [String]
        attr_accessor :help_link
      
        # [Output Only] The release status of the feature.
        # Corresponds to the JSON property `releaseStatus`
        # @return [Google::Apis::ComputeV1::PreviewFeatureStatusReleaseStatus]
        attr_accessor :release_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @description = args[:description] if args.key?(:description)
          @help_link = args[:help_link] if args.key?(:help_link)
          @release_status = args[:release_status] if args.key?(:release_status)
        end
      end
      
      # [Output Only] The release status of the feature.
      class PreviewFeatureStatusReleaseStatus
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The stage of the feature.
        # Corresponds to the JSON property `stage`
        # @return [String]
        attr_accessor :stage
      
        # 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 `updateDate`
        # @return [Google::Apis::ComputeV1::Date]
        attr_accessor :update_date
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @stage = args[:stage] if args.key?(:stage)
          @update_date = args[:update_date] if args.key?(:update_date)
        end
      end
      
      # Represents a Project resource.
      # A project is used to organize resources in a Google Cloud Platform
      # environment. For more information, read about the
      # Resource Hierarchy.
      class Project
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The Cloud Armor tier for this project. It can be
        # one of the
        # following values: CA_STANDARD,CA_ENTERPRISE_PAYGO.
        # If this field is not specified, it is assumed to beCA_STANDARD.
        # Corresponds to the JSON property `cloudArmorTier`
        # @return [String]
        attr_accessor :cloud_armor_tier
      
        # A metadata key/value entry.
        # Corresponds to the JSON property `commonInstanceMetadata`
        # @return [Google::Apis::ComputeV1::Metadata]
        attr_accessor :common_instance_metadata
      
        # [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # This signifies the default network tier used for configuring resources of
        # the project and can only take the following values:PREMIUM, STANDARD.
        # Initially the default network
        # tier is PREMIUM.
        # Corresponds to the JSON property `defaultNetworkTier`
        # @return [String]
        attr_accessor :default_network_tier
      
        # [Output Only] Default service account used by VMs running in this project.
        # Corresponds to the JSON property `defaultServiceAccount`
        # @return [String]
        attr_accessor :default_service_account
      
        # An optional textual description of the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # An optional list of restricted features enabled for use on this project.
        # Corresponds to the JSON property `enabledFeatures`
        # @return [Array<String>]
        attr_accessor :enabled_features
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server. This is *not* the project ID, and is
        # just a unique ID used by Compute Engine to identify resources.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Always compute#project for
        # projects.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The project ID. For example: my-example-project. Use the
        # project ID to make requests to Compute Engine.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # [Output Only] Quotas assigned to this project.
        # Corresponds to the JSON property `quotas`
        # @return [Array<Google::Apis::ComputeV1::Quota>]
        attr_accessor :quotas
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # The location in Cloud Storage and naming method of the daily usage
        # report. Contains bucket_name and report_name prefix.
        # Corresponds to the JSON property `usageExportLocation`
        # @return [Google::Apis::ComputeV1::UsageExportLocation]
        attr_accessor :usage_export_location
      
        # Output only. [Output Only] Default internal DNS setting used by VMs running in
        # this project.
        # Corresponds to the JSON property `vmDnsSetting`
        # @return [String]
        attr_accessor :vm_dns_setting
      
        # [Output Only] The role this project has in a shared VPC configuration.
        # Currently, only projects with the host role, which is specified by the
        # value HOST, are differentiated.
        # Corresponds to the JSON property `xpnProjectStatus`
        # @return [String]
        attr_accessor :xpn_project_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cloud_armor_tier = args[:cloud_armor_tier] if args.key?(:cloud_armor_tier)
          @common_instance_metadata = args[:common_instance_metadata] if args.key?(:common_instance_metadata)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @default_network_tier = args[:default_network_tier] if args.key?(:default_network_tier)
          @default_service_account = args[:default_service_account] if args.key?(:default_service_account)
          @description = args[:description] if args.key?(:description)
          @enabled_features = args[:enabled_features] if args.key?(:enabled_features)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @quotas = args[:quotas] if args.key?(:quotas)
          @self_link = args[:self_link] if args.key?(:self_link)
          @usage_export_location = args[:usage_export_location] if args.key?(:usage_export_location)
          @vm_dns_setting = args[:vm_dns_setting] if args.key?(:vm_dns_setting)
          @xpn_project_status = args[:xpn_project_status] if args.key?(:xpn_project_status)
        end
      end
      
      # 
      class ProjectsDisableXpnResourceRequest
        include Google::Apis::Core::Hashable
      
        # Service resource (a.k.a service project) ID.
        # Corresponds to the JSON property `xpnResource`
        # @return [Google::Apis::ComputeV1::XpnResourceId]
        attr_accessor :xpn_resource
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @xpn_resource = args[:xpn_resource] if args.key?(:xpn_resource)
        end
      end
      
      # 
      class ProjectsEnableXpnResourceRequest
        include Google::Apis::Core::Hashable
      
        # Service resource (a.k.a service project) ID.
        # Corresponds to the JSON property `xpnResource`
        # @return [Google::Apis::ComputeV1::XpnResourceId]
        attr_accessor :xpn_resource
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @xpn_resource = args[:xpn_resource] if args.key?(:xpn_resource)
        end
      end
      
      # 
      class ProjectsGetXpnResources
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # projectsGetXpnResources for lists of service resources
        # (a.k.a service projects)
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Service resources (a.k.a service projects) attached to this project as
        # their shared VPC host.
        # Corresponds to the JSON property `resources`
        # @return [Array<Google::Apis::ComputeV1::XpnResourceId>]
        attr_accessor :resources
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @resources = args[:resources] if args.key?(:resources)
        end
      end
      
      # 
      class ProjectsListXpnHostsRequest
        include Google::Apis::Core::Hashable
      
        # Optional organization ID managed by Cloud Resource Manager, for which to
        # list shared VPC host projects. If not specified, the organization will be
        # inferred from the project.
        # Corresponds to the JSON property `organization`
        # @return [String]
        attr_accessor :organization
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @organization = args[:organization] if args.key?(:organization)
        end
      end
      
      # 
      class ProjectsSetCloudArmorTierRequest
        include Google::Apis::Core::Hashable
      
        # Managed protection tier to be set.
        # Corresponds to the JSON property `cloudArmorTier`
        # @return [String]
        attr_accessor :cloud_armor_tier
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cloud_armor_tier = args[:cloud_armor_tier] if args.key?(:cloud_armor_tier)
        end
      end
      
      # 
      class ProjectsSetDefaultNetworkTierRequest
        include Google::Apis::Core::Hashable
      
        # Default network tier to be set.
        # Corresponds to the JSON property `networkTier`
        # @return [String]
        attr_accessor :network_tier
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @network_tier = args[:network_tier] if args.key?(:network_tier)
        end
      end
      
      # A public advertised prefix represents an aggregated IP prefix or netblock
      # which customers bring to cloud. The IP prefix is a single unit of route
      # advertisement and is announced globally to the internet.
      class PublicAdvertisedPrefix
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The version of BYOIP API.
        # Corresponds to the JSON property `byoipApiVersion`
        # @return [String]
        attr_accessor :byoip_api_version
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # The address to be used for reverse DNS verification.
        # Corresponds to the JSON property `dnsVerificationIp`
        # @return [String]
        attr_accessor :dns_verification_ip
      
        # Fingerprint of this resource. A hash of the contents stored in this object.
        # This field is used in optimistic locking. This field will be ignored when
        # inserting a new PublicAdvertisedPrefix. An up-to-date
        # fingerprint must be provided in order to update thePublicAdvertisedPrefix,
        # otherwise the request will fail with
        # error 412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a PublicAdvertisedPrefix.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Output only. [Output Only] The unique identifier for the resource type. The
        # server
        # generates this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # The address range, in CIDR format, represented by this public advertised
        # prefix.
        # Corresponds to the JSON property `ipCidrRange`
        # @return [String]
        attr_accessor :ip_cidr_range
      
        # The internet access type for IPv6 Public Advertised Prefixes.
        # Corresponds to the JSON property `ipv6AccessType`
        # @return [String]
        attr_accessor :ipv6_access_type
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # publicAdvertisedPrefix for public advertised prefixes.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Specifies how child public delegated prefix will be scoped. It could
        # be one of following values:
        # 
        # 
        # - `REGIONAL`: The public delegated prefix is regional only. The
        # provisioning will take a few minutes.
        # - `GLOBAL`: The public delegated prefix is global only. The
        # provisioning will take ~4 weeks.
        # - `GLOBAL_AND_REGIONAL` [output only]: The public delegated prefixes is
        # BYOIP V1 legacy prefix. This is output only value and no longer
        # supported in BYOIP V2.
        # Corresponds to the JSON property `pdpScope`
        # @return [String]
        attr_accessor :pdp_scope
      
        # Output only. [Output Only] The list of public delegated prefixes that exist
        # for this
        # public advertised prefix.
        # Corresponds to the JSON property `publicDelegatedPrefixs`
        # @return [Array<Google::Apis::ComputeV1::PublicAdvertisedPrefixPublicDelegatedPrefix>]
        attr_accessor :public_delegated_prefixs
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] The shared secret to be used for reverse DNS verification.
        # Corresponds to the JSON property `sharedSecret`
        # @return [String]
        attr_accessor :shared_secret
      
        # The status of the public advertised prefix. Possible values include:
        # 
        # 
        # - `INITIAL`: RPKI validation is complete.
        # - `PTR_CONFIGURED`: User has configured the PTR.
        # - `VALIDATED`: Reverse DNS lookup is successful.
        # - `REVERSE_DNS_LOOKUP_FAILED`: Reverse DNS lookup failed.
        # - `PREFIX_CONFIGURATION_IN_PROGRESS`: The prefix is being
        # configured.
        # - `PREFIX_CONFIGURATION_COMPLETE`: The prefix is fully configured.
        # - `PREFIX_REMOVAL_IN_PROGRESS`: The prefix is being removed.
        # 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)
          @byoip_api_version = args[:byoip_api_version] if args.key?(:byoip_api_version)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @dns_verification_ip = args[:dns_verification_ip] if args.key?(:dns_verification_ip)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @id = args[:id] if args.key?(:id)
          @ip_cidr_range = args[:ip_cidr_range] if args.key?(:ip_cidr_range)
          @ipv6_access_type = args[:ipv6_access_type] if args.key?(:ipv6_access_type)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @pdp_scope = args[:pdp_scope] if args.key?(:pdp_scope)
          @public_delegated_prefixs = args[:public_delegated_prefixs] if args.key?(:public_delegated_prefixs)
          @self_link = args[:self_link] if args.key?(:self_link)
          @shared_secret = args[:shared_secret] if args.key?(:shared_secret)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # 
      class PublicAdvertisedPrefixList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of PublicAdvertisedPrefix resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::PublicAdvertisedPrefix>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # publicAdvertisedPrefix for public advertised prefixes.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::PublicAdvertisedPrefixList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::PublicAdvertisedPrefixList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a CIDR range which can be used to assign addresses.
      class PublicAdvertisedPrefixPublicDelegatedPrefix
        include Google::Apis::Core::Hashable
      
        # The IP address range of the public delegated prefix
        # Corresponds to the JSON property `ipRange`
        # @return [String]
        attr_accessor :ip_range
      
        # The name of the public delegated prefix
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The project number of the public delegated prefix
        # Corresponds to the JSON property `project`
        # @return [String]
        attr_accessor :project
      
        # The region of the public delegated prefix if it is regional. If absent,
        # the prefix is global.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # The status of the public delegated prefix. Possible values are:
        # INITIALIZING: The public delegated prefix is being initialized and
        # addresses cannot be created yet.
        # ANNOUNCED: The public delegated prefix is active.
        # 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)
          @ip_range = args[:ip_range] if args.key?(:ip_range)
          @name = args[:name] if args.key?(:name)
          @project = args[:project] if args.key?(:project)
          @region = args[:region] if args.key?(:region)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # A PublicDelegatedPrefix resource represents an IP block within a
      # PublicAdvertisedPrefix that is configured within a single cloud scope
      # (global or region). IPs in the block can be allocated to resources within
      # that scope. Public delegated prefixes may be further broken up into
      # smaller IP blocks in the same scope as the parent block.
      class PublicDelegatedPrefix
        include Google::Apis::Core::Hashable
      
        # The allocatable prefix length supported by this public delegated prefix.
        # This field is optional and cannot be set for prefixes in DELEGATION mode.
        # It cannot be set for IPv4 prefixes either, and it always defaults to 32.
        # Corresponds to the JSON property `allocatablePrefixLength`
        # @return [Fixnum]
        attr_accessor :allocatable_prefix_length
      
        # Output only. [Output Only] The version of BYOIP API.
        # Corresponds to the JSON property `byoipApiVersion`
        # @return [String]
        attr_accessor :byoip_api_version
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] Whether this PDP supports enhanced IPv4 allocations.
        # Applicable for IPv4 PDPs only.
        # Corresponds to the JSON property `enableEnhancedIpv4Allocation`
        # @return [Boolean]
        attr_accessor :enable_enhanced_ipv4_allocation
        alias_method :enable_enhanced_ipv4_allocation?, :enable_enhanced_ipv4_allocation
      
        # Fingerprint of this resource. A hash of the contents stored in this object.
        # This field is used in optimistic locking. This field will be ignored when
        # inserting a new PublicDelegatedPrefix. An up-to-date
        # fingerprint must be provided in order to update thePublicDelegatedPrefix,
        # otherwise the request will fail with
        # error 412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a PublicDelegatedPrefix.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Output only. [Output Only] The unique identifier for the resource type. The
        # server
        # generates this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # The IP address range, in CIDR format, represented by this public
        # delegated prefix.
        # Corresponds to the JSON property `ipCidrRange`
        # @return [String]
        attr_accessor :ip_cidr_range
      
        # Output only. [Output Only] The internet access type for IPv6 Public Delegated
        # Prefixes.
        # Inherited from parent prefix.
        # Corresponds to the JSON property `ipv6AccessType`
        # @return [String]
        attr_accessor :ipv6_access_type
      
        # If true, the prefix will be live migrated.
        # Corresponds to the JSON property `isLiveMigration`
        # @return [Boolean]
        attr_accessor :is_live_migration
        alias_method :is_live_migration?, :is_live_migration
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # publicDelegatedPrefix for public delegated prefixes.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The public delegated prefix mode for IPv6 only.
        # Corresponds to the JSON property `mode`
        # @return [String]
        attr_accessor :mode
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The URL of parent prefix. Either PublicAdvertisedPrefix or
        # PublicDelegatedPrefix.
        # Corresponds to the JSON property `parentPrefix`
        # @return [String]
        attr_accessor :parent_prefix
      
        # The list of sub public delegated prefixes that exist for this public
        # delegated prefix.
        # Corresponds to the JSON property `publicDelegatedSubPrefixs`
        # @return [Array<Google::Apis::ComputeV1::PublicDelegatedPrefixPublicDelegatedSubPrefix>]
        attr_accessor :public_delegated_sub_prefixs
      
        # Output only. [Output Only] URL of the region where the public delegated prefix
        # resides.
        # This field applies only to the region resource. You must specify this
        # field as part of the HTTP request URL. It is not settable as a field in
        # the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] The status of the public delegated prefix, which can be one
        # of following values:
        # 
        # 
        # - `INITIALIZING` The public delegated prefix is being initialized and
        # addresses cannot be created yet.
        # - `READY_TO_ANNOUNCE` The public delegated prefix is a live migration
        # prefix and is active.
        # - `ANNOUNCED` The public delegated prefix is announced and ready to
        # use.
        # - `DELETING` The public delegated prefix is being deprovsioned.
        # - `ACTIVE` The public delegated prefix is ready to use.
        # 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)
          @allocatable_prefix_length = args[:allocatable_prefix_length] if args.key?(:allocatable_prefix_length)
          @byoip_api_version = args[:byoip_api_version] if args.key?(:byoip_api_version)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @enable_enhanced_ipv4_allocation = args[:enable_enhanced_ipv4_allocation] if args.key?(:enable_enhanced_ipv4_allocation)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @id = args[:id] if args.key?(:id)
          @ip_cidr_range = args[:ip_cidr_range] if args.key?(:ip_cidr_range)
          @ipv6_access_type = args[:ipv6_access_type] if args.key?(:ipv6_access_type)
          @is_live_migration = args[:is_live_migration] if args.key?(:is_live_migration)
          @kind = args[:kind] if args.key?(:kind)
          @mode = args[:mode] if args.key?(:mode)
          @name = args[:name] if args.key?(:name)
          @parent_prefix = args[:parent_prefix] if args.key?(:parent_prefix)
          @public_delegated_sub_prefixs = args[:public_delegated_sub_prefixs] if args.key?(:public_delegated_sub_prefixs)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # 
      class PublicDelegatedPrefixAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of PublicDelegatedPrefixesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::PublicDelegatedPrefixesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # publicDelegatedPrefixAggregatedList for aggregated
        # lists of public delegated prefixes.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::PublicDelegatedPrefixAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::PublicDelegatedPrefixAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class PublicDelegatedPrefixList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of PublicDelegatedPrefix resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::PublicDelegatedPrefix>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # publicDelegatedPrefixList for public delegated
        # prefixes.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::PublicDelegatedPrefixList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::PublicDelegatedPrefixList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a sub PublicDelegatedPrefix.
      class PublicDelegatedPrefixPublicDelegatedSubPrefix
        include Google::Apis::Core::Hashable
      
        # The allocatable prefix length supported by this PublicDelegatedSubPrefix.
        # Corresponds to the JSON property `allocatablePrefixLength`
        # @return [Fixnum]
        attr_accessor :allocatable_prefix_length
      
        # Name of the project scoping this PublicDelegatedSubPrefix.
        # Corresponds to the JSON property `delegateeProject`
        # @return [String]
        attr_accessor :delegatee_project
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] Whether this PDP supports enhanced IPv4 allocations.
        # Applicable for IPv4 PDPs only.
        # Corresponds to the JSON property `enableEnhancedIpv4Allocation`
        # @return [Boolean]
        attr_accessor :enable_enhanced_ipv4_allocation
        alias_method :enable_enhanced_ipv4_allocation?, :enable_enhanced_ipv4_allocation
      
        # The IP address range, in CIDR format, represented by this sub public
        # delegated prefix.
        # Corresponds to the JSON property `ipCidrRange`
        # @return [String]
        attr_accessor :ip_cidr_range
      
        # Output only. [Output Only] The internet access type for IPv6 Public Delegated
        # Sub
        # Prefixes. Inherited from parent prefix.
        # Corresponds to the JSON property `ipv6AccessType`
        # @return [String]
        attr_accessor :ipv6_access_type
      
        # Whether the sub prefix is delegated to create Address resources in the
        # delegatee project.
        # Corresponds to the JSON property `isAddress`
        # @return [Boolean]
        attr_accessor :is_address
        alias_method :is_address?, :is_address
      
        # The PublicDelegatedSubPrefix mode for IPv6 only.
        # Corresponds to the JSON property `mode`
        # @return [String]
        attr_accessor :mode
      
        # The name of the sub public delegated prefix.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The region of the sub public delegated prefix if it
        # is
        # regional. If absent, the sub prefix is global.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] The status of the sub public delegated prefix.
        # 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)
          @allocatable_prefix_length = args[:allocatable_prefix_length] if args.key?(:allocatable_prefix_length)
          @delegatee_project = args[:delegatee_project] if args.key?(:delegatee_project)
          @description = args[:description] if args.key?(:description)
          @enable_enhanced_ipv4_allocation = args[:enable_enhanced_ipv4_allocation] if args.key?(:enable_enhanced_ipv4_allocation)
          @ip_cidr_range = args[:ip_cidr_range] if args.key?(:ip_cidr_range)
          @ipv6_access_type = args[:ipv6_access_type] if args.key?(:ipv6_access_type)
          @is_address = args[:is_address] if args.key?(:is_address)
          @mode = args[:mode] if args.key?(:mode)
          @name = args[:name] if args.key?(:name)
          @region = args[:region] if args.key?(:region)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # 
      class PublicDelegatedPrefixesScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of PublicDelegatedPrefixes contained in this scope.
        # Corresponds to the JSON property `publicDelegatedPrefixes`
        # @return [Array<Google::Apis::ComputeV1::PublicDelegatedPrefix>]
        attr_accessor :public_delegated_prefixes
      
        # [Output Only] Informational warning which replaces the list of
        # public delegated prefixes when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::PublicDelegatedPrefixesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @public_delegated_prefixes = args[:public_delegated_prefixes] if args.key?(:public_delegated_prefixes)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning which replaces the list of
        # public delegated prefixes when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::PublicDelegatedPrefixesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # A quotas entry.
      class Quota
        include Google::Apis::Core::Hashable
      
        # [Output Only] Quota limit for this metric.
        # Corresponds to the JSON property `limit`
        # @return [Float]
        attr_accessor :limit
      
        # [Output Only] Name of the quota metric.
        # Corresponds to the JSON property `metric`
        # @return [String]
        attr_accessor :metric
      
        # [Output Only] Owning resource. This is the resource on which this quota
        # is applied.
        # Corresponds to the JSON property `owner`
        # @return [String]
        attr_accessor :owner
      
        # [Output Only] Current usage of this metric.
        # Corresponds to the JSON property `usage`
        # @return [Float]
        attr_accessor :usage
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @limit = args[:limit] if args.key?(:limit)
          @metric = args[:metric] if args.key?(:metric)
          @owner = args[:owner] if args.key?(:owner)
          @usage = args[:usage] if args.key?(:usage)
        end
      end
      
      # Additional details for quota exceeded error for resource quota.
      class QuotaExceededInfo
        include Google::Apis::Core::Hashable
      
        # The map holding related quota dimensions.
        # Corresponds to the JSON property `dimensions`
        # @return [Hash<String,String>]
        attr_accessor :dimensions
      
        # Future quota limit being rolled out. The limit's unit depends on the quota
        # type or metric.
        # Corresponds to the JSON property `futureLimit`
        # @return [Float]
        attr_accessor :future_limit
      
        # Current effective quota limit. The limit's unit depends on the quota type
        # or metric.
        # Corresponds to the JSON property `limit`
        # @return [Float]
        attr_accessor :limit
      
        # The name of the quota limit.
        # Corresponds to the JSON property `limitName`
        # @return [String]
        attr_accessor :limit_name
      
        # The Compute Engine quota metric name.
        # Corresponds to the JSON property `metricName`
        # @return [String]
        attr_accessor :metric_name
      
        # Rollout status of the future quota limit.
        # Corresponds to the JSON property `rolloutStatus`
        # @return [String]
        attr_accessor :rollout_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @dimensions = args[:dimensions] if args.key?(:dimensions)
          @future_limit = args[:future_limit] if args.key?(:future_limit)
          @limit = args[:limit] if args.key?(:limit)
          @limit_name = args[:limit_name] if args.key?(:limit_name)
          @metric_name = args[:metric_name] if args.key?(:metric_name)
          @rollout_status = args[:rollout_status] if args.key?(:rollout_status)
        end
      end
      
      # Represents a reference to a resource.
      class Reference
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Type of the resource. Always compute#reference
        # for references.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A description of the reference type with no implied semantics. Possible
        # values include:
        # 
        # 
        # 1. MEMBER_OF
        # Corresponds to the JSON property `referenceType`
        # @return [String]
        attr_accessor :reference_type
      
        # URL of the resource which refers to the target.
        # Corresponds to the JSON property `referrer`
        # @return [String]
        attr_accessor :referrer
      
        # URL of the resource to which this reference points.
        # Corresponds to the JSON property `target`
        # @return [String]
        attr_accessor :target
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @kind = args[:kind] if args.key?(:kind)
          @reference_type = args[:reference_type] if args.key?(:reference_type)
          @referrer = args[:referrer] if args.key?(:referrer)
          @target = args[:target] if args.key?(:target)
        end
      end
      
      # Represents a Region resource.
      # A region is a geographical area where a resource is located. For more
      # information, readRegions
      # and Zones.
      class Region
        include Google::Apis::Core::Hashable
      
        # [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Deprecation status for a public resource.
        # Corresponds to the JSON property `deprecated`
        # @return [Google::Apis::ComputeV1::DeprecationStatus]
        attr_accessor :deprecated
      
        # [Output Only] Textual description of the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Always compute#region for
        # regions.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] Name of the resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] Warning of fetching the `quotas` field for this
        # region. This
        # field is populated only if fetching of the `quotas` field fails.
        # Corresponds to the JSON property `quotaStatusWarning`
        # @return [Google::Apis::ComputeV1::Region::QuotaStatusWarning]
        attr_accessor :quota_status_warning
      
        # [Output Only] Quotas assigned to this region.
        # Corresponds to the JSON property `quotas`
        # @return [Array<Google::Apis::ComputeV1::Quota>]
        attr_accessor :quotas
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Status of the region, either UP orDOWN.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `supportsPzs`
        # @return [Boolean]
        attr_accessor :supports_pzs
        alias_method :supports_pzs?, :supports_pzs
      
        # [Output Only] A list of zones available in this region, in the form of
        # resource URLs.
        # 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)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @deprecated = args[:deprecated] if args.key?(:deprecated)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @quota_status_warning = args[:quota_status_warning] if args.key?(:quota_status_warning)
          @quotas = args[:quotas] if args.key?(:quotas)
          @self_link = args[:self_link] if args.key?(:self_link)
          @status = args[:status] if args.key?(:status)
          @supports_pzs = args[:supports_pzs] if args.key?(:supports_pzs)
          @zones = args[:zones] if args.key?(:zones)
        end
        
        # Output only. [Output Only] Warning of fetching the `quotas` field for this
        # region. This
        # field is populated only if fetching of the `quotas` field fails.
        class QuotaStatusWarning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::Region::QuotaStatusWarning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class RegionAddressesMoveRequest
        include Google::Apis::Core::Hashable
      
        # An optional destination address description if intended to be different
        # from the source.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # The URL of the destination address to move to. This can be a full or
        # partial URL. For example, the following are all valid URLs to a address:
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/regions/region/
        # addresses/address
        # - projects/project/regions/region/addresses/address
        # Note that destination project must be different from the source project. So/
        # regions/region/addresses/address is not valid partial url.
        # Corresponds to the JSON property `destinationAddress`
        # @return [String]
        attr_accessor :destination_address
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @description = args[:description] if args.key?(:description)
          @destination_address = args[:destination_address] if args.key?(:destination_address)
        end
      end
      
      # Contains a list of autoscalers.
      class RegionAutoscalerList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Autoscaler resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Autoscaler>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::RegionAutoscalerList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::RegionAutoscalerList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class RegionDiskTypeList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of DiskType resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::DiskType>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#regionDiskTypeList
        # for region disk types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::RegionDiskTypeList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::RegionDiskTypeList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class RegionDisksAddResourcePoliciesRequest
        include Google::Apis::Core::Hashable
      
        # Resource policies to be added to this disk.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Array<String>]
        attr_accessor :resource_policies
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
        end
      end
      
      # 
      class RegionDisksRemoveResourcePoliciesRequest
        include Google::Apis::Core::Hashable
      
        # Resource policies to be removed from this disk.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Array<String>]
        attr_accessor :resource_policies
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
        end
      end
      
      # 
      class RegionDisksResizeRequest
        include Google::Apis::Core::Hashable
      
        # The new size of the regional persistent disk, which is specified in GB.
        # Corresponds to the JSON property `sizeGb`
        # @return [Fixnum]
        attr_accessor :size_gb
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @size_gb = args[:size_gb] if args.key?(:size_gb)
        end
      end
      
      # 
      class RegionDisksStartAsyncReplicationRequest
        include Google::Apis::Core::Hashable
      
        # The secondary disk to start asynchronous replication to.
        # You can provide this as a partial or full URL to the resource. For example,
        # the following are valid values:
        # 
        # 
        # -
        # https://www.googleapis.com/compute/v1/projects/project/zones/zone/disks/
        # disk
        # 
        # -
        # https://www.googleapis.com/compute/v1/projects/project/regions/region/
        # disks/disk
        # 
        # -
        # projects/project/zones/zone/disks/disk
        # 
        # -
        # projects/project/regions/region/disks/disk
        # 
        # -
        # zones/zone/disks/disk
        # 
        # -
        # regions/region/disks/disk
        # Corresponds to the JSON property `asyncSecondaryDisk`
        # @return [String]
        attr_accessor :async_secondary_disk
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @async_secondary_disk = args[:async_secondary_disk] if args.key?(:async_secondary_disk)
        end
      end
      
      # Contains a list of InstanceGroup resources.
      class RegionInstanceGroupList
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the resource; defined by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InstanceGroup resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InstanceGroup>]
        attr_accessor :items
      
        # Output only. The resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::RegionInstanceGroupList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::RegionInstanceGroupList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # RegionInstanceGroupManagers.deletePerInstanceConfigs
      class RegionInstanceGroupManagerDeleteInstanceConfigReq
        include Google::Apis::Core::Hashable
      
        # The list of instance names for which we want to delete per-instance configs
        # on this managed instance group.
        # Corresponds to the JSON property `names`
        # @return [Array<String>]
        attr_accessor :names
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @names = args[:names] if args.key?(:names)
        end
      end
      
      # Contains a list of managed instance groups.
      class RegionInstanceGroupManagerList
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the resource; defined by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InstanceGroupManager resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InstanceGroupManager>]
        attr_accessor :items
      
        # Output only. [Output Only] The resource type, which is always
        # compute#instanceGroupManagerList for a list of managed instance groups that
        # exist in th regional scope.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::RegionInstanceGroupManagerList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::RegionInstanceGroupManagerList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # RegionInstanceGroupManagers.patchPerInstanceConfigs
      class RegionInstanceGroupManagerPatchInstanceConfigReq
        include Google::Apis::Core::Hashable
      
        # The list of per-instance configurations to insert or patch on this managed
        # instance group.
        # Corresponds to the JSON property `perInstanceConfigs`
        # @return [Array<Google::Apis::ComputeV1::PerInstanceConfig>]
        attr_accessor :per_instance_configs
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @per_instance_configs = args[:per_instance_configs] if args.key?(:per_instance_configs)
        end
      end
      
      # RegionInstanceGroupManagers.updatePerInstanceConfigs
      class RegionInstanceGroupManagerUpdateInstanceConfigReq
        include Google::Apis::Core::Hashable
      
        # The list of per-instance configurations to insert or patch on this managed
        # instance group.
        # Corresponds to the JSON property `perInstanceConfigs`
        # @return [Array<Google::Apis::ComputeV1::PerInstanceConfig>]
        attr_accessor :per_instance_configs
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @per_instance_configs = args[:per_instance_configs] if args.key?(:per_instance_configs)
        end
      end
      
      # 
      class RegionInstanceGroupManagersAbandonInstancesRequest
        include Google::Apis::Core::Hashable
      
        # The URLs of one or more instances to abandon. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        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
      
      # RegionInstanceGroupManagers.applyUpdatesToInstances
      class RegionInstanceGroupManagersApplyUpdatesRequest
        include Google::Apis::Core::Hashable
      
        # Flag to update all instances instead of specified list of “instances”.
        # If the flag is set to true then the instances may not be specified
        # in the request.
        # Corresponds to the JSON property `allInstances`
        # @return [Boolean]
        attr_accessor :all_instances
        alias_method :all_instances?, :all_instances
      
        # The list of URLs of one or more instances for which you want to apply
        # updates. Each URL can be a full URL or a partial URL, such aszones/[ZONE]/
        # instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        attr_accessor :instances
      
        # The minimal action that you want to perform on each instance during the
        # update:
        # 
        # 
        # - REPLACE: At minimum, delete the instance and create it
        # again.
        # - RESTART: Stop the instance and start it
        # again.
        # - REFRESH: Do not stop the instance and limit
        # disruption as much as possible.
        # - NONE: Do not
        # disrupt the instance at all.
        # By default, the minimum action is NONE. If your update
        # requires a more disruptive action than you set with this flag, the
        # necessary action is performed to execute the update.
        # Corresponds to the JSON property `minimalAction`
        # @return [String]
        attr_accessor :minimal_action
      
        # The most disruptive action that you want to perform on each instance during
        # the update:
        # 
        # 
        # - REPLACE: Delete the instance and create it again.
        # - RESTART: Stop the instance and start it again.
        # - REFRESH: Do not stop the instance and limit disruption
        # as much as possible.
        # - NONE: Do not disrupt the
        # instance at all.
        # By default, the most disruptive allowed action is REPLACE. If
        # your update requires a more disruptive action than you set with this flag,
        # the update request will fail.
        # Corresponds to the JSON property `mostDisruptiveAllowedAction`
        # @return [String]
        attr_accessor :most_disruptive_allowed_action
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @all_instances = args[:all_instances] if args.key?(:all_instances)
          @instances = args[:instances] if args.key?(:instances)
          @minimal_action = args[:minimal_action] if args.key?(:minimal_action)
          @most_disruptive_allowed_action = args[:most_disruptive_allowed_action] if args.key?(:most_disruptive_allowed_action)
        end
      end
      
      # RegionInstanceGroupManagers.createInstances
      class RegionInstanceGroupManagersCreateInstancesRequest
        include Google::Apis::Core::Hashable
      
        # [Required] List of specifications of per-instance configs.
        # Corresponds to the JSON property `instances`
        # @return [Array<Google::Apis::ComputeV1::PerInstanceConfig>]
        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
      
      # 
      class RegionInstanceGroupManagersDeleteInstancesRequest
        include Google::Apis::Core::Hashable
      
        # The URLs of one or more instances to delete. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        attr_accessor :instances
      
        # Specifies whether the request should proceed despite the inclusion of
        # instances that are not members of the group or that are already in the
        # process of being deleted or abandoned. If this field is set to `false` and
        # such an instance is specified in the request, the operation fails. The
        # operation always fails if the request contains a malformed instance URL or
        # a reference to an instance that exists in a zone or region other than the
        # group's zone or region.
        # Corresponds to the JSON property `skipInstancesOnValidationError`
        # @return [Boolean]
        attr_accessor :skip_instances_on_validation_error
        alias_method :skip_instances_on_validation_error?, :skip_instances_on_validation_error
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instances = args[:instances] if args.key?(:instances)
          @skip_instances_on_validation_error = args[:skip_instances_on_validation_error] if args.key?(:skip_instances_on_validation_error)
        end
      end
      
      # 
      class RegionInstanceGroupManagersListErrorsResponse
        include Google::Apis::Core::Hashable
      
        # [Output Only] The list of errors of the managed instance group.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InstanceManagedByIgmError>]
        attr_accessor :items
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the 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)
          @items = args[:items] if args.key?(:items)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class RegionInstanceGroupManagersListInstanceConfigsResp
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The list of PerInstanceConfig.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::PerInstanceConfig>]
        attr_accessor :items
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::RegionInstanceGroupManagersListInstanceConfigsResp::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @items = args[:items] if args.key?(:items)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::RegionInstanceGroupManagersListInstanceConfigsResp::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class RegionInstanceGroupManagersListInstancesResponse
        include Google::Apis::Core::Hashable
      
        # A list of managed instances.
        # Corresponds to the JSON property `managedInstances`
        # @return [Array<Google::Apis::ComputeV1::ManagedInstance>]
        attr_accessor :managed_instances
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the 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)
          @managed_instances = args[:managed_instances] if args.key?(:managed_instances)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
        end
      end
      
      # 
      class RegionInstanceGroupManagersRecreateRequest
        include Google::Apis::Core::Hashable
      
        # The URLs of one or more instances to recreate. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        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
      
      # 
      class RegionInstanceGroupManagersResumeInstancesRequest
        include Google::Apis::Core::Hashable
      
        # The URLs of one or more instances to resume. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        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
      
      # 
      class RegionInstanceGroupManagersSetTargetPoolsRequest
        include Google::Apis::Core::Hashable
      
        # Fingerprint of the target pools information, which is a hash of the
        # contents. This field is used for optimistic locking when you update the
        # target pool entries. This field is optional.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # The URL of all TargetPool resources to which instances in theinstanceGroup
        # field are added. The target pools automatically
        # apply to all of the instances in the managed instance group.
        # Corresponds to the JSON property `targetPools`
        # @return [Array<String>]
        attr_accessor :target_pools
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @target_pools = args[:target_pools] if args.key?(:target_pools)
        end
      end
      
      # 
      class RegionInstanceGroupManagersSetTemplateRequest
        include Google::Apis::Core::Hashable
      
        # URL of the InstanceTemplate resource from which all new instances will be
        # created.
        # Corresponds to the JSON property `instanceTemplate`
        # @return [String]
        attr_accessor :instance_template
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_template = args[:instance_template] if args.key?(:instance_template)
        end
      end
      
      # 
      class RegionInstanceGroupManagersStartInstancesRequest
        include Google::Apis::Core::Hashable
      
        # The URLs of one or more instances to start. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        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
      
      # 
      class RegionInstanceGroupManagersStopInstancesRequest
        include Google::Apis::Core::Hashable
      
        # If this flag is set to true, the Instance Group Manager will proceed to
        # stop the instances, skipping initialization on them.
        # Corresponds to the JSON property `forceStop`
        # @return [Boolean]
        attr_accessor :force_stop
        alias_method :force_stop?, :force_stop
      
        # The URLs of one or more instances to stop. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        attr_accessor :instances
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @force_stop = args[:force_stop] if args.key?(:force_stop)
          @instances = args[:instances] if args.key?(:instances)
        end
      end
      
      # 
      class RegionInstanceGroupManagersSuspendInstancesRequest
        include Google::Apis::Core::Hashable
      
        # If this flag is set to true, the Instance Group Manager will proceed to
        # suspend the instances, skipping initialization on them.
        # Corresponds to the JSON property `forceSuspend`
        # @return [Boolean]
        attr_accessor :force_suspend
        alias_method :force_suspend?, :force_suspend
      
        # The URLs of one or more instances to suspend. This can be a full URL or
        # a partial URL, such as zones/[ZONE]/instances/[INSTANCE_NAME].
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        attr_accessor :instances
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @force_suspend = args[:force_suspend] if args.key?(:force_suspend)
          @instances = args[:instances] if args.key?(:instances)
        end
      end
      
      # 
      class RegionInstanceGroupsListInstances
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the resource; defined by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of InstanceWithNamedPorts resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::InstanceWithNamedPorts>]
        attr_accessor :items
      
        # Output only. The resource type.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::RegionInstanceGroupsListInstances::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::RegionInstanceGroupsListInstances::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class RegionInstanceGroupsListInstancesRequest
        include Google::Apis::Core::Hashable
      
        # Instances in which state should be returned. Valid options are:
        # 'ALL', 'RUNNING'. By default, it lists all instances.
        # Corresponds to the JSON property `instanceState`
        # @return [String]
        attr_accessor :instance_state
      
        # Name of port user is interested in. It is optional. If it is set, only
        # information about this ports will be returned. If it is not set, all the
        # named ports will be returned.
        # Always lists all instances.
        # Corresponds to the JSON property `portName`
        # @return [String]
        attr_accessor :port_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_state = args[:instance_state] if args.key?(:instance_state)
          @port_name = args[:port_name] if args.key?(:port_name)
        end
      end
      
      # 
      class RegionInstanceGroupsSetNamedPortsRequest
        include Google::Apis::Core::Hashable
      
        # The fingerprint of the named ports information for this instance group.
        # Use this optional property to prevent conflicts when multiple users change
        # the named ports settings concurrently. Obtain the fingerprint with
        # theinstanceGroups.get
        # method. Then, include the fingerprint in your request to ensure that you
        # do not overwrite changes that were applied from another
        # concurrent request.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # The list of named ports to set for this instance group.
        # Corresponds to the JSON property `namedPorts`
        # @return [Array<Google::Apis::ComputeV1::NamedPort>]
        attr_accessor :named_ports
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @named_ports = args[:named_ports] if args.key?(:named_ports)
        end
      end
      
      # Contains a list of region resources.
      class RegionList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Region resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Region>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#regionList for
        # lists of regions.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::RegionList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::RegionList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class RegionNetworkEndpointGroupsAttachEndpointsRequest
        include Google::Apis::Core::Hashable
      
        # The list of network endpoints to be attached.
        # Corresponds to the JSON property `networkEndpoints`
        # @return [Array<Google::Apis::ComputeV1::NetworkEndpoint>]
        attr_accessor :network_endpoints
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @network_endpoints = args[:network_endpoints] if args.key?(:network_endpoints)
        end
      end
      
      # 
      class RegionNetworkEndpointGroupsDetachEndpointsRequest
        include Google::Apis::Core::Hashable
      
        # The list of network endpoints to be detached.
        # Corresponds to the JSON property `networkEndpoints`
        # @return [Array<Google::Apis::ComputeV1::NetworkEndpoint>]
        attr_accessor :network_endpoints
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @network_endpoints = args[:network_endpoints] if args.key?(:network_endpoints)
        end
      end
      
      # 
      class RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse
        include Google::Apis::Core::Hashable
      
        # Output only. [Output only] Effective firewalls from firewall policy. It
        # applies to
        # Regional Network Firewall Policies in the specified region, Global Network
        # Firewall Policies and Hierachial Firewall Policies which are associated
        # with the network.
        # Corresponds to the JSON property `firewallPolicys`
        # @return [Array<Google::Apis::ComputeV1::RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponseEffectiveFirewallPolicy>]
        attr_accessor :firewall_policys
      
        # Effective firewalls on the network.
        # Corresponds to the JSON property `firewalls`
        # @return [Array<Google::Apis::ComputeV1::Firewall>]
        attr_accessor :firewalls
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @firewall_policys = args[:firewall_policys] if args.key?(:firewall_policys)
          @firewalls = args[:firewalls] if args.key?(:firewalls)
        end
      end
      
      # 
      class RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponseEffectiveFirewallPolicy
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The display name of the firewall policy.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # Output only. [Output Only] The name of the firewall policy.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output only] The packet mirroring rules that apply to the
        # network.
        # Corresponds to the JSON property `packetMirroringRules`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicyRule>]
        attr_accessor :packet_mirroring_rules
      
        # Output only. [Output only] Priority of firewall policy association. Not
        # applicable for
        # type=HIERARCHY.
        # Corresponds to the JSON property `priority`
        # @return [Fixnum]
        attr_accessor :priority
      
        # Output only. [Output only] The rules that apply to the network.
        # Corresponds to the JSON property `rules`
        # @return [Array<Google::Apis::ComputeV1::FirewallPolicyRule>]
        attr_accessor :rules
      
        # Output only. [Output Only] The type of the firewall policy. Can be one of
        # HIERARCHY,
        # NETWORK, NETWORK_REGIONAL, SYSTEM_GLOBAL, SYSTEM_REGIONAL.
        # 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)
          @display_name = args[:display_name] if args.key?(:display_name)
          @name = args[:name] if args.key?(:name)
          @packet_mirroring_rules = args[:packet_mirroring_rules] if args.key?(:packet_mirroring_rules)
          @priority = args[:priority] if args.key?(:priority)
          @rules = args[:rules] if args.key?(:rules)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # 
      class RegionSetLabelsRequest
        include Google::Apis::Core::Hashable
      
        # The fingerprint of the previous set of labels for this resource,
        # used to detect conflicts. The fingerprint is initially generated by Compute
        # Engine and changes after every request to modify or update labels. You must
        # always provide an up-to-date fingerprint hash in order to update or change
        # labels. Make a get() request to the resource to get the latest
        # fingerprint.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # The labels to set for this resource.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
        end
      end
      
      # 
      class RegionSetPolicyRequest
        include Google::Apis::Core::Hashable
      
        # Flatten Policy to create a backwacd compatible wire-format.
        # Deprecated. Use 'policy' to specify bindings.
        # Corresponds to the JSON property `bindings`
        # @return [Array<Google::Apis::ComputeV1::Binding>]
        attr_accessor :bindings
      
        # Flatten Policy to create a backward compatible wire-format.
        # Deprecated. Use 'policy' to specify the etag.
        # Corresponds to the JSON property `etag`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :etag
      
        # An Identity and Access Management (IAM) policy, which specifies access
        # controls for Google Cloud resources.
        # A `Policy` is a collection of `bindings`. A `binding` binds one or more
        # `members`, or principals, to a single `role`. Principals can be user
        # accounts, service accounts, Google groups, and domains (such as G Suite). A
        # `role` is a named list of permissions; each `role` can be an IAM predefined
        # role or a user-created custom role.
        # For some types of Google Cloud resources, a `binding` can also specify a
        # `condition`, which is a logical expression that allows access to a resource
        # only if the expression evaluates to `true`. A condition can add constraints
        # based on attributes of the request, the resource, or both. To learn which
        # resources support conditions in their IAM policies, see the
        # [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-
        # policies).
        # **JSON example:**
        # ```
        # `
        # "bindings": [
        # `
        # "role": "roles/resourcemanager.organizationAdmin",
        # "members": [
        # "user:mike@example.com",
        # "group:admins@example.com",
        # "domain:google.com",
        # "serviceAccount:my-project-id@appspot.gserviceaccount.com"
        # ]
        # `,
        # `
        # "role": "roles/resourcemanager.organizationViewer",
        # "members": [
        # "user:eve@example.com"
        # ],
        # "condition": `
        # "title": "expirable access",
        # "description": "Does not grant access after Sep 2020",
        # "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')
        # ",
        # `
        # `
        # ],
        # "etag": "BwWWja0YfJA=",
        # "version": 3
        # `
        # ```
        # **YAML example:**
        # ```
        # bindings:
        # - members:
        # - user:mike@example.com
        # - group:admins@example.com
        # - domain:google.com
        # - serviceAccount:my-project-id@appspot.gserviceaccount.com
        # role: roles/resourcemanager.organizationAdmin
        # - members:
        # - user:eve@example.com
        # role: roles/resourcemanager.organizationViewer
        # condition:
        # title: expirable access
        # description: Does not grant access after Sep 2020
        # expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
        # etag: BwWWja0YfJA=
        # version: 3
        # ```
        # For a description of IAM and its features, see the
        # [IAM documentation](https://cloud.google.com/iam/docs/).
        # Corresponds to the JSON property `policy`
        # @return [Google::Apis::ComputeV1::Policy]
        attr_accessor :policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bindings = args[:bindings] if args.key?(:bindings)
          @etag = args[:etag] if args.key?(:etag)
          @policy = args[:policy] if args.key?(:policy)
        end
      end
      
      # 
      class RegionTargetHttpsProxiesSetSslCertificatesRequest
        include Google::Apis::Core::Hashable
      
        # New set of SslCertificate resources to associate
        # with this TargetHttpsProxy resource.
        # Corresponds to the JSON property `sslCertificates`
        # @return [Array<String>]
        attr_accessor :ssl_certificates
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ssl_certificates = args[:ssl_certificates] if args.key?(:ssl_certificates)
        end
      end
      
      # 
      class RegionUrlMapsValidateRequest
        include Google::Apis::Core::Hashable
      
        # Represents a URL Map resource.
        # Compute Engine has two URL Map resources:
        # * [Global](/compute/docs/reference/rest/v1/urlMaps)
        # * [Regional](/compute/docs/reference/rest/v1/regionUrlMaps)
        # A URL map resource is a component of certain types of cloud load balancers
        # and Traffic Director:
        # * urlMaps are used by global external Application Load
        # Balancers, classic Application Load Balancers, and cross-region internal
        # Application Load Balancers.
        # * regionUrlMaps are used by internal Application Load Balancers,
        # regional external Application Load Balancers and regional internal
        # Application Load Balancers.
        # For a list of supported URL map features by the load balancer type, see the
        # Load balancing features: Routing and traffic management table.
        # For a list of supported URL map features for Traffic Director, see the
        # Traffic Director features: Routing and traffic management table.
        # This resource defines mappings from hostnames and URL paths to either a
        # backend service or a backend bucket.
        # To use the global urlMaps resource, the backend service must
        # have a loadBalancingScheme of either EXTERNAL,EXTERNAL_MANAGED, or
        # INTERNAL_SELF_MANAGED. To use
        # the regionUrlMaps resource, the backend service must have aloadBalancingScheme
        # of INTERNAL_MANAGED. For more
        # information, read URL
        # Map Concepts.
        # Corresponds to the JSON property `resource`
        # @return [Google::Apis::ComputeV1::UrlMap]
        attr_accessor :resource
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource = args[:resource] if args.key?(:resource)
        end
      end
      
      # A policy that specifies how requests intended for the route's backends
      # are shadowed to a separate mirrored backend service. The load balancer
      # doesn't wait for responses from the shadow service. Before sending traffic
      # to the shadow service, the host or authority header is suffixed with-shadow.
      class RequestMirrorPolicy
        include Google::Apis::Core::Hashable
      
        # The full or partial URL to the BackendService resource being
        # mirrored to.
        # The backend service configured for a mirroring
        # policy must reference backends that are of the same type as the original
        # backend service matched in the URL map.
        # Serverless NEG backends are not currently supported as a mirrored
        # backend service.
        # Corresponds to the JSON property `backendService`
        # @return [String]
        attr_accessor :backend_service
      
        # The percentage of requests to be mirrored to `backend_service`.
        # Corresponds to the JSON property `mirrorPercent`
        # @return [Float]
        attr_accessor :mirror_percent
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @backend_service = args[:backend_service] if args.key?(:backend_service)
          @mirror_percent = args[:mirror_percent] if args.key?(:mirror_percent)
        end
      end
      
      # Represents a reservation resource.  A reservation ensures that capacity is
      # held in a specific zone even if the reserved VMs are not running. For more
      # information, read  Reserving zonal
      # resources.
      class Reservation
        include Google::Apis::Core::Hashable
      
        # Advance control for cluster management, applicable only to DENSE deployment
        # type reservations.
        # Corresponds to the JSON property `advancedDeploymentControl`
        # @return [Google::Apis::ComputeV1::ReservationAdvancedDeploymentControl]
        attr_accessor :advanced_deployment_control
      
        # This reservation type is specified by total resource amounts (e.g. total
        # count of CPUs) and can account for multiple instance SKUs. In other words,
        # one can create instances of varying shapes against this reservation.
        # Corresponds to the JSON property `aggregateReservation`
        # @return [Google::Apis::ComputeV1::AllocationAggregateReservation]
        attr_accessor :aggregate_reservation
      
        # Output only. [Output Only] Full or partial URL to a parent commitment. This
        # field
        # displays for reservations that are tied to a commitment.
        # Corresponds to the JSON property `commitment`
        # @return [String]
        attr_accessor :commitment
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `deleteAfterDuration`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :delete_after_duration
      
        # Absolute time in future when the reservation will be
        # auto-deleted by Compute Engine. Timestamp is represented inRFC3339 text
        # format.
        # Corresponds to the JSON property `deleteAtTime`
        # @return [String]
        attr_accessor :delete_at_time
      
        # Specifies the deployment strategy for this reservation.
        # Corresponds to the JSON property `deploymentType`
        # @return [String]
        attr_accessor :deployment_type
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Indicates whether Compute Engine allows unplanned maintenance for your VMs;
        # for example, to fix hardware errors.
        # Corresponds to the JSON property `enableEmergentMaintenance`
        # @return [Boolean]
        attr_accessor :enable_emergent_maintenance
        alias_method :enable_emergent_maintenance?, :enable_emergent_maintenance
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#reservations
        # for reservations.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] Full or partial URL to parent commitments. This
        # field
        # displays for reservations that are tied to multiple commitments.
        # Corresponds to the JSON property `linkedCommitments`
        # @return [Array<String>]
        attr_accessor :linked_commitments
      
        # The name of the resource, provided by the client when initially creating
        # the resource. The resource name must be 1-63 characters long, and comply
        # withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Protection tier for the workload which specifies the workload expectations
        # in the event of infrastructure failures at data center (e.g. power
        # and/or cooling failures).
        # Corresponds to the JSON property `protectionTier`
        # @return [String]
        attr_accessor :protection_tier
      
        # Specify the reservation sharing policy. If unspecified, the reservation
        # will not be shared with Google Cloud managed services.
        # Corresponds to the JSON property `reservationSharingPolicy`
        # @return [Google::Apis::ComputeV1::AllocationReservationSharingPolicy]
        attr_accessor :reservation_sharing_policy
      
        # Resource policies to be added to this reservation. The key is defined by
        # user, and the value is resource policy url. This is to define placement
        # policy with reservation.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Hash<String,String>]
        attr_accessor :resource_policies
      
        # [Output Only] Contains output only fields.
        # Corresponds to the JSON property `resourceStatus`
        # @return [Google::Apis::ComputeV1::AllocationResourceStatus]
        attr_accessor :resource_status
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # The type of maintenance for the reservation.
        # Corresponds to the JSON property `schedulingType`
        # @return [String]
        attr_accessor :scheduling_type
      
        # Output only. [Output Only] Server-defined fully-qualified URL for this
        # resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # The share setting for reservations and sole tenancy node groups.
        # Corresponds to the JSON property `shareSettings`
        # @return [Google::Apis::ComputeV1::ShareSettings]
        attr_accessor :share_settings
      
        # This reservation type allows to pre allocate specific instance
        # configuration.
        # Corresponds to the JSON property `specificReservation`
        # @return [Google::Apis::ComputeV1::AllocationSpecificSkuReservation]
        attr_accessor :specific_reservation
      
        # Indicates whether the reservation can be consumed by VMs with affinity
        # for "any" reservation. If the field is set, then only VMs that target
        # the reservation by name can consume from this reservation.
        # Corresponds to the JSON property `specificReservationRequired`
        # @return [Boolean]
        attr_accessor :specific_reservation_required
        alias_method :specific_reservation_required?, :specific_reservation_required
      
        # Output only. [Output Only] The status of the reservation.
        # 
        # 
        # - CREATING: Reservation resources are being
        # allocated.
        # - READY: Reservation resources have been allocated,
        # and the reservation is ready for use.
        # - DELETING: Reservation deletion is in progress.
        # - UPDATING: Reservation update is in progress.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Zone in which the reservation resides. A zone must be provided if the
        # reservation is created within a commitment.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advanced_deployment_control = args[:advanced_deployment_control] if args.key?(:advanced_deployment_control)
          @aggregate_reservation = args[:aggregate_reservation] if args.key?(:aggregate_reservation)
          @commitment = args[:commitment] if args.key?(:commitment)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @delete_after_duration = args[:delete_after_duration] if args.key?(:delete_after_duration)
          @delete_at_time = args[:delete_at_time] if args.key?(:delete_at_time)
          @deployment_type = args[:deployment_type] if args.key?(:deployment_type)
          @description = args[:description] if args.key?(:description)
          @enable_emergent_maintenance = args[:enable_emergent_maintenance] if args.key?(:enable_emergent_maintenance)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @linked_commitments = args[:linked_commitments] if args.key?(:linked_commitments)
          @name = args[:name] if args.key?(:name)
          @protection_tier = args[:protection_tier] if args.key?(:protection_tier)
          @reservation_sharing_policy = args[:reservation_sharing_policy] if args.key?(:reservation_sharing_policy)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
          @resource_status = args[:resource_status] if args.key?(:resource_status)
          @satisfies_pzs = args[:satisfies_pzs] if args.key?(:satisfies_pzs)
          @scheduling_type = args[:scheduling_type] if args.key?(:scheduling_type)
          @self_link = args[:self_link] if args.key?(:self_link)
          @share_settings = args[:share_settings] if args.key?(:share_settings)
          @specific_reservation = args[:specific_reservation] if args.key?(:specific_reservation)
          @specific_reservation_required = args[:specific_reservation_required] if args.key?(:specific_reservation_required)
          @status = args[:status] if args.key?(:status)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # Advance control for cluster management, applicable only to DENSE deployment
      # type reservations.
      class ReservationAdvancedDeploymentControl
        include Google::Apis::Core::Hashable
      
        # Indicates chosen reservation operational mode for the reservation.
        # Corresponds to the JSON property `reservationOperationalMode`
        # @return [String]
        attr_accessor :reservation_operational_mode
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @reservation_operational_mode = args[:reservation_operational_mode] if args.key?(:reservation_operational_mode)
        end
      end
      
      # Specifies the reservations that this instance can consume from.
      class ReservationAffinity
        include Google::Apis::Core::Hashable
      
        # Specifies the type of reservation from which this instance can consume
        # resources: ANY_RESERVATION (default),SPECIFIC_RESERVATION, or NO_RESERVATION.
        # See
        # Consuming reserved instances for examples.
        # Corresponds to the JSON property `consumeReservationType`
        # @return [String]
        attr_accessor :consume_reservation_type
      
        # Corresponds to the label key of a reservation resource. To target
        # aSPECIFIC_RESERVATION by name, specifygoogleapis.com/reservation-name as the
        # key and specify
        # the name of your reservation as its value.
        # Corresponds to the JSON property `key`
        # @return [String]
        attr_accessor :key
      
        # Corresponds to the label values of a reservation resource. This can be
        # either a name to a reservation in the same project or
        # "projects/different-project/reservations/some-reservation-name" to target a
        # shared reservation in the same zone but in a different project.
        # Corresponds to the JSON property `values`
        # @return [Array<String>]
        attr_accessor :values
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @consume_reservation_type = args[:consume_reservation_type] if args.key?(:consume_reservation_type)
          @key = args[:key] if args.key?(:key)
          @values = args[:values] if args.key?(:values)
        end
      end
      
      # Contains a list of reservations.
      class ReservationAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Allocation resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::ReservationsScopedList>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ReservationAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ReservationAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a reservation block resource.
      class ReservationBlock
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The number of resources that are allocated in this
        # reservation block.
        # Corresponds to the JSON property `count`
        # @return [Fixnum]
        attr_accessor :count
      
        # Output only. [Output Only] Creation timestamp inRFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Health information for the reservation block.
        # Corresponds to the JSON property `healthInfo`
        # @return [Google::Apis::ComputeV1::ReservationBlockHealthInfo]
        attr_accessor :health_info
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] The number of instances that are currently in use
        # on this
        # reservation block.
        # Corresponds to the JSON property `inUseCount`
        # @return [Fixnum]
        attr_accessor :in_use_count
      
        # Output only. Number of hosts currently in use. If there is one or more
        # Instances running
        # on the host, it is considered in use.
        # Corresponds to the JSON property `inUseHostCount`
        # @return [Fixnum]
        attr_accessor :in_use_host_count
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # reservationBlock for reservation blocks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] The name of this reservation block generated by
        # Google
        # Compute Engine. The name must be 1-63 characters long, and comply with
        # RFC1035 @pattern [a-z](?:[-a-z0-9]`0,61`[a-z0-9])?
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The physical topology of the reservation block.
        # Corresponds to the JSON property `physicalTopology`
        # @return [Google::Apis::ComputeV1::ReservationBlockPhysicalTopology]
        attr_accessor :physical_topology
      
        # Maintenance Info for ReservationBlocks.
        # Corresponds to the JSON property `reservationMaintenance`
        # @return [Google::Apis::ComputeV1::GroupMaintenanceInfo]
        attr_accessor :reservation_maintenance
      
        # Output only. [Output Only] The number of reservation subBlocks associated with
        # this
        # reservation block.
        # Corresponds to the JSON property `reservationSubBlockCount`
        # @return [Fixnum]
        attr_accessor :reservation_sub_block_count
      
        # Output only. [Output Only] The number of in-use reservation subBlocks
        # associated with
        # this reservation block. If at least one VM is running on a subBlock, it is
        # considered in-use.
        # Corresponds to the JSON property `reservationSubBlockInUseCount`
        # @return [Fixnum]
        attr_accessor :reservation_sub_block_in_use_count
      
        # Output only. [Output Only] Server-defined fully-qualified URL for this
        # resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource with the
        # resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # Output only. [Output Only] Status of the reservation block.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Output only. [Output Only] Zone in which the reservation block resides.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @count = args[:count] if args.key?(:count)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @health_info = args[:health_info] if args.key?(:health_info)
          @id = args[:id] if args.key?(:id)
          @in_use_count = args[:in_use_count] if args.key?(:in_use_count)
          @in_use_host_count = args[:in_use_host_count] if args.key?(:in_use_host_count)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @physical_topology = args[:physical_topology] if args.key?(:physical_topology)
          @reservation_maintenance = args[:reservation_maintenance] if args.key?(:reservation_maintenance)
          @reservation_sub_block_count = args[:reservation_sub_block_count] if args.key?(:reservation_sub_block_count)
          @reservation_sub_block_in_use_count = args[:reservation_sub_block_in_use_count] if args.key?(:reservation_sub_block_in_use_count)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @status = args[:status] if args.key?(:status)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # Health information for the reservation block.
      class ReservationBlockHealthInfo
        include Google::Apis::Core::Hashable
      
        # The number of subBlocks that are degraded.
        # Corresponds to the JSON property `degradedSubBlockCount`
        # @return [Fixnum]
        attr_accessor :degraded_sub_block_count
      
        # The health status of the reservation block.
        # Corresponds to the JSON property `healthStatus`
        # @return [String]
        attr_accessor :health_status
      
        # The number of subBlocks that are healthy.
        # Corresponds to the JSON property `healthySubBlockCount`
        # @return [Fixnum]
        attr_accessor :healthy_sub_block_count
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @degraded_sub_block_count = args[:degraded_sub_block_count] if args.key?(:degraded_sub_block_count)
          @health_status = args[:health_status] if args.key?(:health_status)
          @healthy_sub_block_count = args[:healthy_sub_block_count] if args.key?(:healthy_sub_block_count)
        end
      end
      
      # 
      class ReservationBlockPhysicalTopology
        include Google::Apis::Core::Hashable
      
        # The hash of the capacity block within the cluster.
        # Corresponds to the JSON property `block`
        # @return [String]
        attr_accessor :block
      
        # The cluster name of the reservation block.
        # Corresponds to the JSON property `cluster`
        # @return [String]
        attr_accessor :cluster
      
        # Output only. The detailed instances information for a given Block
        # Corresponds to the JSON property `instances`
        # @return [Array<Google::Apis::ComputeV1::ReservationBlockPhysicalTopologyInstance>]
        attr_accessor :instances
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @block = args[:block] if args.key?(:block)
          @cluster = args[:cluster] if args.key?(:cluster)
          @instances = args[:instances] if args.key?(:instances)
        end
      end
      
      # The instances information for a given Block
      class ReservationBlockPhysicalTopologyInstance
        include Google::Apis::Core::Hashable
      
        # The InstanceId of the instance
        # Corresponds to the JSON property `instanceId`
        # @return [Fixnum]
        attr_accessor :instance_id
      
        # The PhysicalHostTopology of the instance within a Block resource.
        # Corresponds to the JSON property `physicalHostTopology`
        # @return [Google::Apis::ComputeV1::ReservationBlockPhysicalTopologyInstancePhysicalHostTopology]
        attr_accessor :physical_host_topology
      
        # Project where the instance lives
        # Corresponds to the JSON property `projectId`
        # @return [Fixnum]
        attr_accessor :project_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_id = args[:instance_id] if args.key?(:instance_id)
          @physical_host_topology = args[:physical_host_topology] if args.key?(:physical_host_topology)
          @project_id = args[:project_id] if args.key?(:project_id)
        end
      end
      
      # The PhysicalHostTopology of the instance within a Block resource.
      class ReservationBlockPhysicalTopologyInstancePhysicalHostTopology
        include Google::Apis::Core::Hashable
      
        # Host hash for a given instance
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # Sub block hash for a given instance
        # Corresponds to the JSON property `subBlock`
        # @return [String]
        attr_accessor :sub_block
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @host = args[:host] if args.key?(:host)
          @sub_block = args[:sub_block] if args.key?(:sub_block)
        end
      end
      
      # 
      class ReservationBlocksGetResponse
        include Google::Apis::Core::Hashable
      
        # Represents a reservation block resource.
        # Corresponds to the JSON property `resource`
        # @return [Google::Apis::ComputeV1::ReservationBlock]
        attr_accessor :resource
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource = args[:resource] if args.key?(:resource)
        end
      end
      
      # A list of reservation blocks under a single reservation.
      class ReservationBlocksListResponse
        include Google::Apis::Core::Hashable
      
        # Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of reservation block resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::ReservationBlock>]
        attr_accessor :items
      
        # Type of the resource. Alwayscompute#reservationBlock for a list of reservation
        # blocks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ReservationBlocksListResponse::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ReservationBlocksListResponse::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class ReservationList
        include Google::Apis::Core::Hashable
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # [Output Only] A list of Allocation resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Reservation>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource.Always compute#reservationsList
        # for listsof reservations
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ReservationList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ReservationList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a reservation slot resource.
      class ReservationSlot
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The creation timestamp, formatted asRFC3339 text.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Output only. [Output Only] The unique identifier for this resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] The type of resource. Alwayscompute#reservationSlot
        # for reservation slots.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] The name of the reservation slot.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The physical topology of the reservation slot.
        # Corresponds to the JSON property `physicalTopology`
        # @return [Google::Apis::ComputeV1::ReservationSlotPhysicalTopology]
        attr_accessor :physical_topology
      
        # Output only. [Output Only] A server-defined fully-qualified URL for this
        # resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] A server-defined URL for this resource with the
        # resource ID.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # The share setting for reservations and sole tenancy node groups.
        # Corresponds to the JSON property `shareSettings`
        # @return [Google::Apis::ComputeV1::ShareSettings]
        attr_accessor :share_settings
      
        # Output only. [Output Only] The state of the reservation slot.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # Output only. [Output Only] The status of the reservation slot.
        # Corresponds to the JSON property `status`
        # @return [Google::Apis::ComputeV1::ReservationSlotStatus]
        attr_accessor :status
      
        # Output only. [Output Only] The zone in which the reservation slot resides.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @physical_topology = args[:physical_topology] if args.key?(:physical_topology)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @share_settings = args[:share_settings] if args.key?(:share_settings)
          @state = args[:state] if args.key?(:state)
          @status = args[:status] if args.key?(:status)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class ReservationSlotPhysicalTopology
        include Google::Apis::Core::Hashable
      
        # The unique identifier of the capacity block within the cluster.
        # Corresponds to the JSON property `block`
        # @return [String]
        attr_accessor :block
      
        # The cluster name of the reservation sub-block.
        # Corresponds to the JSON property `cluster`
        # @return [String]
        attr_accessor :cluster
      
        # The unique identifier of the capacity host within the capacity sub-block.
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # The unique identifier of the capacity sub-block within the capacity
        # block.
        # Corresponds to the JSON property `subBlock`
        # @return [String]
        attr_accessor :sub_block
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @block = args[:block] if args.key?(:block)
          @cluster = args[:cluster] if args.key?(:cluster)
          @host = args[:host] if args.key?(:host)
          @sub_block = args[:sub_block] if args.key?(:sub_block)
        end
      end
      
      # 
      class ReservationSlotStatus
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The physical topology of the reservation sub-block.
        # Corresponds to the JSON property `physicalTopology`
        # @return [Google::Apis::ComputeV1::ReservationSlotPhysicalTopology]
        attr_accessor :physical_topology
      
        # Output only. The RDMA IP address of the physical host.
        # Corresponds to the JSON property `rdmaIpAddresses`
        # @return [Array<String>]
        attr_accessor :rdma_ip_addresses
      
        # Output only. The URIs of the instances currently running on this slot.
        # Corresponds to the JSON property `runningInstances`
        # @return [Array<String>]
        attr_accessor :running_instances
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @physical_topology = args[:physical_topology] if args.key?(:physical_topology)
          @rdma_ip_addresses = args[:rdma_ip_addresses] if args.key?(:rdma_ip_addresses)
          @running_instances = args[:running_instances] if args.key?(:running_instances)
        end
      end
      
      # 
      class ReservationSlotsGetResponse
        include Google::Apis::Core::Hashable
      
        # Represents a reservation slot resource.
        # Corresponds to the JSON property `resource`
        # @return [Google::Apis::ComputeV1::ReservationSlot]
        attr_accessor :resource
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource = args[:resource] if args.key?(:resource)
        end
      end
      
      # A list of reservation slots within a single reservation.
      class ReservationSlotsListResponse
        include Google::Apis::Core::Hashable
      
        # The unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of reservation slot resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::ReservationSlot>]
        attr_accessor :items
      
        # The type of resource. Alwayscompute#reservationSlot for a list of reservation
        # slots.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # The server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # An informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ReservationSlotsListResponse::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # An informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ReservationSlotsListResponse::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a reservation subBlock resource.
      class ReservationSubBlock
        include Google::Apis::Core::Hashable
      
        # Info for accelerator topologies within a densely packed reservation.
        # Corresponds to the JSON property `acceleratorTopologiesInfo`
        # @return [Google::Apis::ComputeV1::AcceleratorTopologiesInfo]
        attr_accessor :accelerator_topologies_info
      
        # Output only. [Output Only] The number of hosts that are allocated in this
        # reservation subBlock.
        # Corresponds to the JSON property `count`
        # @return [Fixnum]
        attr_accessor :count
      
        # Output only. [Output Only] Creation timestamp inRFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Health information for the reservation subBlock.
        # Corresponds to the JSON property `healthInfo`
        # @return [Google::Apis::ComputeV1::ReservationSubBlockHealthInfo]
        attr_accessor :health_info
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] The number of instances that are currently in use
        # on this
        # reservation subBlock.
        # Corresponds to the JSON property `inUseCount`
        # @return [Fixnum]
        attr_accessor :in_use_count
      
        # Output only. Number of hosts currently in use. If there is one or more
        # Instances running
        # on the host, it is considered in use.
        # Corresponds to the JSON property `inUseHostCount`
        # @return [Fixnum]
        attr_accessor :in_use_host_count
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # reservationSubBlock for reservation subBlocks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] The name of this reservation subBlock generated by
        # Google
        # Compute Engine. The name must be 1-63 characters long, and comply with
        # RFC1035 @pattern [a-z](?:[-a-z0-9]`0,61`[a-z0-9])?
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The physical topology of the reservation subBlock.
        # Corresponds to the JSON property `physicalTopology`
        # @return [Google::Apis::ComputeV1::ReservationSubBlockPhysicalTopology]
        attr_accessor :physical_topology
      
        # Maintenance Info for ReservationBlocks.
        # Corresponds to the JSON property `reservationSubBlockMaintenance`
        # @return [Google::Apis::ComputeV1::GroupMaintenanceInfo]
        attr_accessor :reservation_sub_block_maintenance
      
        # Output only. [Output Only] Server-defined fully-qualified URL for this
        # resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource with the
        # resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # Output only. [Output Only] Status of the reservation subBlock.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Output only. [Output Only] Zone in which the reservation subBlock resides.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @accelerator_topologies_info = args[:accelerator_topologies_info] if args.key?(:accelerator_topologies_info)
          @count = args[:count] if args.key?(:count)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @health_info = args[:health_info] if args.key?(:health_info)
          @id = args[:id] if args.key?(:id)
          @in_use_count = args[:in_use_count] if args.key?(:in_use_count)
          @in_use_host_count = args[:in_use_host_count] if args.key?(:in_use_host_count)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @physical_topology = args[:physical_topology] if args.key?(:physical_topology)
          @reservation_sub_block_maintenance = args[:reservation_sub_block_maintenance] if args.key?(:reservation_sub_block_maintenance)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @status = args[:status] if args.key?(:status)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # Health information for the reservation subBlock.
      class ReservationSubBlockHealthInfo
        include Google::Apis::Core::Hashable
      
        # The number of degraded hosts in the reservation subBlock.
        # Corresponds to the JSON property `degradedHostCount`
        # @return [Fixnum]
        attr_accessor :degraded_host_count
      
        # The number of degraded infrastructure (e.g NV link domain) in the
        # reservation subblock.
        # Corresponds to the JSON property `degradedInfraCount`
        # @return [Fixnum]
        attr_accessor :degraded_infra_count
      
        # The health status of the reservation subBlock.
        # Corresponds to the JSON property `healthStatus`
        # @return [String]
        attr_accessor :health_status
      
        # The number of healthy hosts in the reservation subBlock.
        # Corresponds to the JSON property `healthyHostCount`
        # @return [Fixnum]
        attr_accessor :healthy_host_count
      
        # The number of healthy infrastructure (e.g NV link domain) in the
        # reservation subblock.
        # Corresponds to the JSON property `healthyInfraCount`
        # @return [Fixnum]
        attr_accessor :healthy_infra_count
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @degraded_host_count = args[:degraded_host_count] if args.key?(:degraded_host_count)
          @degraded_infra_count = args[:degraded_infra_count] if args.key?(:degraded_infra_count)
          @health_status = args[:health_status] if args.key?(:health_status)
          @healthy_host_count = args[:healthy_host_count] if args.key?(:healthy_host_count)
          @healthy_infra_count = args[:healthy_infra_count] if args.key?(:healthy_infra_count)
        end
      end
      
      # 
      class ReservationSubBlockPhysicalTopology
        include Google::Apis::Core::Hashable
      
        # The hash of the capacity block within the cluster.
        # Corresponds to the JSON property `block`
        # @return [String]
        attr_accessor :block
      
        # The cluster name of the reservation subBlock.
        # Corresponds to the JSON property `cluster`
        # @return [String]
        attr_accessor :cluster
      
        # The hash of the capacity sub-block within the capacity block.
        # Corresponds to the JSON property `subBlock`
        # @return [String]
        attr_accessor :sub_block
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @block = args[:block] if args.key?(:block)
          @cluster = args[:cluster] if args.key?(:cluster)
          @sub_block = args[:sub_block] if args.key?(:sub_block)
        end
      end
      
      # 
      class ReservationSubBlocksGetResponse
        include Google::Apis::Core::Hashable
      
        # Represents a reservation subBlock resource.
        # Corresponds to the JSON property `resource`
        # @return [Google::Apis::ComputeV1::ReservationSubBlock]
        attr_accessor :resource
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource = args[:resource] if args.key?(:resource)
        end
      end
      
      # A list of reservation subBlocks under a single reservation.
      class ReservationSubBlocksListResponse
        include Google::Apis::Core::Hashable
      
        # Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of reservation subBlock resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::ReservationSubBlock>]
        attr_accessor :items
      
        # Type of the resource. Alwayscompute#reservationSubBlock for a list of
        # reservation
        # subBlocks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ReservationSubBlocksListResponse::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ReservationSubBlocksListResponse::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class ReservationSubBlocksReportFaultyRequest
        include Google::Apis::Core::Hashable
      
        # The disruption schedule for the subBlock.
        # Corresponds to the JSON property `disruptionSchedule`
        # @return [String]
        attr_accessor :disruption_schedule
      
        # The component that experienced the fault.
        # Corresponds to the JSON property `failureComponent`
        # @return [String]
        attr_accessor :failure_component
      
        # The reasons for the fault experienced with the subBlock.
        # Corresponds to the JSON property `faultReasons`
        # @return [Array<Google::Apis::ComputeV1::ReservationSubBlocksReportFaultyRequestFaultReason>]
        attr_accessor :fault_reasons
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disruption_schedule = args[:disruption_schedule] if args.key?(:disruption_schedule)
          @failure_component = args[:failure_component] if args.key?(:failure_component)
          @fault_reasons = args[:fault_reasons] if args.key?(:fault_reasons)
        end
      end
      
      # The reason for the fault experienced with the subBlock.
      class ReservationSubBlocksReportFaultyRequestFaultReason
        include Google::Apis::Core::Hashable
      
        # The behavior of the fault experienced with the subBlock.
        # Corresponds to the JSON property `behavior`
        # @return [String]
        attr_accessor :behavior
      
        # The description of the fault experienced with the subBlock.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @behavior = args[:behavior] if args.key?(:behavior)
          @description = args[:description] if args.key?(:description)
        end
      end
      
      # 
      class ReservationsBlocksPerformMaintenanceRequest
        include Google::Apis::Core::Hashable
      
        # Specifies if all, running or unused hosts are in scope for this request.
        # Corresponds to the JSON property `maintenanceScope`
        # @return [String]
        attr_accessor :maintenance_scope
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @maintenance_scope = args[:maintenance_scope] if args.key?(:maintenance_scope)
        end
      end
      
      # 
      class ReservationsPerformMaintenanceRequest
        include Google::Apis::Core::Hashable
      
        # Specifies if all, running or unused hosts are in scope for this request.
        # Corresponds to the JSON property `maintenanceScope`
        # @return [String]
        attr_accessor :maintenance_scope
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @maintenance_scope = args[:maintenance_scope] if args.key?(:maintenance_scope)
        end
      end
      
      # 
      class ReservationsResizeRequest
        include Google::Apis::Core::Hashable
      
        # Number of allocated resources can be resized with minimum = 1 and
        # maximum = 1000.
        # Corresponds to the JSON property `specificSkuCount`
        # @return [Fixnum]
        attr_accessor :specific_sku_count
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @specific_sku_count = args[:specific_sku_count] if args.key?(:specific_sku_count)
        end
      end
      
      # 
      class ReservationsScopedList
        include Google::Apis::Core::Hashable
      
        # A list of reservations contained in this scope.
        # Corresponds to the JSON property `reservations`
        # @return [Array<Google::Apis::ComputeV1::Reservation>]
        attr_accessor :reservations
      
        # Informational warning which replaces the list of reservations when
        # the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ReservationsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @reservations = args[:reservations] if args.key?(:reservations)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of reservations when
        # the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ReservationsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Commitment for a particular hardware resource (a commitment is composed of
      # one or more of these).
      class ResourceCommitment
        include Google::Apis::Core::Hashable
      
        # Name of the accelerator type or GPU resource. Specify this field only when
        # the type of hardware resource is ACCELERATOR.
        # Corresponds to the JSON property `acceleratorType`
        # @return [String]
        attr_accessor :accelerator_type
      
        # The quantity of the hardware resource that you want to commit to purchasing
        # (in a type-dependent unit).
        # 
        # - For vCPUs, you must specify an integer value.
        # - For memory, you specify the amount of MB that you want. The value you
        # specify must be a multiple of 256 MB, with up to 6.5 GB of
        # memory per every vCPU.
        # - For GPUs, you must specify an integer value.
        # - For Local SSD disks, you must specify the amount in GB. The size of a
        # single Local SSD disk is 375 GB.
        # Corresponds to the JSON property `amount`
        # @return [Fixnum]
        attr_accessor :amount
      
        # The type of hardware resource that you want to specify.
        # You can specify any of the following values:
        # 
        # - VCPU
        # - MEMORY
        # - LOCAL_SSD
        # - ACCELERATOR
        # Specify as a separate entry in the list for each
        # individual resource type.
        # 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)
          @accelerator_type = args[:accelerator_type] if args.key?(:accelerator_type)
          @amount = args[:amount] if args.key?(:amount)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # 
      class ResourceGroupReference
        include Google::Apis::Core::Hashable
      
        # A URI referencing one of the instance groups or network endpoint groups
        # listed in the backend service.
        # Corresponds to the JSON property `group`
        # @return [String]
        attr_accessor :group
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @group = args[:group] if args.key?(:group)
        end
      end
      
      # 
      class ResourcePoliciesScopedList
        include Google::Apis::Core::Hashable
      
        # A list of resourcePolicies contained in this scope.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Array<Google::Apis::ComputeV1::ResourcePolicy>]
        attr_accessor :resource_policies
      
        # Informational warning which replaces the list of resourcePolicies when
        # the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ResourcePoliciesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of resourcePolicies when
        # the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ResourcePoliciesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a Resource Policy resource. You can use resource policies to
      # schedule actions for some Compute Engine resources. For example, you can
      # use them toschedule persistent disk
      # snapshots.
      class ResourcePolicy
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # 
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Resource policy for disk consistency groups.
        # Corresponds to the JSON property `diskConsistencyGroupPolicy`
        # @return [Google::Apis::ComputeV1::ResourcePolicyDiskConsistencyGroupPolicy]
        attr_accessor :disk_consistency_group_policy
      
        # A GroupPlacementPolicy specifies resource placement configuration.
        # It specifies the failure bucket separation
        # Corresponds to the JSON property `groupPlacementPolicy`
        # @return [Google::Apis::ComputeV1::ResourcePolicyGroupPlacementPolicy]
        attr_accessor :group_placement_policy
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # An InstanceSchedulePolicy specifies when and how frequent certain
        # operations are performed on the instance.
        # Corresponds to the JSON property `instanceSchedulePolicy`
        # @return [Google::Apis::ComputeV1::ResourcePolicyInstanceSchedulePolicy]
        attr_accessor :instance_schedule_policy
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # resource_policies for resource policies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The name of the resource, provided by the client when initially creating
        # the resource. The resource name must be 1-63 characters long, and comply
        # withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # 
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Contains output only fields.
        # Use this sub-message for all output fields set on ResourcePolicy.
        # The internal structure of this "status" field should mimic the structure
        # of ResourcePolicy proto specification.
        # Corresponds to the JSON property `resourceStatus`
        # @return [Google::Apis::ComputeV1::ResourcePolicyResourceStatus]
        attr_accessor :resource_status
      
        # Output only. [Output Only] Server-defined fully-qualified URL for this
        # resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # A snapshot schedule policy specifies when and how frequently snapshots are
        # to be created for the target disk. Also specifies how many and how long
        # these scheduled snapshots should be retained.
        # Corresponds to the JSON property `snapshotSchedulePolicy`
        # @return [Google::Apis::ComputeV1::ResourcePolicySnapshotSchedulePolicy]
        attr_accessor :snapshot_schedule_policy
      
        # Output only. [Output Only] The status of resource policy creation.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Represents the workload policy.
        # Corresponds to the JSON property `workloadPolicy`
        # @return [Google::Apis::ComputeV1::ResourcePolicyWorkloadPolicy]
        attr_accessor :workload_policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @disk_consistency_group_policy = args[:disk_consistency_group_policy] if args.key?(:disk_consistency_group_policy)
          @group_placement_policy = args[:group_placement_policy] if args.key?(:group_placement_policy)
          @id = args[:id] if args.key?(:id)
          @instance_schedule_policy = args[:instance_schedule_policy] if args.key?(:instance_schedule_policy)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @region = args[:region] if args.key?(:region)
          @resource_status = args[:resource_status] if args.key?(:resource_status)
          @self_link = args[:self_link] if args.key?(:self_link)
          @snapshot_schedule_policy = args[:snapshot_schedule_policy] if args.key?(:snapshot_schedule_policy)
          @status = args[:status] if args.key?(:status)
          @workload_policy = args[:workload_policy] if args.key?(:workload_policy)
        end
      end
      
      # Contains a list of resourcePolicies.
      class ResourcePolicyAggregatedList
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of ResourcePolicy resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::ResourcePoliciesScopedList>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ResourcePolicyAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ResourcePolicyAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Time window specified for daily operations.
      class ResourcePolicyDailyCycle
        include Google::Apis::Core::Hashable
      
        # Defines a schedule with units measured in days. The value determines
        # how many days pass between the start of each cycle.
        # Corresponds to the JSON property `daysInCycle`
        # @return [Fixnum]
        attr_accessor :days_in_cycle
      
        # Output only. [Output only] A predetermined duration for the window,
        # automatically
        # chosen to be the smallest possible in the given scenario.
        # Corresponds to the JSON property `duration`
        # @return [String]
        attr_accessor :duration
      
        # Start time of the window. This must be in UTC format that resolves to one
        # of 00:00, 04:00, 08:00,12:00, 16:00, or 20:00. For
        # example, both 13:00-5 and 08:00 are valid.
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @days_in_cycle = args[:days_in_cycle] if args.key?(:days_in_cycle)
          @duration = args[:duration] if args.key?(:duration)
          @start_time = args[:start_time] if args.key?(:start_time)
        end
      end
      
      # Resource policy for disk consistency groups.
      class ResourcePolicyDiskConsistencyGroupPolicy
        include Google::Apis::Core::Hashable
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
        end
      end
      
      # A GroupPlacementPolicy specifies resource placement configuration.
      # It specifies the failure bucket separation
      class ResourcePolicyGroupPlacementPolicy
        include Google::Apis::Core::Hashable
      
        # Specifies the connection mode for the accelerator topology. If not
        # specified, the default is AUTO_CONNECT.
        # Corresponds to the JSON property `acceleratorTopologyMode`
        # @return [String]
        attr_accessor :accelerator_topology_mode
      
        # The number of availability domains to spread instances across. If two
        # instances are in different availability domain, they are not in the same
        # low latency network.
        # Corresponds to the JSON property `availabilityDomainCount`
        # @return [Fixnum]
        attr_accessor :availability_domain_count
      
        # Specifies network collocation
        # Corresponds to the JSON property `collocation`
        # @return [String]
        attr_accessor :collocation
      
        # Specifies the shape of the GPU slice, in slice based GPU families eg.
        # A4X.
        # Corresponds to the JSON property `gpuTopology`
        # @return [String]
        attr_accessor :gpu_topology
      
        # Number of VMs in this placement group. Google does not recommend that you
        # use this field unless you use a compact policy and you want your policy
        # to work only if it contains this exact number of VMs.
        # Corresponds to the JSON property `vmCount`
        # @return [Fixnum]
        attr_accessor :vm_count
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @accelerator_topology_mode = args[:accelerator_topology_mode] if args.key?(:accelerator_topology_mode)
          @availability_domain_count = args[:availability_domain_count] if args.key?(:availability_domain_count)
          @collocation = args[:collocation] if args.key?(:collocation)
          @gpu_topology = args[:gpu_topology] if args.key?(:gpu_topology)
          @vm_count = args[:vm_count] if args.key?(:vm_count)
        end
      end
      
      # Time window specified for hourly operations.
      class ResourcePolicyHourlyCycle
        include Google::Apis::Core::Hashable
      
        # Output only. [Output only] Duration of the time window, automatically chosen
        # to be
        # smallest possible in the given scenario.
        # Corresponds to the JSON property `duration`
        # @return [String]
        attr_accessor :duration
      
        # Defines a schedule with units measured in hours. The value determines
        # how many hours pass between the start of each cycle.
        # Corresponds to the JSON property `hoursInCycle`
        # @return [Fixnum]
        attr_accessor :hours_in_cycle
      
        # Time within the window to start the operations.
        # It must be in format "HH:MM", where HH : [00-23] and MM : [00-00] GMT.
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @duration = args[:duration] if args.key?(:duration)
          @hours_in_cycle = args[:hours_in_cycle] if args.key?(:hours_in_cycle)
          @start_time = args[:start_time] if args.key?(:start_time)
        end
      end
      
      # An InstanceSchedulePolicy specifies when and how frequent certain
      # operations are performed on the instance.
      class ResourcePolicyInstanceSchedulePolicy
        include Google::Apis::Core::Hashable
      
        # The expiration time of the schedule. The timestamp is an RFC3339 string.
        # Corresponds to the JSON property `expirationTime`
        # @return [String]
        attr_accessor :expiration_time
      
        # The start time of the schedule. The timestamp is an RFC3339 string.
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        # Specifies the time zone to be used in interpreting Schedule.schedule.
        # The value of this field must be a time zone name from the tz database:
        # https://wikipedia.org/wiki/Tz_database.
        # Corresponds to the JSON property `timeZone`
        # @return [String]
        attr_accessor :time_zone
      
        # Schedule for an instance operation.
        # Corresponds to the JSON property `vmStartSchedule`
        # @return [Google::Apis::ComputeV1::ResourcePolicyInstanceSchedulePolicySchedule]
        attr_accessor :vm_start_schedule
      
        # Schedule for an instance operation.
        # Corresponds to the JSON property `vmStopSchedule`
        # @return [Google::Apis::ComputeV1::ResourcePolicyInstanceSchedulePolicySchedule]
        attr_accessor :vm_stop_schedule
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @expiration_time = args[:expiration_time] if args.key?(:expiration_time)
          @start_time = args[:start_time] if args.key?(:start_time)
          @time_zone = args[:time_zone] if args.key?(:time_zone)
          @vm_start_schedule = args[:vm_start_schedule] if args.key?(:vm_start_schedule)
          @vm_stop_schedule = args[:vm_stop_schedule] if args.key?(:vm_stop_schedule)
        end
      end
      
      # Schedule for an instance operation.
      class ResourcePolicyInstanceSchedulePolicySchedule
        include Google::Apis::Core::Hashable
      
        # Specifies the frequency for the operation, using the unix-cron format.
        # Corresponds to the JSON property `schedule`
        # @return [String]
        attr_accessor :schedule
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @schedule = args[:schedule] if args.key?(:schedule)
        end
      end
      
      # 
      class ResourcePolicyList
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # [Output Only] A list of ResourcePolicy resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::ResourcePolicy>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource.Alwayscompute#resourcePoliciesList
        # for listsof resourcePolicies
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ResourcePolicyList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ResourcePolicyList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains output only fields.
      # Use this sub-message for all output fields set on ResourcePolicy.
      # The internal structure of this "status" field should mimic the structure
      # of ResourcePolicy proto specification.
      class ResourcePolicyResourceStatus
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Specifies a set of output values reffering to
        # the instance_schedule_policy system status.
        # This field should have the same name as corresponding policy field.
        # Corresponds to the JSON property `instanceSchedulePolicy`
        # @return [Google::Apis::ComputeV1::ResourcePolicyResourceStatusInstanceSchedulePolicyStatus]
        attr_accessor :instance_schedule_policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_schedule_policy = args[:instance_schedule_policy] if args.key?(:instance_schedule_policy)
        end
      end
      
      # 
      class ResourcePolicyResourceStatusInstanceSchedulePolicyStatus
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The last time the schedule successfully ran.
        # The timestamp is an RFC3339 string.
        # Corresponds to the JSON property `lastRunStartTime`
        # @return [String]
        attr_accessor :last_run_start_time
      
        # Output only. [Output Only] The next time the schedule is planned to run.
        # The actual time might be slightly different.
        # The timestamp is an RFC3339 string.
        # Corresponds to the JSON property `nextRunStartTime`
        # @return [String]
        attr_accessor :next_run_start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @last_run_start_time = args[:last_run_start_time] if args.key?(:last_run_start_time)
          @next_run_start_time = args[:next_run_start_time] if args.key?(:next_run_start_time)
        end
      end
      
      # A snapshot schedule policy specifies when and how frequently snapshots are
      # to be created for the target disk. Also specifies how many and how long
      # these scheduled snapshots should be retained.
      class ResourcePolicySnapshotSchedulePolicy
        include Google::Apis::Core::Hashable
      
        # Policy for retention of scheduled snapshots.
        # Corresponds to the JSON property `retentionPolicy`
        # @return [Google::Apis::ComputeV1::ResourcePolicySnapshotSchedulePolicyRetentionPolicy]
        attr_accessor :retention_policy
      
        # A schedule for disks where the schedueled operations are performed.
        # Corresponds to the JSON property `schedule`
        # @return [Google::Apis::ComputeV1::ResourcePolicySnapshotSchedulePolicySchedule]
        attr_accessor :schedule
      
        # Specified snapshot properties for scheduled snapshots created by this
        # policy.
        # Corresponds to the JSON property `snapshotProperties`
        # @return [Google::Apis::ComputeV1::ResourcePolicySnapshotSchedulePolicySnapshotProperties]
        attr_accessor :snapshot_properties
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @retention_policy = args[:retention_policy] if args.key?(:retention_policy)
          @schedule = args[:schedule] if args.key?(:schedule)
          @snapshot_properties = args[:snapshot_properties] if args.key?(:snapshot_properties)
        end
      end
      
      # Policy for retention of scheduled snapshots.
      class ResourcePolicySnapshotSchedulePolicyRetentionPolicy
        include Google::Apis::Core::Hashable
      
        # Maximum age of the snapshot that is allowed to be kept.
        # Corresponds to the JSON property `maxRetentionDays`
        # @return [Fixnum]
        attr_accessor :max_retention_days
      
        # Specifies the behavior to apply to scheduled snapshots when
        # the source disk is deleted.
        # Corresponds to the JSON property `onSourceDiskDelete`
        # @return [String]
        attr_accessor :on_source_disk_delete
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @max_retention_days = args[:max_retention_days] if args.key?(:max_retention_days)
          @on_source_disk_delete = args[:on_source_disk_delete] if args.key?(:on_source_disk_delete)
        end
      end
      
      # A schedule for disks where the schedueled operations are performed.
      class ResourcePolicySnapshotSchedulePolicySchedule
        include Google::Apis::Core::Hashable
      
        # Time window specified for daily operations.
        # Corresponds to the JSON property `dailySchedule`
        # @return [Google::Apis::ComputeV1::ResourcePolicyDailyCycle]
        attr_accessor :daily_schedule
      
        # Time window specified for hourly operations.
        # Corresponds to the JSON property `hourlySchedule`
        # @return [Google::Apis::ComputeV1::ResourcePolicyHourlyCycle]
        attr_accessor :hourly_schedule
      
        # Time window specified for weekly operations.
        # Corresponds to the JSON property `weeklySchedule`
        # @return [Google::Apis::ComputeV1::ResourcePolicyWeeklyCycle]
        attr_accessor :weekly_schedule
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @daily_schedule = args[:daily_schedule] if args.key?(:daily_schedule)
          @hourly_schedule = args[:hourly_schedule] if args.key?(:hourly_schedule)
          @weekly_schedule = args[:weekly_schedule] if args.key?(:weekly_schedule)
        end
      end
      
      # Specified snapshot properties for scheduled snapshots created by this
      # policy.
      class ResourcePolicySnapshotSchedulePolicySnapshotProperties
        include Google::Apis::Core::Hashable
      
        # Chain name that the snapshot is created in.
        # Corresponds to the JSON property `chainName`
        # @return [String]
        attr_accessor :chain_name
      
        # Indication to perform a 'guest aware' snapshot.
        # Corresponds to the JSON property `guestFlush`
        # @return [Boolean]
        attr_accessor :guest_flush
        alias_method :guest_flush?, :guest_flush
      
        # Labels to apply to scheduled snapshots. These can be later modified
        # by the setLabels method. Label values may be empty.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Cloud Storage bucket storage location of the auto snapshot (regional or
        # multi-regional).
        # Corresponds to the JSON property `storageLocations`
        # @return [Array<String>]
        attr_accessor :storage_locations
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @chain_name = args[:chain_name] if args.key?(:chain_name)
          @guest_flush = args[:guest_flush] if args.key?(:guest_flush)
          @labels = args[:labels] if args.key?(:labels)
          @storage_locations = args[:storage_locations] if args.key?(:storage_locations)
        end
      end
      
      # Time window specified for weekly operations.
      class ResourcePolicyWeeklyCycle
        include Google::Apis::Core::Hashable
      
        # Up to 7 intervals/windows, one for each day of the week.
        # Corresponds to the JSON property `dayOfWeeks`
        # @return [Array<Google::Apis::ComputeV1::ResourcePolicyWeeklyCycleDayOfWeek>]
        attr_accessor :day_of_weeks
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @day_of_weeks = args[:day_of_weeks] if args.key?(:day_of_weeks)
        end
      end
      
      # 
      class ResourcePolicyWeeklyCycleDayOfWeek
        include Google::Apis::Core::Hashable
      
        # Defines a schedule that runs on specific days of the week. Specify
        # one or more days. The following options are available:
        # MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY.
        # Corresponds to the JSON property `day`
        # @return [String]
        attr_accessor :day
      
        # Output only. [Output only] Duration of the time window, automatically chosen
        # to be
        # smallest possible in the given scenario.
        # Corresponds to the JSON property `duration`
        # @return [String]
        attr_accessor :duration
      
        # Time within the window to start the operations.
        # It must be in format "HH:MM", where HH : [00-23] and MM : [00-00] GMT.
        # Corresponds to the JSON property `startTime`
        # @return [String]
        attr_accessor :start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @day = args[:day] if args.key?(:day)
          @duration = args[:duration] if args.key?(:duration)
          @start_time = args[:start_time] if args.key?(:start_time)
        end
      end
      
      # Represents the workload policy.
      class ResourcePolicyWorkloadPolicy
        include Google::Apis::Core::Hashable
      
        # Specifies the topology required to create a partition for VMs that have
        # interconnected GPUs.
        # Corresponds to the JSON property `acceleratorTopology`
        # @return [String]
        attr_accessor :accelerator_topology
      
        # Specifies the maximum distance between instances.
        # Corresponds to the JSON property `maxTopologyDistance`
        # @return [String]
        attr_accessor :max_topology_distance
      
        # Specifies the intent of the instance placement in the MIG.
        # 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)
          @accelerator_topology = args[:accelerator_topology] if args.key?(:accelerator_topology)
          @max_topology_distance = args[:max_topology_distance] if args.key?(:max_topology_distance)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # Contains output only fields.
      # Use this sub-message for actual values set on Instance attributes as compared
      # to the value requested by the user (intent) in their instance CRUD calls.
      class ResourceStatus
        include Google::Apis::Core::Hashable
      
        # Effective values of predefined metadata keys for an instance.
        # Corresponds to the JSON property `effectiveInstanceMetadata`
        # @return [Google::Apis::ComputeV1::ResourceStatusEffectiveInstanceMetadata]
        attr_accessor :effective_instance_metadata
      
        # Output only. [Output Only] The precise location of your instance within the
        # zone's data
        # center, including the block, sub-block, and host. The field is formatted as
        # follows: blockId/subBlockId/hostId.
        # Corresponds to the JSON property `physicalHost`
        # @return [String]
        attr_accessor :physical_host
      
        # Represents the physical host topology of the host on which the VM is
        # running.
        # Corresponds to the JSON property `physicalHostTopology`
        # @return [Google::Apis::ComputeV1::ResourceStatusPhysicalHostTopology]
        attr_accessor :physical_host_topology
      
        # Reservation consumption information that the instance is consuming from.
        # Corresponds to the JSON property `reservationConsumptionInfo`
        # @return [Google::Apis::ComputeV1::ResourceStatusReservationConsumptionInfo]
        attr_accessor :reservation_consumption_info
      
        # 
        # Corresponds to the JSON property `scheduling`
        # @return [Google::Apis::ComputeV1::ResourceStatusScheduling]
        attr_accessor :scheduling
      
        # Upcoming Maintenance notification information.
        # Corresponds to the JSON property `upcomingMaintenance`
        # @return [Google::Apis::ComputeV1::UpcomingMaintenance]
        attr_accessor :upcoming_maintenance
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @effective_instance_metadata = args[:effective_instance_metadata] if args.key?(:effective_instance_metadata)
          @physical_host = args[:physical_host] if args.key?(:physical_host)
          @physical_host_topology = args[:physical_host_topology] if args.key?(:physical_host_topology)
          @reservation_consumption_info = args[:reservation_consumption_info] if args.key?(:reservation_consumption_info)
          @scheduling = args[:scheduling] if args.key?(:scheduling)
          @upcoming_maintenance = args[:upcoming_maintenance] if args.key?(:upcoming_maintenance)
        end
      end
      
      # Effective values of predefined metadata keys for an instance.
      class ResourceStatusEffectiveInstanceMetadata
        include Google::Apis::Core::Hashable
      
        # Effective block-project-ssh-keys value at Instance level.
        # Corresponds to the JSON property `blockProjectSshKeysMetadataValue`
        # @return [Boolean]
        attr_accessor :block_project_ssh_keys_metadata_value
        alias_method :block_project_ssh_keys_metadata_value?, :block_project_ssh_keys_metadata_value
      
        # Effective enable-guest-attributes value at Instance level.
        # Corresponds to the JSON property `enableGuestAttributesMetadataValue`
        # @return [Boolean]
        attr_accessor :enable_guest_attributes_metadata_value
        alias_method :enable_guest_attributes_metadata_value?, :enable_guest_attributes_metadata_value
      
        # Effective enable-os-inventory value at Instance level.
        # Corresponds to the JSON property `enableOsInventoryMetadataValue`
        # @return [Boolean]
        attr_accessor :enable_os_inventory_metadata_value
        alias_method :enable_os_inventory_metadata_value?, :enable_os_inventory_metadata_value
      
        # Effective enable-osconfig value at Instance level.
        # Corresponds to the JSON property `enableOsconfigMetadataValue`
        # @return [Boolean]
        attr_accessor :enable_osconfig_metadata_value
        alias_method :enable_osconfig_metadata_value?, :enable_osconfig_metadata_value
      
        # Effective enable-oslogin value at Instance level.
        # Corresponds to the JSON property `enableOsloginMetadataValue`
        # @return [Boolean]
        attr_accessor :enable_oslogin_metadata_value
        alias_method :enable_oslogin_metadata_value?, :enable_oslogin_metadata_value
      
        # Effective serial-port-enable value at Instance level.
        # Corresponds to the JSON property `serialPortEnableMetadataValue`
        # @return [Boolean]
        attr_accessor :serial_port_enable_metadata_value
        alias_method :serial_port_enable_metadata_value?, :serial_port_enable_metadata_value
      
        # Effective serial-port-logging-enable value at Instance level.
        # Corresponds to the JSON property `serialPortLoggingEnableMetadataValue`
        # @return [Boolean]
        attr_accessor :serial_port_logging_enable_metadata_value
        alias_method :serial_port_logging_enable_metadata_value?, :serial_port_logging_enable_metadata_value
      
        # Effective VM DNS setting at Instance level.
        # Corresponds to the JSON property `vmDnsSettingMetadataValue`
        # @return [String]
        attr_accessor :vm_dns_setting_metadata_value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @block_project_ssh_keys_metadata_value = args[:block_project_ssh_keys_metadata_value] if args.key?(:block_project_ssh_keys_metadata_value)
          @enable_guest_attributes_metadata_value = args[:enable_guest_attributes_metadata_value] if args.key?(:enable_guest_attributes_metadata_value)
          @enable_os_inventory_metadata_value = args[:enable_os_inventory_metadata_value] if args.key?(:enable_os_inventory_metadata_value)
          @enable_osconfig_metadata_value = args[:enable_osconfig_metadata_value] if args.key?(:enable_osconfig_metadata_value)
          @enable_oslogin_metadata_value = args[:enable_oslogin_metadata_value] if args.key?(:enable_oslogin_metadata_value)
          @serial_port_enable_metadata_value = args[:serial_port_enable_metadata_value] if args.key?(:serial_port_enable_metadata_value)
          @serial_port_logging_enable_metadata_value = args[:serial_port_logging_enable_metadata_value] if args.key?(:serial_port_logging_enable_metadata_value)
          @vm_dns_setting_metadata_value = args[:vm_dns_setting_metadata_value] if args.key?(:vm_dns_setting_metadata_value)
        end
      end
      
      # Represents the physical host topology of the host on which the VM is
      # running.
      class ResourceStatusPhysicalHostTopology
        include Google::Apis::Core::Hashable
      
        # [Output Only] The ID of the block in which the running instance is
        # located. Instances within the same block experience low network latency.
        # Corresponds to the JSON property `block`
        # @return [String]
        attr_accessor :block
      
        # [Output Only] The global name of the Compute Engine cluster where the
        # running instance is located.
        # Corresponds to the JSON property `cluster`
        # @return [String]
        attr_accessor :cluster
      
        # [Output Only] The ID of the host on which the running instance is located.
        # Instances on the same host experience the lowest possible network
        # latency.
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # [Output Only] The ID of the sub-block in which the running instance is
        # located. Instances in the same sub-block experience lower network latency
        # than instances in the same block.
        # Corresponds to the JSON property `subblock`
        # @return [String]
        attr_accessor :subblock
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @block = args[:block] if args.key?(:block)
          @cluster = args[:cluster] if args.key?(:cluster)
          @host = args[:host] if args.key?(:host)
          @subblock = args[:subblock] if args.key?(:subblock)
        end
      end
      
      # Reservation consumption information that the instance is consuming from.
      class ResourceStatusReservationConsumptionInfo
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The full resource name of the reservation that this
        # instance is consuming from.
        # Corresponds to the JSON property `consumedReservation`
        # @return [String]
        attr_accessor :consumed_reservation
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @consumed_reservation = args[:consumed_reservation] if args.key?(:consumed_reservation)
        end
      end
      
      # 
      class ResourceStatusScheduling
        include Google::Apis::Core::Hashable
      
        # Specifies the availability domain to place the instance in. The value
        # must be a number between 1 and the number of availability domains
        # specified in the spread placement policy attached to the instance.
        # Corresponds to the JSON property `availabilityDomain`
        # @return [Fixnum]
        attr_accessor :availability_domain
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @availability_domain = args[:availability_domain] if args.key?(:availability_domain)
        end
      end
      
      # Represents a Route resource.
      # A route defines a path from VM instances in the VPC network to a specific
      # destination. This destination can be inside or outside the VPC network.
      # For more information, read theRoutes overview.
      class Route
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] AS path.
        # Corresponds to the JSON property `asPaths`
        # @return [Array<Google::Apis::ComputeV1::RouteAsPath>]
        attr_accessor :as_paths
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this field when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # The destination range of outgoing packets that this route applies to. Both
        # IPv4 and IPv6 are supported.
        # Must specify an IPv4 range (e.g. 192.0.2.0/24) or an IPv6 range in RFC 4291
        # format (e.g. 2001:db8::/32). IPv6 range will be displayed using RFC 5952
        # compressed format.
        # Corresponds to the JSON property `destRange`
        # @return [String]
        attr_accessor :dest_range
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of this resource. Always compute#routes for
        # Route resources.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?`. The first character must be a
        # lowercase letter, and all following characters (except for the last
        # character) must be a dash, lowercase letter, or digit. The last character
        # must be a lowercase letter or digit.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Fully-qualified URL of the network that this route applies to.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # The URL to a gateway that should handle matching packets.
        # You can only specify the internet gateway using a full or
        # partial valid URL: projects/project/global/gateways/default-internet-gateway
        # Corresponds to the JSON property `nextHopGateway`
        # @return [String]
        attr_accessor :next_hop_gateway
      
        # Output only. [Output Only] The full resource name of the Network Connectivity
        # Center hub
        # that will handle matching packets.
        # Corresponds to the JSON property `nextHopHub`
        # @return [String]
        attr_accessor :next_hop_hub
      
        # The URL to a forwarding rule of typeloadBalancingScheme=INTERNAL that should
        # handle matching
        # packets or the IP address of the forwarding Rule.
        # For example, the following are all valid URLs:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/regions/region/
        # forwardingRules/forwardingRule
        # - regions/region/forwardingRules/forwardingRule
        # If an IP address is provided, must specify an IPv4 address in dot-decimal
        # notation or an IPv6 address in RFC 4291 format. For example, the following
        # are all valid IP addresses:
        # 
        # 
        # - 10.128.0.56
        # - 2001:db8::2d9:51:0:0
        # - 2001:db8:0:0:2d9:51:0:0
        # IPv6 addresses will be displayed using RFC 5952 compressed format (e.g.
        # 2001:db8::2d9:51:0:0). Should never be an IPv4-mapped IPv6 address.
        # Corresponds to the JSON property `nextHopIlb`
        # @return [String]
        attr_accessor :next_hop_ilb
      
        # The URL to an instance that should handle matching packets. You can specify
        # this as a full or partial URL.
        # For example:
        # https://www.googleapis.com/compute/v1/projects/project/zones/zone/instances/
        # Corresponds to the JSON property `nextHopInstance`
        # @return [String]
        attr_accessor :next_hop_instance
      
        # Output only. [Output only] Internal fixed region-to-region cost that Google
        # Cloud
        # calculates based on factors such as network performance, distance, and
        # available bandwidth between regions.
        # Corresponds to the JSON property `nextHopInterRegionCost`
        # @return [Fixnum]
        attr_accessor :next_hop_inter_region_cost
      
        # Output only. [Output Only] The URL to an InterconnectAttachment which is the
        # next hop
        # for the route.
        # This field will only be populated for dynamic routes generated by
        # Cloud Router with a linked interconnectAttachment or the static route
        # generated by each L2 Interconnect Attachment.
        # Corresponds to the JSON property `nextHopInterconnectAttachment`
        # @return [String]
        attr_accessor :next_hop_interconnect_attachment
      
        # The network IP address of an instance that should handle matching packets.
        # Both IPv6 address and IPv4 addresses are supported.
        # Must specify an IPv4 address in dot-decimal notation (e.g. 192.0.2.99) or
        # an IPv6 address in RFC 4291 format (e.g. 2001:db8::2d9:51:0:0 or
        # 2001:db8:0:0:2d9:51:0:0). IPv6 addresses will be displayed using RFC 5952
        # compressed format (e.g. 2001:db8::2d9:51:0:0). Should never be an
        # IPv4-mapped IPv6 address.
        # Corresponds to the JSON property `nextHopIp`
        # @return [String]
        attr_accessor :next_hop_ip
      
        # Output only. [Output Only] Multi-Exit Discriminator, a BGP route metric that
        # indicates
        # the desirability of a particular route in a network.
        # Corresponds to the JSON property `nextHopMed`
        # @return [Fixnum]
        attr_accessor :next_hop_med
      
        # The URL of the local network if it should handle matching packets.
        # Corresponds to the JSON property `nextHopNetwork`
        # @return [String]
        attr_accessor :next_hop_network
      
        # Output only. [Output Only] Indicates the origin of the route. Can be IGP
        # (Interior Gateway Protocol), EGP (Exterior Gateway Protocol),
        # or INCOMPLETE.
        # Corresponds to the JSON property `nextHopOrigin`
        # @return [String]
        attr_accessor :next_hop_origin
      
        # Output only. [Output Only] The network peering name that should handle
        # matching packets,
        # which should conform to RFC1035.
        # Corresponds to the JSON property `nextHopPeering`
        # @return [String]
        attr_accessor :next_hop_peering
      
        # The URL to a VpnTunnel that should handle matching packets.
        # Corresponds to the JSON property `nextHopVpnTunnel`
        # @return [String]
        attr_accessor :next_hop_vpn_tunnel
      
        # Additional route parameters.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::RouteParams]
        attr_accessor :params
      
        # The priority of this route. Priority is used to break ties in cases
        # where there is more than one matching route of equal prefix length. In
        # cases where multiple routes have equal prefix length, the one with the
        # lowest-numbered priority value wins. The default value is `1000`. The
        # priority value must be from `0` to `65535`, inclusive.
        # Corresponds to the JSON property `priority`
        # @return [Fixnum]
        attr_accessor :priority
      
        # [Output only] The status of the route. This status applies to
        # dynamic routes learned by Cloud Routers. It is also applicable to routes
        # undergoing migration.
        # Corresponds to the JSON property `routeStatus`
        # @return [String]
        attr_accessor :route_status
      
        # Output only. [Output Only] The type of this route, which can be one of the
        # following
        # values:
        # - 'TRANSIT' for a transit route that this router learned from
        # another Cloud Router and will readvertise to one of its BGP peers
        # - 'SUBNET' for a route from a subnet of the VPC
        # - 'BGP' for a route learned from a BGP peer of this router
        # - 'STATIC' for a static route
        # Corresponds to the JSON property `routeType`
        # @return [String]
        attr_accessor :route_type
      
        # [Output Only] Server-defined fully-qualified URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # A list of instance tags to which this route applies.
        # Corresponds to the JSON property `tags`
        # @return [Array<String>]
        attr_accessor :tags
      
        # Output only. [Output Only] If potential misconfigurations are detected for
        # this
        # route, this field will be populated with warning messages.
        # Corresponds to the JSON property `warnings`
        # @return [Array<Google::Apis::ComputeV1::Route::Warning>]
        attr_accessor :warnings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @as_paths = args[:as_paths] if args.key?(:as_paths)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @dest_range = args[:dest_range] if args.key?(:dest_range)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @next_hop_gateway = args[:next_hop_gateway] if args.key?(:next_hop_gateway)
          @next_hop_hub = args[:next_hop_hub] if args.key?(:next_hop_hub)
          @next_hop_ilb = args[:next_hop_ilb] if args.key?(:next_hop_ilb)
          @next_hop_instance = args[:next_hop_instance] if args.key?(:next_hop_instance)
          @next_hop_inter_region_cost = args[:next_hop_inter_region_cost] if args.key?(:next_hop_inter_region_cost)
          @next_hop_interconnect_attachment = args[:next_hop_interconnect_attachment] if args.key?(:next_hop_interconnect_attachment)
          @next_hop_ip = args[:next_hop_ip] if args.key?(:next_hop_ip)
          @next_hop_med = args[:next_hop_med] if args.key?(:next_hop_med)
          @next_hop_network = args[:next_hop_network] if args.key?(:next_hop_network)
          @next_hop_origin = args[:next_hop_origin] if args.key?(:next_hop_origin)
          @next_hop_peering = args[:next_hop_peering] if args.key?(:next_hop_peering)
          @next_hop_vpn_tunnel = args[:next_hop_vpn_tunnel] if args.key?(:next_hop_vpn_tunnel)
          @params = args[:params] if args.key?(:params)
          @priority = args[:priority] if args.key?(:priority)
          @route_status = args[:route_status] if args.key?(:route_status)
          @route_type = args[:route_type] if args.key?(:route_type)
          @self_link = args[:self_link] if args.key?(:self_link)
          @tags = args[:tags] if args.key?(:tags)
          @warnings = args[:warnings] if args.key?(:warnings)
        end
        
        # 
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::Route::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class RouteAsPath
        include Google::Apis::Core::Hashable
      
        # [Output Only] The AS numbers of the AS Path.
        # Corresponds to the JSON property `asLists`
        # @return [Array<Fixnum>]
        attr_accessor :as_lists
      
        # [Output Only] The type of the AS Path, which can be one of the following
        # values:
        # - 'AS_SET': unordered set of autonomous systems that the route
        # in has traversed
        # - 'AS_SEQUENCE': ordered set of autonomous
        # systems that the route has traversed
        # - 'AS_CONFED_SEQUENCE':
        # ordered set of Member Autonomous Systems in the local confederation that
        # the route has traversed
        # - 'AS_CONFED_SET': unordered set of
        # Member Autonomous Systems in the local confederation that the route has
        # traversed
        # Corresponds to the JSON property `pathSegmentType`
        # @return [String]
        attr_accessor :path_segment_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @as_lists = args[:as_lists] if args.key?(:as_lists)
          @path_segment_type = args[:path_segment_type] if args.key?(:path_segment_type)
        end
      end
      
      # Contains a list of Route resources.
      class RouteList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Route resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Route>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::RouteList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::RouteList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Additional route parameters.
      class RouteParams
        include Google::Apis::Core::Hashable
      
        # Tag keys/values directly bound to this resource.
        # Tag keys and values have the same definition as resource
        # manager tags. The field is allowed for INSERT
        # only. The keys/values to set on the resource should be specified in
        # either ID ` : ` or Namespaced format
        # ` : `.
        # For example the following are valid inputs:
        # * `"tagKeys/333" : "tagValues/444", "tagKeys/123" : "tagValues/456"`
        # * `"123/environment" : "production", "345/abc" : "xyz"`
        # Note:
        # * Invalid combinations of ID & namespaced format is not supported. For
        # instance: `"123/environment" : "tagValues/444"` is invalid.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # 
      class RoutePolicy
        include Google::Apis::Core::Hashable
      
        # An optional description of route policy.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # A fingerprint for the Route Policy being applied to this Router, which is
        # essentially a hash of the Route Policy used for optimistic locking.
        # The fingerprint is initially generated by Compute Engine and changes
        # after every request to modify or update Route Policy. You must always
        # provide an up-to-date fingerprint hash in order to update or change
        # labels.
        # To see the latest fingerprint, make a getRoutePolicy() request
        # to retrieve a Route Policy.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Route Policy name, which must be a resource ID segment and unique
        # within all the router's Route Policies. Name should conform to RFC1035.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # List of terms (the order in the list is not important, they are evaluated
        # in order of priority). Order of policies is not retained and might change
        # when getting policy later.
        # Corresponds to the JSON property `terms`
        # @return [Array<Google::Apis::ComputeV1::RoutePolicyPolicyTerm>]
        attr_accessor :terms
      
        # 
        # 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)
          @description = args[:description] if args.key?(:description)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @name = args[:name] if args.key?(:name)
          @terms = args[:terms] if args.key?(:terms)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # 
      class RoutePolicyPolicyTerm
        include Google::Apis::Core::Hashable
      
        # CEL expressions to evaluate to modify a route when this term matches.
        # Corresponds to the JSON property `actions`
        # @return [Array<Google::Apis::ComputeV1::Expr>]
        attr_accessor :actions
      
        # Represents a textual expression in the Common Expression Language (CEL)
        # syntax. CEL is a C-like expression language. The syntax and semantics of CEL
        # are documented at https://github.com/google/cel-spec.
        # Example (Comparison):
        # title: "Summary size limit"
        # description: "Determines if a summary is less than 100 chars"
        # expression: "document.summary.size() < 100"
        # Example (Equality):
        # title: "Requestor is owner"
        # description: "Determines if requestor is the document owner"
        # expression: "document.owner == request.auth.claims.email"
        # Example (Logic):
        # title: "Public documents"
        # description: "Determine whether the document should be publicly visible"
        # expression: "document.type != 'private' && document.type != 'internal'"
        # Example (Data Manipulation):
        # title: "Notification string"
        # description: "Create a notification string with a timestamp."
        # expression: "'New message received at ' + string(document.create_time)"
        # The exact variables and functions that may be referenced within an expression
        # are determined by the service that evaluates it. See the service
        # documentation for additional information.
        # Corresponds to the JSON property `match`
        # @return [Google::Apis::ComputeV1::Expr]
        attr_accessor :match
      
        # The evaluation priority for this term, which must be between 0
        # (inclusive) and 2^31 (exclusive), and unique within the list.
        # Corresponds to the JSON property `priority`
        # @return [Fixnum]
        attr_accessor :priority
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @actions = args[:actions] if args.key?(:actions)
          @match = args[:match] if args.key?(:match)
          @priority = args[:priority] if args.key?(:priority)
        end
      end
      
      # Represents a Cloud Router resource.
      # For more information about Cloud Router, read theCloud
      # Router overview.
      class Router
        include Google::Apis::Core::Hashable
      
        # BGP information specific to this router.
        # Corresponds to the JSON property `bgp`
        # @return [Google::Apis::ComputeV1::RouterBgp]
        attr_accessor :bgp
      
        # BGP information that must be configured into the routing stack to
        # establish BGP peering. This information must specify the peer ASN and
        # either the interface name, IP address, or peer IP address. Please refer
        # toRFC4273.
        # Corresponds to the JSON property `bgpPeers`
        # @return [Array<Google::Apis::ComputeV1::RouterBgpPeer>]
        attr_accessor :bgp_peers
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Indicates if a router is dedicated for use with encrypted VLAN
        # attachments (interconnectAttachments).
        # Corresponds to the JSON property `encryptedInterconnectRouter`
        # @return [Boolean]
        attr_accessor :encrypted_interconnect_router
        alias_method :encrypted_interconnect_router?, :encrypted_interconnect_router
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Router interfaces.
        # To create a BGP peer that uses a router interface,
        # the interface must have one of the following fields specified:
        # 
        # - linkedVpnTunnel
        # - linkedInterconnectAttachment
        # - subnetwork
        # You can create a router interface without any of these fields specified.
        # However, you cannot create a BGP peer that uses that interface.
        # Corresponds to the JSON property `interfaces`
        # @return [Array<Google::Apis::ComputeV1::RouterInterface>]
        attr_accessor :interfaces
      
        # Output only. [Output Only] Type of resource. Always compute#router for
        # routers.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Keys used for MD5 authentication.
        # Corresponds to the JSON property `md5AuthenticationKeys`
        # @return [Array<Google::Apis::ComputeV1::RouterMd5AuthenticationKey>]
        attr_accessor :md5_authentication_keys
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A list of NAT services created in this router.
        # Corresponds to the JSON property `nats`
        # @return [Array<Google::Apis::ComputeV1::RouterNat>]
        attr_accessor :nats
      
        # URI of the network to which this router belongs.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # Additional router parameters.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::RouterParams]
        attr_accessor :params
      
        # [Output Only] URI of the region where the router resides.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bgp = args[:bgp] if args.key?(:bgp)
          @bgp_peers = args[:bgp_peers] if args.key?(:bgp_peers)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @encrypted_interconnect_router = args[:encrypted_interconnect_router] if args.key?(:encrypted_interconnect_router)
          @id = args[:id] if args.key?(:id)
          @interfaces = args[:interfaces] if args.key?(:interfaces)
          @kind = args[:kind] if args.key?(:kind)
          @md5_authentication_keys = args[:md5_authentication_keys] if args.key?(:md5_authentication_keys)
          @name = args[:name] if args.key?(:name)
          @nats = args[:nats] if args.key?(:nats)
          @network = args[:network] if args.key?(:network)
          @params = args[:params] if args.key?(:params)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
        end
      end
      
      # Description-tagged IP ranges for the router to advertise.
      class RouterAdvertisedIpRange
        include Google::Apis::Core::Hashable
      
        # User-specified description for the IP range.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # The IP range to advertise. The value must be a CIDR-formatted string.
        # Corresponds to the JSON property `range`
        # @return [String]
        attr_accessor :range
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @description = args[:description] if args.key?(:description)
          @range = args[:range] if args.key?(:range)
        end
      end
      
      # Contains a list of routers.
      class RouterAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Router resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::RoutersScopedList>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::RouterAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::RouterAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class RouterBgp
        include Google::Apis::Core::Hashable
      
        # User-specified flag to indicate which mode to use for advertisement.
        # The options are DEFAULT or CUSTOM.
        # Corresponds to the JSON property `advertiseMode`
        # @return [String]
        attr_accessor :advertise_mode
      
        # User-specified list of prefix groups to advertise in custom mode.
        # This field can only be populated if advertise_mode is CUSTOM and
        # is advertised to all peers of the router.
        # These groups will be advertised in addition to any specified prefixes.
        # Leave this field blank to advertise no custom groups.
        # Corresponds to the JSON property `advertisedGroups`
        # @return [Array<String>]
        attr_accessor :advertised_groups
      
        # User-specified list of individual IP ranges to advertise in custom mode.
        # This field can only be populated if advertise_mode is CUSTOM and
        # is advertised to all peers of the router.
        # These IP ranges will be advertised in addition to any specified groups.
        # Leave this field blank to advertise no custom IP ranges.
        # Corresponds to the JSON property `advertisedIpRanges`
        # @return [Array<Google::Apis::ComputeV1::RouterAdvertisedIpRange>]
        attr_accessor :advertised_ip_ranges
      
        # Local BGP Autonomous System Number (ASN).
        # Must be anRFC6996 private ASN, either 16-bit or 32-bit. The
        # value will be fixed for this router resource. All VPN tunnels that link
        # to this router will have the same local ASN.
        # Corresponds to the JSON property `asn`
        # @return [Fixnum]
        attr_accessor :asn
      
        # Explicitly specifies a range of valid BGP Identifiers for this Router. It
        # is provided as a link-local IPv4 range (from 169.254.0.0/16), of size at
        # least /30, even if the BGP sessions are over IPv6. It must not overlap
        # with any IPv4 BGP session ranges.
        # Other vendors commonly call this "router ID".
        # Corresponds to the JSON property `identifierRange`
        # @return [String]
        attr_accessor :identifier_range
      
        # The interval in seconds between BGP keepalive messages that are
        # sent to the peer.
        # Hold time is three times the interval at which keepalive messages are
        # sent, and the hold time is the maximum number of seconds allowed to
        # elapse between successive keepalive messages that BGP receives from a
        # peer.
        # BGP will use the smaller of either the local hold time value or the
        # peer's hold time value as the hold time for the BGP connection between
        # the two peers.
        # If set, this value must be between 20 and 60. The default is 20.
        # Corresponds to the JSON property `keepaliveInterval`
        # @return [Fixnum]
        attr_accessor :keepalive_interval
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertise_mode = args[:advertise_mode] if args.key?(:advertise_mode)
          @advertised_groups = args[:advertised_groups] if args.key?(:advertised_groups)
          @advertised_ip_ranges = args[:advertised_ip_ranges] if args.key?(:advertised_ip_ranges)
          @asn = args[:asn] if args.key?(:asn)
          @identifier_range = args[:identifier_range] if args.key?(:identifier_range)
          @keepalive_interval = args[:keepalive_interval] if args.key?(:keepalive_interval)
        end
      end
      
      # 
      class RouterBgpPeer
        include Google::Apis::Core::Hashable
      
        # User-specified flag to indicate which mode to use for advertisement.
        # Corresponds to the JSON property `advertiseMode`
        # @return [String]
        attr_accessor :advertise_mode
      
        # User-specified list of prefix groups to advertise in custom mode,
        # which currently supports the following option:
        # 
        # - ALL_SUBNETS: Advertises all of the router's own VPC subnets. This
        # excludes any routes learned for subnets that use
        # VPC Network Peering.
        # Note that this field can only be populated if advertise_mode is CUSTOM
        # and overrides the list defined for the router (in the "bgp" message).
        # These groups are advertised in addition to any specified prefixes.
        # Leave this field blank to advertise no custom groups.
        # Corresponds to the JSON property `advertisedGroups`
        # @return [Array<String>]
        attr_accessor :advertised_groups
      
        # User-specified list of individual IP ranges to advertise in custom mode.
        # This field can only be populated if advertise_mode is CUSTOM and
        # overrides the list defined for the router (in the "bgp" message).
        # These IP ranges are advertised in addition to any specified groups.
        # Leave this field blank to advertise no custom IP ranges.
        # Corresponds to the JSON property `advertisedIpRanges`
        # @return [Array<Google::Apis::ComputeV1::RouterAdvertisedIpRange>]
        attr_accessor :advertised_ip_ranges
      
        # The priority of routes advertised to this BGP peer. Where there is more
        # than one matching route of maximum length, the routes with the lowest
        # priority value win.
        # Corresponds to the JSON property `advertisedRoutePriority`
        # @return [Fixnum]
        attr_accessor :advertised_route_priority
      
        # BFD configuration for the BGP peering.
        # Corresponds to the JSON property `bfd`
        # @return [Google::Apis::ComputeV1::RouterBgpPeerBfd]
        attr_accessor :bfd
      
        # A list of user-defined custom learned route IP address ranges for a BGP
        # session.
        # Corresponds to the JSON property `customLearnedIpRanges`
        # @return [Array<Google::Apis::ComputeV1::RouterBgpPeerCustomLearnedIpRange>]
        attr_accessor :custom_learned_ip_ranges
      
        # The user-defined custom learned route priority for a BGP session. This
        # value is applied to all custom learned route ranges for the session.
        # You can choose a value from `0` to `65335`. If you don't provide a
        # value, Google Cloud assigns a priority of `100` to the ranges.
        # Corresponds to the JSON property `customLearnedRoutePriority`
        # @return [Fixnum]
        attr_accessor :custom_learned_route_priority
      
        # The status of the BGP peer connection.
        # If set to FALSE, any active session with the peer is terminated and
        # all associated routing information is removed. If set to TRUE, the
        # peer connection can be established with routing information. The default
        # is TRUE.
        # Corresponds to the JSON property `enable`
        # @return [String]
        attr_accessor :enable
      
        # Enable IPv4 traffic over BGP Peer. It is enabled by default if
        # the peerIpAddress is version 4.
        # Corresponds to the JSON property `enableIpv4`
        # @return [Boolean]
        attr_accessor :enable_ipv4
        alias_method :enable_ipv4?, :enable_ipv4
      
        # Enable IPv6 traffic over BGP Peer. It is enabled by default if the
        # peerIpAddress is version 6.
        # Corresponds to the JSON property `enableIpv6`
        # @return [Boolean]
        attr_accessor :enable_ipv6
        alias_method :enable_ipv6?, :enable_ipv6
      
        # List of export policies applied to this peer, in the order they must be
        # evaluated. The name must correspond to an existing policy that has
        # ROUTE_POLICY_TYPE_EXPORT type.
        # Corresponds to the JSON property `exportPolicies`
        # @return [Array<String>]
        attr_accessor :export_policies
      
        # List of import policies applied to this peer, in the order they must be
        # evaluated. The name must correspond to an existing policy that has
        # ROUTE_POLICY_TYPE_IMPORT type.
        # Corresponds to the JSON property `importPolicies`
        # @return [Array<String>]
        attr_accessor :import_policies
      
        # Name of the interface the BGP peer is associated with.
        # Corresponds to the JSON property `interfaceName`
        # @return [String]
        attr_accessor :interface_name
      
        # IP address of the interface inside Google Cloud Platform.
        # Corresponds to the JSON property `ipAddress`
        # @return [String]
        attr_accessor :ip_address
      
        # IPv4 address of the interface inside Google Cloud Platform.
        # Corresponds to the JSON property `ipv4NexthopAddress`
        # @return [String]
        attr_accessor :ipv4_nexthop_address
      
        # IPv6 address of the interface inside Google Cloud Platform.
        # Corresponds to the JSON property `ipv6NexthopAddress`
        # @return [String]
        attr_accessor :ipv6_nexthop_address
      
        # Output only. [Output Only] The resource that configures and manages this BGP
        # peer.
        # 
        # -  MANAGED_BY_USER is the default value and can be managed by you
        # or other users
        # - MANAGED_BY_ATTACHMENT is a BGP peer that is configured and managed
        # by Cloud Interconnect, specifically by an InterconnectAttachment of type
        # PARTNER. Google automatically creates, updates, and deletes this type of
        # BGP peer when the PARTNER InterconnectAttachment is created, updated,
        # or deleted.
        # Corresponds to the JSON property `managementType`
        # @return [String]
        attr_accessor :management_type
      
        # Present if MD5 authentication is enabled for the peering. Must be the
        # name of one of the entries in the Router.md5_authentication_keys. The
        # field must comply with RFC1035.
        # Corresponds to the JSON property `md5AuthenticationKeyName`
        # @return [String]
        attr_accessor :md5_authentication_key_name
      
        # Name of this BGP peer.
        # The name must be 1-63 characters long, and comply withRFC1035. Specifically,
        # the name must be 1-63
        # characters long and match the regular expression
        # `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a
        # lowercase letter, and all following characters must be a dash, lowercase
        # letter, or digit, except the last character, which cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Peer BGP Autonomous System Number (ASN). Each BGP interface may use
        # a different value.
        # Corresponds to the JSON property `peerAsn`
        # @return [Fixnum]
        attr_accessor :peer_asn
      
        # IP address of the BGP interface outside Google Cloud Platform.
        # Corresponds to the JSON property `peerIpAddress`
        # @return [String]
        attr_accessor :peer_ip_address
      
        # IPv4 address of the BGP interface outside Google Cloud Platform.
        # Corresponds to the JSON property `peerIpv4NexthopAddress`
        # @return [String]
        attr_accessor :peer_ipv4_nexthop_address
      
        # IPv6 address of the BGP interface outside Google Cloud Platform.
        # Corresponds to the JSON property `peerIpv6NexthopAddress`
        # @return [String]
        attr_accessor :peer_ipv6_nexthop_address
      
        # URI of the VM instance that is used as third-party router
        # appliances such as Next Gen Firewalls, Virtual Routers, or Router
        # Appliances. The VM instance must be located in zones contained in the
        # same region as this Cloud Router.
        # The VM instance is the peer side of the BGP session.
        # Corresponds to the JSON property `routerApplianceInstance`
        # @return [String]
        attr_accessor :router_appliance_instance
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertise_mode = args[:advertise_mode] if args.key?(:advertise_mode)
          @advertised_groups = args[:advertised_groups] if args.key?(:advertised_groups)
          @advertised_ip_ranges = args[:advertised_ip_ranges] if args.key?(:advertised_ip_ranges)
          @advertised_route_priority = args[:advertised_route_priority] if args.key?(:advertised_route_priority)
          @bfd = args[:bfd] if args.key?(:bfd)
          @custom_learned_ip_ranges = args[:custom_learned_ip_ranges] if args.key?(:custom_learned_ip_ranges)
          @custom_learned_route_priority = args[:custom_learned_route_priority] if args.key?(:custom_learned_route_priority)
          @enable = args[:enable] if args.key?(:enable)
          @enable_ipv4 = args[:enable_ipv4] if args.key?(:enable_ipv4)
          @enable_ipv6 = args[:enable_ipv6] if args.key?(:enable_ipv6)
          @export_policies = args[:export_policies] if args.key?(:export_policies)
          @import_policies = args[:import_policies] if args.key?(:import_policies)
          @interface_name = args[:interface_name] if args.key?(:interface_name)
          @ip_address = args[:ip_address] if args.key?(:ip_address)
          @ipv4_nexthop_address = args[:ipv4_nexthop_address] if args.key?(:ipv4_nexthop_address)
          @ipv6_nexthop_address = args[:ipv6_nexthop_address] if args.key?(:ipv6_nexthop_address)
          @management_type = args[:management_type] if args.key?(:management_type)
          @md5_authentication_key_name = args[:md5_authentication_key_name] if args.key?(:md5_authentication_key_name)
          @name = args[:name] if args.key?(:name)
          @peer_asn = args[:peer_asn] if args.key?(:peer_asn)
          @peer_ip_address = args[:peer_ip_address] if args.key?(:peer_ip_address)
          @peer_ipv4_nexthop_address = args[:peer_ipv4_nexthop_address] if args.key?(:peer_ipv4_nexthop_address)
          @peer_ipv6_nexthop_address = args[:peer_ipv6_nexthop_address] if args.key?(:peer_ipv6_nexthop_address)
          @router_appliance_instance = args[:router_appliance_instance] if args.key?(:router_appliance_instance)
        end
      end
      
      # 
      class RouterBgpPeerBfd
        include Google::Apis::Core::Hashable
      
        # The minimum interval, in milliseconds, between BFD control packets
        # received from the peer router. The actual value is negotiated between
        # the two routers and is equal to the greater of this value and the
        # transmit interval of the other router.
        # If set, this value must be between 1000 and 30000.
        # The default is 1000.
        # Corresponds to the JSON property `minReceiveInterval`
        # @return [Fixnum]
        attr_accessor :min_receive_interval
      
        # The minimum interval, in milliseconds, between BFD control packets
        # transmitted to the peer router. The actual value is negotiated between
        # the two routers and is equal to the greater of this value and the
        # corresponding receive interval of the other router.
        # If set, this value must be between 1000 and 30000.
        # The default is 1000.
        # Corresponds to the JSON property `minTransmitInterval`
        # @return [Fixnum]
        attr_accessor :min_transmit_interval
      
        # The number of consecutive BFD packets that must be missed
        # before BFD declares that a peer is unavailable.
        # If set, the value must be a value between 5 and 16.
        # The default is 5.
        # Corresponds to the JSON property `multiplier`
        # @return [Fixnum]
        attr_accessor :multiplier
      
        # The BFD session initialization mode for this BGP peer.
        # If set to ACTIVE, the Cloud Router will initiate the BFD session for
        # this BGP peer. If set to PASSIVE, the Cloud Router will wait for the
        # peer router to initiate the BFD session for this BGP peer. If set to
        # DISABLED, BFD is disabled for this BGP peer. The default is DISABLED.
        # Corresponds to the JSON property `sessionInitializationMode`
        # @return [String]
        attr_accessor :session_initialization_mode
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @min_receive_interval = args[:min_receive_interval] if args.key?(:min_receive_interval)
          @min_transmit_interval = args[:min_transmit_interval] if args.key?(:min_transmit_interval)
          @multiplier = args[:multiplier] if args.key?(:multiplier)
          @session_initialization_mode = args[:session_initialization_mode] if args.key?(:session_initialization_mode)
        end
      end
      
      # 
      class RouterBgpPeerCustomLearnedIpRange
        include Google::Apis::Core::Hashable
      
        # The custom learned route IP address range. Must be a valid
        # CIDR-formatted prefix. If an IP address is provided without a subnet
        # mask, it is interpreted as, for IPv4, a `/32` singular IP address
        # range, and, for IPv6, `/128`.
        # Corresponds to the JSON property `range`
        # @return [String]
        attr_accessor :range
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @range = args[:range] if args.key?(:range)
        end
      end
      
      # 
      class RouterInterface
        include Google::Apis::Core::Hashable
      
        # IP address and range of the interface.
        # 
        # - For Internet Protocol version 4 (IPv4), the IP range must be in
        # theRFC3927 link-local IP address space. The value must
        # be a CIDR-formatted string, for example, 169.254.0.1/30.
        # Note: Do not truncate the IP address, as it represents the IP address of
        # the interface.
        # - For Internet Protocol version 6 (IPv6), the value
        # must be a unique local address (ULA) range from fdff:1::/64
        # with a mask length of 126 or less. This value should be a CIDR-formatted
        # string, for example, fdff:1::1/112. Within the router's
        # VPC, this IPv6 prefix will be reserved exclusively for this connection
        # and cannot be used for any other purpose.
        # Corresponds to the JSON property `ipRange`
        # @return [String]
        attr_accessor :ip_range
      
        # IP version of this interface.
        # Corresponds to the JSON property `ipVersion`
        # @return [String]
        attr_accessor :ip_version
      
        # URI of the linked Interconnect attachment. It must be in the same region
        # as the router. Each interface can have one linked resource, which can be
        # a VPN tunnel, an Interconnect attachment, or a subnetwork.
        # Corresponds to the JSON property `linkedInterconnectAttachment`
        # @return [String]
        attr_accessor :linked_interconnect_attachment
      
        # URI of the linked VPN tunnel, which must be in the same region as the
        # router. Each interface can have one linked resource, which can be
        # a VPN tunnel, an Interconnect attachment, or a subnetwork.
        # Corresponds to the JSON property `linkedVpnTunnel`
        # @return [String]
        attr_accessor :linked_vpn_tunnel
      
        # Output only. [Output Only] The resource that configures and manages this
        # interface.
        # 
        # - MANAGED_BY_USER is the default value and can be managed directly
        # by users.
        # - MANAGED_BY_ATTACHMENT is an interface that is configured and
        # managed by Cloud Interconnect, specifically, by an InterconnectAttachment
        # of type PARTNER. Google automatically creates, updates, and deletes
        # this type of interface when the PARTNER InterconnectAttachment is
        # created, updated, or deleted.
        # Corresponds to the JSON property `managementType`
        # @return [String]
        attr_accessor :management_type
      
        # Name of this interface entry.
        # The name must be 1-63 characters long, and comply withRFC1035. Specifically,
        # the name must be 1-63
        # characters long and match the regular expression
        # `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a
        # lowercase letter, and all following characters must be a dash, lowercase
        # letter, or digit, except the last character, which cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The regional private internal IP address that is used to establish
        # BGP sessions to a VM instance acting as a third-party
        # Router Appliance, such as a Next Gen Firewall, a Virtual Router, or
        # an SD-WAN VM.
        # Corresponds to the JSON property `privateIpAddress`
        # @return [String]
        attr_accessor :private_ip_address
      
        # Name of the interface that will be redundant with the current interface
        # you are creating. The redundantInterface must belong to the same Cloud
        # Router as the interface here. To establish the BGP session to a Router
        # Appliance VM, you must create two BGP peers. The two BGP peers must be
        # attached to two separate interfaces that are redundant with each other.
        # The redundant_interface must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the redundant_interface must
        # be 1-63 characters long and match the regular expression
        # `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a
        # lowercase letter, and all following characters must be a dash, lowercase
        # letter, or digit, except the last character, which cannot be a dash.
        # Corresponds to the JSON property `redundantInterface`
        # @return [String]
        attr_accessor :redundant_interface
      
        # The URI of the subnetwork resource that this interface belongs to, which
        # must be in the same region as the Cloud Router.
        # When you establish a BGP session to a VM instance using this interface,
        # the VM instance must belong to the same subnetwork as the subnetwork
        # specified here.
        # Corresponds to the JSON property `subnetwork`
        # @return [String]
        attr_accessor :subnetwork
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ip_range = args[:ip_range] if args.key?(:ip_range)
          @ip_version = args[:ip_version] if args.key?(:ip_version)
          @linked_interconnect_attachment = args[:linked_interconnect_attachment] if args.key?(:linked_interconnect_attachment)
          @linked_vpn_tunnel = args[:linked_vpn_tunnel] if args.key?(:linked_vpn_tunnel)
          @management_type = args[:management_type] if args.key?(:management_type)
          @name = args[:name] if args.key?(:name)
          @private_ip_address = args[:private_ip_address] if args.key?(:private_ip_address)
          @redundant_interface = args[:redundant_interface] if args.key?(:redundant_interface)
          @subnetwork = args[:subnetwork] if args.key?(:subnetwork)
        end
      end
      
      # Contains a list of Router resources.
      class RouterList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Router resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Router>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#router for
        # routers.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::RouterList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::RouterList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class RouterMd5AuthenticationKey
        include Google::Apis::Core::Hashable
      
        # [Input only] Value of the key.
        # For patch and update calls, it can be skipped to
        # copy the value from the previous configuration. This is allowed if the
        # key with the same name existed before the operation. Maximum length is 80
        # characters. Can only contain printable ASCII characters.
        # Corresponds to the JSON property `key`
        # @return [String]
        attr_accessor :key
      
        # Name used to identify the key.
        # Must be unique within a router. Must be referenced by exactly
        # one bgpPeer. Must comply withRFC1035.
        # 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)
          @key = args[:key] if args.key?(:key)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Represents a Nat resource. It enables the VMs within the specified
      # subnetworks to access Internet without external IP addresses. It specifies
      # a list of subnetworks (and the ranges within) that want to use NAT.
      # Customers can also provide the external IPs that would be used for NAT. GCP
      # would auto-allocate ephemeral IPs if no external IPs are provided.
      class RouterNat
        include Google::Apis::Core::Hashable
      
        # The network tier to use when automatically reserving NAT IP addresses.
        # Must be one of: PREMIUM, STANDARD.
        # If not specified, then the current
        # project-level default tier is used.
        # Corresponds to the JSON property `autoNetworkTier`
        # @return [String]
        attr_accessor :auto_network_tier
      
        # A list of URLs of the IP resources to be drained. These IPs
        # must be valid static external IPs that have been assigned to the NAT.
        # These IPs should be used for updating/patching a NAT only.
        # Corresponds to the JSON property `drainNatIps`
        # @return [Array<String>]
        attr_accessor :drain_nat_ips
      
        # Enable Dynamic Port Allocation.
        # If not specified, it is disabled by default.
        # If set to true,
        # 
        # - Dynamic Port Allocation will be enabled on this NAT
        # config.
        # - enableEndpointIndependentMapping cannot be set to true.
        # - If minPorts is set, minPortsPerVm must be set to a
        # power of two greater than or equal to 32. If minPortsPerVm is not set, a
        # minimum of 32 ports will be allocated to a VM from this NAT
        # config.
        # Corresponds to the JSON property `enableDynamicPortAllocation`
        # @return [Boolean]
        attr_accessor :enable_dynamic_port_allocation
        alias_method :enable_dynamic_port_allocation?, :enable_dynamic_port_allocation
      
        # 
        # Corresponds to the JSON property `enableEndpointIndependentMapping`
        # @return [Boolean]
        attr_accessor :enable_endpoint_independent_mapping
        alias_method :enable_endpoint_independent_mapping?, :enable_endpoint_independent_mapping
      
        # List of NAT-ted endpoint types supported by the Nat Gateway. If the list
        # is empty, then it will be equivalent to include ENDPOINT_TYPE_VM
        # Corresponds to the JSON property `endpointTypes`
        # @return [Array<String>]
        attr_accessor :endpoint_types
      
        # Timeout (in seconds) for ICMP connections. Defaults to 30s if not set.
        # Corresponds to the JSON property `icmpIdleTimeoutSec`
        # @return [Fixnum]
        attr_accessor :icmp_idle_timeout_sec
      
        # Configuration of logging on a NAT.
        # Corresponds to the JSON property `logConfig`
        # @return [Google::Apis::ComputeV1::RouterNatLogConfig]
        attr_accessor :log_config
      
        # Maximum number of ports allocated to a VM from this NAT config when
        # Dynamic Port Allocation is enabled.
        # If Dynamic Port Allocation is not enabled, this field has no effect.
        # If Dynamic Port Allocation is enabled, and this field is set, it must be
        # set to a power of two greater than minPortsPerVm, or 64 if minPortsPerVm
        # is not set.
        # If Dynamic Port Allocation is enabled and this field is not set,
        # a maximum of 65536 ports will be allocated to a VM from this NAT
        # config.
        # Corresponds to the JSON property `maxPortsPerVm`
        # @return [Fixnum]
        attr_accessor :max_ports_per_vm
      
        # Minimum number of ports allocated to a VM from this NAT config. If not
        # set, a default number of ports is allocated to a VM. This is rounded
        # up to the nearest power of 2. For example, if the value of this field is
        # 50, at least 64 ports are allocated to a VM.
        # Corresponds to the JSON property `minPortsPerVm`
        # @return [Fixnum]
        attr_accessor :min_ports_per_vm
      
        # Unique name of this Nat service.
        # The name must be 1-63 characters long and comply withRFC1035.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # List of Subnetwork resources whose traffic should be translated by NAT64
        # Gateway. It is used only when LIST_OF_IPV6_SUBNETWORKS is
        # selected for the SubnetworkIpRangeToNat64Option above.
        # Corresponds to the JSON property `nat64Subnetworks`
        # @return [Array<Google::Apis::ComputeV1::RouterNatSubnetworkToNat64>]
        attr_accessor :nat64_subnetworks
      
        # Specify the NatIpAllocateOption, which can take one of the following
        # values:
        # 
        # - MANUAL_ONLY: Uses only Nat IP addresses provided by
        # customers. When there are not enough specified Nat IPs, the Nat service
        # fails for new VMs.
        # - AUTO_ONLY: Nat IPs are allocated by Google Cloud Platform; customers
        # can't specify any Nat IPs. When choosing AUTO_ONLY, then nat_ip should
        # be empty.
        # Corresponds to the JSON property `natIpAllocateOption`
        # @return [String]
        attr_accessor :nat_ip_allocate_option
      
        # A list of URLs of the IP resources used for this Nat service. These IP
        # addresses must be valid static external IP addresses assigned to the
        # project.
        # Corresponds to the JSON property `natIps`
        # @return [Array<String>]
        attr_accessor :nat_ips
      
        # A list of rules associated with this NAT.
        # Corresponds to the JSON property `rules`
        # @return [Array<Google::Apis::ComputeV1::RouterNatRule>]
        attr_accessor :rules
      
        # Specify the Nat option, which can take one of the following values:
        # 
        # - ALL_SUBNETWORKS_ALL_IP_RANGES: All of the IP ranges in every
        # Subnetwork are allowed to Nat.
        # - ALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES: All of the primary IP ranges
        # in every Subnetwork are allowed to Nat.
        # - LIST_OF_SUBNETWORKS: A list of Subnetworks are allowed to Nat
        # (specified in the field subnetwork below)
        # The default is SUBNETWORK_IP_RANGE_TO_NAT_OPTION_UNSPECIFIED.
        # Note that if this field contains ALL_SUBNETWORKS_ALL_IP_RANGES then there
        # should not be any other Router.Nat section in any Router for this network
        # in this region.
        # Corresponds to the JSON property `sourceSubnetworkIpRangesToNat`
        # @return [String]
        attr_accessor :source_subnetwork_ip_ranges_to_nat
      
        # Specify the Nat option for NAT64, which can take one of the following
        # values:
        # 
        # - ALL_IPV6_SUBNETWORKS: All of the IP ranges in
        # every Subnetwork are allowed to Nat.
        # - LIST_OF_IPV6_SUBNETWORKS: A list of Subnetworks are allowed to Nat
        # (specified in the field nat64_subnetwork below)
        # The default is NAT64_OPTION_UNSPECIFIED.
        # Note that if this field contains NAT64_ALL_V6_SUBNETWORKS no other
        # Router.Nat section in this region can also enable NAT64 for any
        # Subnetworks in this network. Other Router.Nat sections can still be
        # present to enable NAT44 only.
        # Corresponds to the JSON property `sourceSubnetworkIpRangesToNat64`
        # @return [String]
        attr_accessor :source_subnetwork_ip_ranges_to_nat64
      
        # A list of Subnetwork resources whose traffic should be translated by NAT
        # Gateway. It is used only when LIST_OF_SUBNETWORKS is selected for the
        # SubnetworkIpRangeToNatOption above.
        # Corresponds to the JSON property `subnetworks`
        # @return [Array<Google::Apis::ComputeV1::RouterNatSubnetworkToNat>]
        attr_accessor :subnetworks
      
        # Timeout (in seconds) for TCP established connections. Defaults to 1200s
        # if not set.
        # Corresponds to the JSON property `tcpEstablishedIdleTimeoutSec`
        # @return [Fixnum]
        attr_accessor :tcp_established_idle_timeout_sec
      
        # Timeout (in seconds) for TCP connections that are in TIME_WAIT state.
        # Defaults to 120s if not set.
        # Corresponds to the JSON property `tcpTimeWaitTimeoutSec`
        # @return [Fixnum]
        attr_accessor :tcp_time_wait_timeout_sec
      
        # Timeout (in seconds) for TCP transitory connections. Defaults to 30s if
        # not set.
        # Corresponds to the JSON property `tcpTransitoryIdleTimeoutSec`
        # @return [Fixnum]
        attr_accessor :tcp_transitory_idle_timeout_sec
      
        # Indicates whether this NAT is used for public or private IP
        # translation. If unspecified, it defaults to PUBLIC.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # Timeout (in seconds) for UDP connections. Defaults to 30s if not set.
        # Corresponds to the JSON property `udpIdleTimeoutSec`
        # @return [Fixnum]
        attr_accessor :udp_idle_timeout_sec
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auto_network_tier = args[:auto_network_tier] if args.key?(:auto_network_tier)
          @drain_nat_ips = args[:drain_nat_ips] if args.key?(:drain_nat_ips)
          @enable_dynamic_port_allocation = args[:enable_dynamic_port_allocation] if args.key?(:enable_dynamic_port_allocation)
          @enable_endpoint_independent_mapping = args[:enable_endpoint_independent_mapping] if args.key?(:enable_endpoint_independent_mapping)
          @endpoint_types = args[:endpoint_types] if args.key?(:endpoint_types)
          @icmp_idle_timeout_sec = args[:icmp_idle_timeout_sec] if args.key?(:icmp_idle_timeout_sec)
          @log_config = args[:log_config] if args.key?(:log_config)
          @max_ports_per_vm = args[:max_ports_per_vm] if args.key?(:max_ports_per_vm)
          @min_ports_per_vm = args[:min_ports_per_vm] if args.key?(:min_ports_per_vm)
          @name = args[:name] if args.key?(:name)
          @nat64_subnetworks = args[:nat64_subnetworks] if args.key?(:nat64_subnetworks)
          @nat_ip_allocate_option = args[:nat_ip_allocate_option] if args.key?(:nat_ip_allocate_option)
          @nat_ips = args[:nat_ips] if args.key?(:nat_ips)
          @rules = args[:rules] if args.key?(:rules)
          @source_subnetwork_ip_ranges_to_nat = args[:source_subnetwork_ip_ranges_to_nat] if args.key?(:source_subnetwork_ip_ranges_to_nat)
          @source_subnetwork_ip_ranges_to_nat64 = args[:source_subnetwork_ip_ranges_to_nat64] if args.key?(:source_subnetwork_ip_ranges_to_nat64)
          @subnetworks = args[:subnetworks] if args.key?(:subnetworks)
          @tcp_established_idle_timeout_sec = args[:tcp_established_idle_timeout_sec] if args.key?(:tcp_established_idle_timeout_sec)
          @tcp_time_wait_timeout_sec = args[:tcp_time_wait_timeout_sec] if args.key?(:tcp_time_wait_timeout_sec)
          @tcp_transitory_idle_timeout_sec = args[:tcp_transitory_idle_timeout_sec] if args.key?(:tcp_transitory_idle_timeout_sec)
          @type = args[:type] if args.key?(:type)
          @udp_idle_timeout_sec = args[:udp_idle_timeout_sec] if args.key?(:udp_idle_timeout_sec)
        end
      end
      
      # Configuration of logging on a NAT.
      class RouterNatLogConfig
        include Google::Apis::Core::Hashable
      
        # Indicates whether or not to export logs. This is false by default.
        # Corresponds to the JSON property `enable`
        # @return [Boolean]
        attr_accessor :enable
        alias_method :enable?, :enable
      
        # Specify the desired filtering of logs on this NAT. If unspecified,
        # logs are exported for all connections handled by this NAT.
        # This option can take one of the following values:
        # 
        # - ERRORS_ONLY: Export logs only for connection failures.
        # - TRANSLATIONS_ONLY: Export logs only for successful
        # connections.
        # - ALL: Export logs for all connections, successful and
        # unsuccessful.
        # Corresponds to the JSON property `filter`
        # @return [String]
        attr_accessor :filter
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @enable = args[:enable] if args.key?(:enable)
          @filter = args[:filter] if args.key?(:filter)
        end
      end
      
      # 
      class RouterNatRule
        include Google::Apis::Core::Hashable
      
        # The action to be enforced for traffic that matches this rule.
        # Corresponds to the JSON property `action`
        # @return [Google::Apis::ComputeV1::RouterNatRuleAction]
        attr_accessor :action
      
        # An optional description of this rule.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # CEL expression that specifies the match condition that egress traffic
        # from a VM is evaluated against. If it evaluates to true, the
        # corresponding `action` is enforced.
        # The following examples are valid match expressions for public NAT:
        # `inIpRange(destination.ip, '1.1.0.0/16') || inIpRange(destination.ip,
        # '2.2.0.0/16')`
        # `destination.ip == '1.1.0.1' || destination.ip == '8.8.8.8'`
        # The following example is a valid match expression for private NAT:
        # `nexthop.hub ==
        # '//networkconnectivity.googleapis.com/projects/my-project/locations/global/
        # hubs/hub-1'`
        # Corresponds to the JSON property `match`
        # @return [String]
        attr_accessor :match
      
        # An integer uniquely identifying a rule in the list. The rule number
        # must be a positive value between 0 and 65000, and
        # must be unique among rules within a NAT.
        # Corresponds to the JSON property `ruleNumber`
        # @return [Fixnum]
        attr_accessor :rule_number
      
        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)
          @match = args[:match] if args.key?(:match)
          @rule_number = args[:rule_number] if args.key?(:rule_number)
        end
      end
      
      # 
      class RouterNatRuleAction
        include Google::Apis::Core::Hashable
      
        # A list of URLs of the IP resources used for this NAT rule. These IP
        # addresses must be valid static external IP addresses assigned to the
        # project.
        # This field is used for public NAT.
        # Corresponds to the JSON property `sourceNatActiveIps`
        # @return [Array<String>]
        attr_accessor :source_nat_active_ips
      
        # A list of URLs of the subnetworks used as source ranges for this
        # NAT Rule. These subnetworks must have purpose set to PRIVATE_NAT.
        # This field is used for private NAT.
        # Corresponds to the JSON property `sourceNatActiveRanges`
        # @return [Array<String>]
        attr_accessor :source_nat_active_ranges
      
        # A list of URLs of the IP resources to be drained. These IPs
        # must be valid static external IPs that have been assigned to the NAT.
        # These IPs should be used for updating/patching a NAT rule only.
        # This field is used for public NAT.
        # Corresponds to the JSON property `sourceNatDrainIps`
        # @return [Array<String>]
        attr_accessor :source_nat_drain_ips
      
        # A list of URLs of subnetworks representing source ranges to be
        # drained. This is only supported on patch/update, and these
        # subnetworks must have previously been used as active ranges in this
        # NAT Rule.
        # This field is used for private NAT.
        # Corresponds to the JSON property `sourceNatDrainRanges`
        # @return [Array<String>]
        attr_accessor :source_nat_drain_ranges
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @source_nat_active_ips = args[:source_nat_active_ips] if args.key?(:source_nat_active_ips)
          @source_nat_active_ranges = args[:source_nat_active_ranges] if args.key?(:source_nat_active_ranges)
          @source_nat_drain_ips = args[:source_nat_drain_ips] if args.key?(:source_nat_drain_ips)
          @source_nat_drain_ranges = args[:source_nat_drain_ranges] if args.key?(:source_nat_drain_ranges)
        end
      end
      
      # Defines the IP ranges that want to use NAT for a subnetwork.
      class RouterNatSubnetworkToNat
        include Google::Apis::Core::Hashable
      
        # URL for the subnetwork resource that will use NAT.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A list of the secondary ranges of the Subnetwork that are allowed to
        # use NAT. This can be populated only if "LIST_OF_SECONDARY_IP_RANGES"
        # is one of the values in source_ip_ranges_to_nat.
        # Corresponds to the JSON property `secondaryIpRangeNames`
        # @return [Array<String>]
        attr_accessor :secondary_ip_range_names
      
        # Specify the options for NAT ranges in the Subnetwork. All
        # options of a single value are valid except
        # NAT_IP_RANGE_OPTION_UNSPECIFIED.
        # The only valid option with multiple values is: ["PRIMARY_IP_RANGE",
        # "LIST_OF_SECONDARY_IP_RANGES"]
        # Default: [ALL_IP_RANGES]
        # Corresponds to the JSON property `sourceIpRangesToNat`
        # @return [Array<String>]
        attr_accessor :source_ip_ranges_to_nat
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @secondary_ip_range_names = args[:secondary_ip_range_names] if args.key?(:secondary_ip_range_names)
          @source_ip_ranges_to_nat = args[:source_ip_ranges_to_nat] if args.key?(:source_ip_ranges_to_nat)
        end
      end
      
      # Specifies a subnetwork to enable NAT64.
      class RouterNatSubnetworkToNat64
        include Google::Apis::Core::Hashable
      
        # URL for the subnetwork resource that will use NAT64.
        # 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)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # Additional router parameters.
      class RouterParams
        include Google::Apis::Core::Hashable
      
        # Tag keys/values directly bound to this resource.
        # The field is allowed for INSERT
        # only. The keys/values to set on the resource should be specified in
        # either ID ` : ` or Namespaced format
        # ` : `.
        # For example the following are valid inputs:
        # * `"tagKeys/333" : "tagValues/444", "tagKeys/123" : "tagValues/456"`
        # * `"123/environment" : "production", "345/abc" : "xyz"`
        # Note:
        # * Invalid combinations of ID & namespaced format is not supported. For
        # instance: `"123/environment" : "tagValues/444"` is invalid.
        # * Inconsistent format is not supported. For instance:
        # `"tagKeys/333" : "tagValues/444", "123/env" : "prod"` is invalid.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # 
      class RouterStatus
        include Google::Apis::Core::Hashable
      
        # A list of the best dynamic routes for this Cloud Router's Virtual Private
        # Cloud (VPC) network in the same region as this Cloud Router.
        # Lists all of the best routes per prefix that are programmed into this
        # region's VPC data plane.
        # When global dynamic routing mode is turned on in the VPC network, this list
        # can include cross-region dynamic routes from Cloud Routers in other
        # regions.
        # Corresponds to the JSON property `bestRoutes`
        # @return [Array<Google::Apis::ComputeV1::Route>]
        attr_accessor :best_routes
      
        # A list of the best BGP routes learned by this Cloud Router.
        # It is possible that routes listed might not be programmed into the data
        # plane, if the Google Cloud control plane finds a more optimal route for a
        # prefix than a route learned by this Cloud Router.
        # Corresponds to the JSON property `bestRoutesForRouter`
        # @return [Array<Google::Apis::ComputeV1::Route>]
        attr_accessor :best_routes_for_router
      
        # 
        # Corresponds to the JSON property `bgpPeerStatus`
        # @return [Array<Google::Apis::ComputeV1::RouterStatusBgpPeerStatus>]
        attr_accessor :bgp_peer_status
      
        # 
        # Corresponds to the JSON property `natStatus`
        # @return [Array<Google::Apis::ComputeV1::RouterStatusNatStatus>]
        attr_accessor :nat_status
      
        # URI of the network to which this router belongs.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @best_routes = args[:best_routes] if args.key?(:best_routes)
          @best_routes_for_router = args[:best_routes_for_router] if args.key?(:best_routes_for_router)
          @bgp_peer_status = args[:bgp_peer_status] if args.key?(:bgp_peer_status)
          @nat_status = args[:nat_status] if args.key?(:nat_status)
          @network = args[:network] if args.key?(:network)
        end
      end
      
      # 
      class RouterStatusBgpPeerStatus
        include Google::Apis::Core::Hashable
      
        # Routes that were advertised to the remote BGP peer
        # Corresponds to the JSON property `advertisedRoutes`
        # @return [Array<Google::Apis::ComputeV1::Route>]
        attr_accessor :advertised_routes
      
        # Next free: 15
        # Corresponds to the JSON property `bfdStatus`
        # @return [Google::Apis::ComputeV1::BfdStatus]
        attr_accessor :bfd_status
      
        # Output only. Enable IPv4 traffic over BGP Peer.
        # It is enabled by default if the peerIpAddress is version 4.
        # Corresponds to the JSON property `enableIpv4`
        # @return [Boolean]
        attr_accessor :enable_ipv4
        alias_method :enable_ipv4?, :enable_ipv4
      
        # Output only. Enable IPv6 traffic over BGP Peer.
        # It is enabled by default if the peerIpAddress is version 6.
        # Corresponds to the JSON property `enableIpv6`
        # @return [Boolean]
        attr_accessor :enable_ipv6
        alias_method :enable_ipv6?, :enable_ipv6
      
        # Output only. IP address of the local BGP interface.
        # Corresponds to the JSON property `ipAddress`
        # @return [String]
        attr_accessor :ip_address
      
        # Output only. IPv4 address of the local BGP interface.
        # Corresponds to the JSON property `ipv4NexthopAddress`
        # @return [String]
        attr_accessor :ipv4_nexthop_address
      
        # Output only. IPv6 address of the local BGP interface.
        # Corresponds to the JSON property `ipv6NexthopAddress`
        # @return [String]
        attr_accessor :ipv6_nexthop_address
      
        # Output only. URL of the VPN tunnel that this BGP peer controls.
        # Corresponds to the JSON property `linkedVpnTunnel`
        # @return [String]
        attr_accessor :linked_vpn_tunnel
      
        # Informs whether MD5 authentication is enabled on this BGP peer.
        # Corresponds to the JSON property `md5AuthEnabled`
        # @return [Boolean]
        attr_accessor :md5_auth_enabled
        alias_method :md5_auth_enabled?, :md5_auth_enabled
      
        # Output only. Name of this BGP peer. Unique within the Routers resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. Number of routes learned from the remote BGP Peer.
        # Corresponds to the JSON property `numLearnedRoutes`
        # @return [Fixnum]
        attr_accessor :num_learned_routes
      
        # Output only. IP address of the remote BGP interface.
        # Corresponds to the JSON property `peerIpAddress`
        # @return [String]
        attr_accessor :peer_ip_address
      
        # Output only. IPv4 address of the remote BGP interface.
        # Corresponds to the JSON property `peerIpv4NexthopAddress`
        # @return [String]
        attr_accessor :peer_ipv4_nexthop_address
      
        # Output only. IPv6 address of the remote BGP interface.
        # Corresponds to the JSON property `peerIpv6NexthopAddress`
        # @return [String]
        attr_accessor :peer_ipv6_nexthop_address
      
        # Output only. [Output only] URI of the VM instance that is used as third-party
        # router
        # appliances such as Next Gen Firewalls, Virtual Routers, or Router
        # Appliances.
        # The VM instance is the peer side of the BGP session.
        # Corresponds to the JSON property `routerApplianceInstance`
        # @return [String]
        attr_accessor :router_appliance_instance
      
        # Output only. The state of the BGP session. For a list of possible values for
        # this
        # field, seeBGP session states.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # Output only. Status of the BGP peer: `UP, DOWN`
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Indicates why particular status was returned.
        # Corresponds to the JSON property `statusReason`
        # @return [String]
        attr_accessor :status_reason
      
        # Output only. Time this session has been up.
        # Format:
        # 14 years, 51 weeks, 6 days, 23 hours, 59 minutes, 59 seconds
        # Corresponds to the JSON property `uptime`
        # @return [String]
        attr_accessor :uptime
      
        # Output only. Time this session has been up, in seconds.
        # Format:
        # 145
        # Corresponds to the JSON property `uptimeSeconds`
        # @return [String]
        attr_accessor :uptime_seconds
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @advertised_routes = args[:advertised_routes] if args.key?(:advertised_routes)
          @bfd_status = args[:bfd_status] if args.key?(:bfd_status)
          @enable_ipv4 = args[:enable_ipv4] if args.key?(:enable_ipv4)
          @enable_ipv6 = args[:enable_ipv6] if args.key?(:enable_ipv6)
          @ip_address = args[:ip_address] if args.key?(:ip_address)
          @ipv4_nexthop_address = args[:ipv4_nexthop_address] if args.key?(:ipv4_nexthop_address)
          @ipv6_nexthop_address = args[:ipv6_nexthop_address] if args.key?(:ipv6_nexthop_address)
          @linked_vpn_tunnel = args[:linked_vpn_tunnel] if args.key?(:linked_vpn_tunnel)
          @md5_auth_enabled = args[:md5_auth_enabled] if args.key?(:md5_auth_enabled)
          @name = args[:name] if args.key?(:name)
          @num_learned_routes = args[:num_learned_routes] if args.key?(:num_learned_routes)
          @peer_ip_address = args[:peer_ip_address] if args.key?(:peer_ip_address)
          @peer_ipv4_nexthop_address = args[:peer_ipv4_nexthop_address] if args.key?(:peer_ipv4_nexthop_address)
          @peer_ipv6_nexthop_address = args[:peer_ipv6_nexthop_address] if args.key?(:peer_ipv6_nexthop_address)
          @router_appliance_instance = args[:router_appliance_instance] if args.key?(:router_appliance_instance)
          @state = args[:state] if args.key?(:state)
          @status = args[:status] if args.key?(:status)
          @status_reason = args[:status_reason] if args.key?(:status_reason)
          @uptime = args[:uptime] if args.key?(:uptime)
          @uptime_seconds = args[:uptime_seconds] if args.key?(:uptime_seconds)
        end
      end
      
      # Status of a NAT contained in this router.
      class RouterStatusNatStatus
        include Google::Apis::Core::Hashable
      
        # Output only. A list of IPs auto-allocated for NAT. Example: ["1.1.1.1", "129.2.
        # 16.89"]
        # Corresponds to the JSON property `autoAllocatedNatIps`
        # @return [Array<String>]
        attr_accessor :auto_allocated_nat_ips
      
        # Output only. A list of IPs auto-allocated for NAT that are in drain mode.
        # Example: ["1.1.1.1", "179.12.26.133"].
        # Corresponds to the JSON property `drainAutoAllocatedNatIps`
        # @return [Array<String>]
        attr_accessor :drain_auto_allocated_nat_ips
      
        # Output only. A list of IPs user-allocated for NAT that are in drain mode.
        # Example: ["1.1.1.1", "179.12.26.133"].
        # Corresponds to the JSON property `drainUserAllocatedNatIps`
        # @return [Array<String>]
        attr_accessor :drain_user_allocated_nat_ips
      
        # Output only. The number of extra IPs to allocate. This will be greater than 0
        # only if
        # user-specified IPs are NOT enough to allow all configured VMs to use NAT.
        # This value is meaningful only when auto-allocation of NAT IPs is *not*
        # used.
        # Corresponds to the JSON property `minExtraNatIpsNeeded`
        # @return [Fixnum]
        attr_accessor :min_extra_nat_ips_needed
      
        # Output only. Unique name of this NAT.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. Number of VM endpoints (i.e., Nics) that can use NAT.
        # Corresponds to the JSON property `numVmEndpointsWithNatMappings`
        # @return [Fixnum]
        attr_accessor :num_vm_endpoints_with_nat_mappings
      
        # Status of rules in this NAT.
        # Corresponds to the JSON property `ruleStatus`
        # @return [Array<Google::Apis::ComputeV1::RouterStatusNatStatusNatRuleStatus>]
        attr_accessor :rule_status
      
        # Output only. A list of fully qualified URLs of reserved IP address resources.
        # Corresponds to the JSON property `userAllocatedNatIpResources`
        # @return [Array<String>]
        attr_accessor :user_allocated_nat_ip_resources
      
        # Output only. A list of IPs user-allocated for NAT.
        # They will be raw IP strings like "179.12.26.133".
        # Corresponds to the JSON property `userAllocatedNatIps`
        # @return [Array<String>]
        attr_accessor :user_allocated_nat_ips
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auto_allocated_nat_ips = args[:auto_allocated_nat_ips] if args.key?(:auto_allocated_nat_ips)
          @drain_auto_allocated_nat_ips = args[:drain_auto_allocated_nat_ips] if args.key?(:drain_auto_allocated_nat_ips)
          @drain_user_allocated_nat_ips = args[:drain_user_allocated_nat_ips] if args.key?(:drain_user_allocated_nat_ips)
          @min_extra_nat_ips_needed = args[:min_extra_nat_ips_needed] if args.key?(:min_extra_nat_ips_needed)
          @name = args[:name] if args.key?(:name)
          @num_vm_endpoints_with_nat_mappings = args[:num_vm_endpoints_with_nat_mappings] if args.key?(:num_vm_endpoints_with_nat_mappings)
          @rule_status = args[:rule_status] if args.key?(:rule_status)
          @user_allocated_nat_ip_resources = args[:user_allocated_nat_ip_resources] if args.key?(:user_allocated_nat_ip_resources)
          @user_allocated_nat_ips = args[:user_allocated_nat_ips] if args.key?(:user_allocated_nat_ips)
        end
      end
      
      # Status of a NAT Rule contained in this NAT.
      class RouterStatusNatStatusNatRuleStatus
        include Google::Apis::Core::Hashable
      
        # Output only. A list of active IPs for NAT.
        # Example: ["1.1.1.1", "179.12.26.133"].
        # Corresponds to the JSON property `activeNatIps`
        # @return [Array<String>]
        attr_accessor :active_nat_ips
      
        # Output only. A list of IPs for NAT that are in drain mode.
        # Example: ["1.1.1.1", "179.12.26.133"].
        # Corresponds to the JSON property `drainNatIps`
        # @return [Array<String>]
        attr_accessor :drain_nat_ips
      
        # Output only. The number of extra IPs to allocate. This will be greater than 0
        # only
        # if the existing IPs in this NAT Rule are NOT enough to allow all
        # configured VMs to use NAT.
        # Corresponds to the JSON property `minExtraIpsNeeded`
        # @return [Fixnum]
        attr_accessor :min_extra_ips_needed
      
        # Output only. Number of VM endpoints (i.e., NICs) that have NAT Mappings from
        # this
        # NAT Rule.
        # Corresponds to the JSON property `numVmEndpointsWithNatMappings`
        # @return [Fixnum]
        attr_accessor :num_vm_endpoints_with_nat_mappings
      
        # Output only. Rule number of the rule.
        # Corresponds to the JSON property `ruleNumber`
        # @return [Fixnum]
        attr_accessor :rule_number
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @active_nat_ips = args[:active_nat_ips] if args.key?(:active_nat_ips)
          @drain_nat_ips = args[:drain_nat_ips] if args.key?(:drain_nat_ips)
          @min_extra_ips_needed = args[:min_extra_ips_needed] if args.key?(:min_extra_ips_needed)
          @num_vm_endpoints_with_nat_mappings = args[:num_vm_endpoints_with_nat_mappings] if args.key?(:num_vm_endpoints_with_nat_mappings)
          @rule_number = args[:rule_number] if args.key?(:rule_number)
        end
      end
      
      # 
      class RouterStatusResponse
        include Google::Apis::Core::Hashable
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # 
        # Corresponds to the JSON property `result`
        # @return [Google::Apis::ComputeV1::RouterStatus]
        attr_accessor :result
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @kind = args[:kind] if args.key?(:kind)
          @result = args[:result] if args.key?(:result)
        end
      end
      
      # 
      class RoutersGetRoutePolicyResponse
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `resource`
        # @return [Google::Apis::ComputeV1::RoutePolicy]
        attr_accessor :resource
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource = args[:resource] if args.key?(:resource)
        end
      end
      
      # 
      class RoutersListBgpRoutes
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # routersListBgpRoutes for lists of bgp routes.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] A list of bgp routes.
        # Corresponds to the JSON property `result`
        # @return [Array<Google::Apis::ComputeV1::BgpRoute>]
        attr_accessor :result
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::RoutersListBgpRoutes::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @result = args[:result] if args.key?(:result)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::RoutersListBgpRoutes::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class RoutersListRoutePolicies
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # routersListRoutePolicies for lists of route policies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] A list of route policies.
        # Corresponds to the JSON property `result`
        # @return [Array<Google::Apis::ComputeV1::RoutePolicy>]
        attr_accessor :result
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::RoutersListRoutePolicies::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @result = args[:result] if args.key?(:result)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::RoutersListRoutePolicies::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class RoutersPreviewResponse
        include Google::Apis::Core::Hashable
      
        # Represents a Cloud Router resource.
        # For more information about Cloud Router, read theCloud
        # Router overview.
        # Corresponds to the JSON property `resource`
        # @return [Google::Apis::ComputeV1::Router]
        attr_accessor :resource
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource = args[:resource] if args.key?(:resource)
        end
      end
      
      # 
      class RoutersScopedList
        include Google::Apis::Core::Hashable
      
        # A list of routers contained in this scope.
        # Corresponds to the JSON property `routers`
        # @return [Array<Google::Apis::ComputeV1::Router>]
        attr_accessor :routers
      
        # Informational warning which replaces the list of routers when
        # the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::RoutersScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @routers = args[:routers] if args.key?(:routers)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of routers when
        # the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::RoutersScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class SslHealthCheck
        include Google::Apis::Core::Hashable
      
        # The TCP port number to which the health check prober sends packets. The
        # default value is 443. Valid values are 1 through65535.
        # Corresponds to the JSON property `port`
        # @return [Fixnum]
        attr_accessor :port
      
        # Not supported.
        # Corresponds to the JSON property `portName`
        # @return [String]
        attr_accessor :port_name
      
        # Specifies how a port is selected for health checking. Can be one of the
        # following values:
        # USE_FIXED_PORT: Specifies a port number explicitly using theport field  in the
        # health check. Supported by backend services
        # for passthrough load balancers and backend services for proxy load
        # balancers. Not supported by target pools. The health check supports all
        # backends supported by the backend service provided the backend can be
        # health checked. For example, GCE_VM_IP network endpoint
        # groups, GCE_VM_IP_PORT network endpoint groups, and instance
        # group backends.
        # USE_NAMED_PORT: Not supported.
        # USE_SERVING_PORT: Provides an indirect method of specifying
        # the health check port by referring to the backend service. Only supported
        # by backend services for proxy load balancers. Not supported by target
        # pools.  Not supported by backend services for passthrough load balancers.
        # Supports all backends that can be health checked; for example,GCE_VM_IP_PORT
        # network endpoint groups and instance group
        # backends.
        # For GCE_VM_IP_PORT network endpoint group backends, the health
        # check uses the port number specified for each endpoint in the network
        # endpoint group.  For instance group backends, the health check uses the
        # port number determined by looking up the backend service's named port in
        # the instance group's list of named ports.
        # Corresponds to the JSON property `portSpecification`
        # @return [String]
        attr_accessor :port_specification
      
        # Specifies the type of proxy header to append before sending data to the
        # backend, either NONE or PROXY_V1. The default
        # is NONE.
        # Corresponds to the JSON property `proxyHeader`
        # @return [String]
        attr_accessor :proxy_header
      
        # Instructs the health check prober to send this exact ASCII string, up to
        # 1024 bytes in length, after establishing the TCP connection and SSL
        # handshake.
        # Corresponds to the JSON property `request`
        # @return [String]
        attr_accessor :request
      
        # Creates a content-based SSL health check. In addition to establishing a
        # TCP connection and the TLS handshake, you can configure the health check to
        # pass only when the backend sends this exact response ASCII string, up to
        # 1024 bytes in length. For details, see:
        # https://cloud.google.com/load-balancing/docs/health-check-concepts#criteria-
        # protocol-ssl-tcp
        # Corresponds to the JSON property `response`
        # @return [String]
        attr_accessor :response
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @port = args[:port] if args.key?(:port)
          @port_name = args[:port_name] if args.key?(:port_name)
          @port_specification = args[:port_specification] if args.key?(:port_specification)
          @proxy_header = args[:proxy_header] if args.key?(:proxy_header)
          @request = args[:request] if args.key?(:request)
          @response = args[:response] if args.key?(:response)
        end
      end
      
      # DEPRECATED: Please use compute#savedDisk instead.
      # An instance-attached disk resource.
      class SavedAttachedDisk
        include Google::Apis::Core::Hashable
      
        # Specifies whether the disk will be auto-deleted when the instance is
        # deleted (but not when the disk is detached from the instance).
        # Corresponds to the JSON property `autoDelete`
        # @return [Boolean]
        attr_accessor :auto_delete
        alias_method :auto_delete?, :auto_delete
      
        # Indicates that this is a boot disk. The virtual machine will use the first
        # partition of the disk for its root filesystem.
        # Corresponds to the JSON property `boot`
        # @return [Boolean]
        attr_accessor :boot
        alias_method :boot?, :boot
      
        # Specifies the name of the disk attached to the source instance.
        # Corresponds to the JSON property `deviceName`
        # @return [String]
        attr_accessor :device_name
      
        # The encryption key for the disk.
        # Corresponds to the JSON property `diskEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :disk_encryption_key
      
        # The size of the disk in base-2 GB.
        # Corresponds to the JSON property `diskSizeGb`
        # @return [Fixnum]
        attr_accessor :disk_size_gb
      
        # Output only. [Output Only] URL of the disk type resource. For example:projects/
        # project/zones/zone/diskTypes/pd-standard or
        # pd-ssd
        # Corresponds to the JSON property `diskType`
        # @return [String]
        attr_accessor :disk_type
      
        # A list of features to enable on the guest operating system. Applicable only
        # for bootable images. Read
        # Enabling guest operating system features to see a list of available
        # options.
        # Corresponds to the JSON property `guestOsFeatures`
        # @return [Array<Google::Apis::ComputeV1::GuestOsFeature>]
        attr_accessor :guest_os_features
      
        # Output only. Specifies zero-based index of the disk that is attached to the
        # source
        # instance.
        # Corresponds to the JSON property `index`
        # @return [Fixnum]
        attr_accessor :index
      
        # Specifies the disk interface to use for attaching this disk, which is
        # either SCSI or NVME.
        # Corresponds to the JSON property `interface`
        # @return [String]
        attr_accessor :interface
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#attachedDisk
        # for attached disks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] Any valid publicly visible licenses.
        # Corresponds to the JSON property `licenses`
        # @return [Array<String>]
        attr_accessor :licenses
      
        # The mode in which this disk is attached to the source instance,
        # eitherREAD_WRITE or READ_ONLY.
        # Corresponds to the JSON property `mode`
        # @return [String]
        attr_accessor :mode
      
        # Specifies a URL of the disk attached to the source instance.
        # Corresponds to the JSON property `source`
        # @return [String]
        attr_accessor :source
      
        # Output only. [Output Only] A size of the storage used by the disk's snapshot
        # by this
        # machine image.
        # Corresponds to the JSON property `storageBytes`
        # @return [Fixnum]
        attr_accessor :storage_bytes
      
        # Output only. [Output Only] An indicator whether storageBytes is in a
        # stable state or it is being adjusted as a result of shared storage
        # reallocation. This status can either be UPDATING, meaning
        # the size of the snapshot is being updated, or UP_TO_DATE,
        # meaning the size of the snapshot is up-to-date.
        # Corresponds to the JSON property `storageBytesStatus`
        # @return [String]
        attr_accessor :storage_bytes_status
      
        # Specifies the type of the attached disk, either SCRATCH orPERSISTENT.
        # 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)
          @auto_delete = args[:auto_delete] if args.key?(:auto_delete)
          @boot = args[:boot] if args.key?(:boot)
          @device_name = args[:device_name] if args.key?(:device_name)
          @disk_encryption_key = args[:disk_encryption_key] if args.key?(:disk_encryption_key)
          @disk_size_gb = args[:disk_size_gb] if args.key?(:disk_size_gb)
          @disk_type = args[:disk_type] if args.key?(:disk_type)
          @guest_os_features = args[:guest_os_features] if args.key?(:guest_os_features)
          @index = args[:index] if args.key?(:index)
          @interface = args[:interface] if args.key?(:interface)
          @kind = args[:kind] if args.key?(:kind)
          @licenses = args[:licenses] if args.key?(:licenses)
          @mode = args[:mode] if args.key?(:mode)
          @source = args[:source] if args.key?(:source)
          @storage_bytes = args[:storage_bytes] if args.key?(:storage_bytes)
          @storage_bytes_status = args[:storage_bytes_status] if args.key?(:storage_bytes_status)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # An instance-attached disk resource.
      class SavedDisk
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The architecture of the attached disk.
        # Corresponds to the JSON property `architecture`
        # @return [String]
        attr_accessor :architecture
      
        # Output only. [Output Only] Type of the resource. Always compute#savedDisk
        # for attached disks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. Specifies a URL of the disk attached to the source instance.
        # Corresponds to the JSON property `sourceDisk`
        # @return [String]
        attr_accessor :source_disk
      
        # Output only. [Output Only] Size of the individual disk snapshot used by this
        # machine
        # image.
        # Corresponds to the JSON property `storageBytes`
        # @return [Fixnum]
        attr_accessor :storage_bytes
      
        # Output only. [Output Only] An indicator whether storageBytes is in a
        # stable state or it is being adjusted as a result of shared storage
        # reallocation. This status can either be UPDATING, meaning
        # the size of the snapshot is being updated, or UP_TO_DATE,
        # meaning the size of the snapshot is up-to-date.
        # Corresponds to the JSON property `storageBytesStatus`
        # @return [String]
        attr_accessor :storage_bytes_status
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @architecture = args[:architecture] if args.key?(:architecture)
          @kind = args[:kind] if args.key?(:kind)
          @source_disk = args[:source_disk] if args.key?(:source_disk)
          @storage_bytes = args[:storage_bytes] if args.key?(:storage_bytes)
          @storage_bytes_status = args[:storage_bytes_status] if args.key?(:storage_bytes_status)
        end
      end
      
      # 
      class ScalingScheduleStatus
        include Google::Apis::Core::Hashable
      
        # [Output Only] The last time the scaling schedule became active.
        # Note: this is a timestamp when a schedule actually became active, not when
        # it was planned to do so.
        # The timestamp is in RFC3339
        # text format.
        # Corresponds to the JSON property `lastStartTime`
        # @return [String]
        attr_accessor :last_start_time
      
        # [Output Only] The next time the scaling schedule is to become active.
        # Note: this is a timestamp when a schedule is planned to run, but the actual
        # time might be slightly different.
        # The timestamp is in RFC3339
        # text format.
        # Corresponds to the JSON property `nextStartTime`
        # @return [String]
        attr_accessor :next_start_time
      
        # [Output Only] The current state of a scaling schedule.
        # 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)
          @last_start_time = args[:last_start_time] if args.key?(:last_start_time)
          @next_start_time = args[:next_start_time] if args.key?(:next_start_time)
          @state = args[:state] if args.key?(:state)
        end
      end
      
      # Sets the scheduling options for an Instance.
      class Scheduling
        include Google::Apis::Core::Hashable
      
        # Specifies whether the instance should be automatically restarted if it is
        # terminated by Compute Engine (not terminated by a user). You can only set
        # the automatic restart option for standard instances.Preemptible instances
        # cannot be automatically restarted.
        # By default, this is set to true so an instance is
        # automatically restarted if it is terminated by Compute Engine.
        # Corresponds to the JSON property `automaticRestart`
        # @return [Boolean]
        attr_accessor :automatic_restart
        alias_method :automatic_restart?, :automatic_restart
      
        # Specifies the availability domain to place the instance in. The value
        # must be a number between 1 and the number of availability domains
        # specified in the spread placement policy attached to the instance.
        # Corresponds to the JSON property `availabilityDomain`
        # @return [Fixnum]
        attr_accessor :availability_domain
      
        # Specify the time in seconds for host error detection, the value must be
        # within the range of [90, 330] with the increment of 30, if unset, the
        # default behavior of host error recovery will be used.
        # Corresponds to the JSON property `hostErrorTimeoutSeconds`
        # @return [Fixnum]
        attr_accessor :host_error_timeout_seconds
      
        # Specifies the termination action for the instance.
        # Corresponds to the JSON property `instanceTerminationAction`
        # @return [String]
        attr_accessor :instance_termination_action
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `localSsdRecoveryTimeout`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :local_ssd_recovery_timeout
      
        # An opaque location hint used to place the instance close to other
        # resources.
        # This field is for use by internal tools that use the public API.
        # Corresponds to the JSON property `locationHint`
        # @return [String]
        attr_accessor :location_hint
      
        # A Duration represents a fixed-length span of time represented
        # as a count of seconds and fractions of seconds at nanosecond
        # resolution. It is independent of any calendar and concepts like "day"
        # or "month". Range is approximately 10,000 years.
        # Corresponds to the JSON property `maxRunDuration`
        # @return [Google::Apis::ComputeV1::Duration]
        attr_accessor :max_run_duration
      
        # The minimum number of virtual CPUs this instance will consume when running
        # on a sole-tenant node.
        # Corresponds to the JSON property `minNodeCpus`
        # @return [Fixnum]
        attr_accessor :min_node_cpus
      
        # A set of node affinity and anti-affinity configurations. Refer toConfiguring
        # node
        # affinity for more information.
        # Overrides reservationAffinity.
        # Corresponds to the JSON property `nodeAffinities`
        # @return [Array<Google::Apis::ComputeV1::SchedulingNodeAffinity>]
        attr_accessor :node_affinities
      
        # Defines the maintenance behavior for this instance. For standard instances,
        # the default behavior is MIGRATE. Forpreemptible instances,
        # the default and only possible behavior is TERMINATE. For more
        # information, see
        # Set
        # VM host maintenance policy.
        # Corresponds to the JSON property `onHostMaintenance`
        # @return [String]
        attr_accessor :on_host_maintenance
      
        # Defines the behaviour for instances with the instance_termination_actionSTOP.
        # Corresponds to the JSON property `onInstanceStopAction`
        # @return [Google::Apis::ComputeV1::SchedulingOnInstanceStopAction]
        attr_accessor :on_instance_stop_action
      
        # Defines whether the instance is preemptible. This can only be set during
        # instance creation or while the instance isstopped and
        # therefore, in a `TERMINATED` state. SeeInstance Life
        # Cycle for more information on the possible instance states.
        # Corresponds to the JSON property `preemptible`
        # @return [Boolean]
        attr_accessor :preemptible
        alias_method :preemptible?, :preemptible
      
        # Specifies the provisioning model of the instance.
        # Corresponds to the JSON property `provisioningModel`
        # @return [String]
        attr_accessor :provisioning_model
      
        # Default is false and there will be 120 seconds between GCE ACPI G2 Soft
        # Off and ACPI G3 Mechanical
        # Off for Standard VMs and 30 seconds for Spot VMs.
        # Corresponds to the JSON property `skipGuestOsShutdown`
        # @return [Boolean]
        attr_accessor :skip_guest_os_shutdown
        alias_method :skip_guest_os_shutdown?, :skip_guest_os_shutdown
      
        # Specifies the timestamp, when the instance will be terminated, inRFC3339 text
        # format. If specified, the instance
        # termination action will be performed at the termination time.
        # Corresponds to the JSON property `terminationTime`
        # @return [String]
        attr_accessor :termination_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @automatic_restart = args[:automatic_restart] if args.key?(:automatic_restart)
          @availability_domain = args[:availability_domain] if args.key?(:availability_domain)
          @host_error_timeout_seconds = args[:host_error_timeout_seconds] if args.key?(:host_error_timeout_seconds)
          @instance_termination_action = args[:instance_termination_action] if args.key?(:instance_termination_action)
          @local_ssd_recovery_timeout = args[:local_ssd_recovery_timeout] if args.key?(:local_ssd_recovery_timeout)
          @location_hint = args[:location_hint] if args.key?(:location_hint)
          @max_run_duration = args[:max_run_duration] if args.key?(:max_run_duration)
          @min_node_cpus = args[:min_node_cpus] if args.key?(:min_node_cpus)
          @node_affinities = args[:node_affinities] if args.key?(:node_affinities)
          @on_host_maintenance = args[:on_host_maintenance] if args.key?(:on_host_maintenance)
          @on_instance_stop_action = args[:on_instance_stop_action] if args.key?(:on_instance_stop_action)
          @preemptible = args[:preemptible] if args.key?(:preemptible)
          @provisioning_model = args[:provisioning_model] if args.key?(:provisioning_model)
          @skip_guest_os_shutdown = args[:skip_guest_os_shutdown] if args.key?(:skip_guest_os_shutdown)
          @termination_time = args[:termination_time] if args.key?(:termination_time)
        end
      end
      
      # Node Affinity: the configuration of desired nodes onto which this Instance
      # could be scheduled.
      class SchedulingNodeAffinity
        include Google::Apis::Core::Hashable
      
        # Corresponds to the label key of Node resource.
        # Corresponds to the JSON property `key`
        # @return [String]
        attr_accessor :key
      
        # Defines the operation of node selection. Valid operators areIN for affinity
        # and NOT_IN for anti-affinity.
        # Corresponds to the JSON property `operator`
        # @return [String]
        attr_accessor :operator
      
        # Corresponds to the label values of Node resource.
        # Corresponds to the JSON property `values`
        # @return [Array<String>]
        attr_accessor :values
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @key = args[:key] if args.key?(:key)
          @operator = args[:operator] if args.key?(:operator)
          @values = args[:values] if args.key?(:values)
        end
      end
      
      # Defines the behaviour for instances with the instance_termination_actionSTOP.
      class SchedulingOnInstanceStopAction
        include Google::Apis::Core::Hashable
      
        # If true, the contents of any attached Local SSD disks will be discarded
        # else, the Local SSD data will be preserved when the instance is stopped
        # at the end of the run duration/termination time.
        # Corresponds to the JSON property `discardLocalSsd`
        # @return [Boolean]
        attr_accessor :discard_local_ssd
        alias_method :discard_local_ssd?, :discard_local_ssd
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @discard_local_ssd = args[:discard_local_ssd] if args.key?(:discard_local_ssd)
        end
      end
      
      # An instance's screenshot.
      class Screenshot
        include Google::Apis::Core::Hashable
      
        # [Output Only] The Base64-encoded screenshot data.
        # Corresponds to the JSON property `contents`
        # @return [String]
        attr_accessor :contents
      
        # Output only. [Output Only] Type of the resource. Always compute#screenshot
        # for the screenshots.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @contents = args[:contents] if args.key?(:contents)
          @kind = args[:kind] if args.key?(:kind)
        end
      end
      
      # 
      class SecurityPoliciesAggregatedList
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of SecurityPoliciesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::SecurityPoliciesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # securityPolicyAggregatedList for lists of Security
        # Policies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SecurityPoliciesAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SecurityPoliciesAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class SecurityPoliciesListPreconfiguredExpressionSetsResponse
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `preconfiguredExpressionSets`
        # @return [Google::Apis::ComputeV1::SecurityPoliciesWafConfig]
        attr_accessor :preconfigured_expression_sets
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @preconfigured_expression_sets = args[:preconfigured_expression_sets] if args.key?(:preconfigured_expression_sets)
        end
      end
      
      # 
      class SecurityPoliciesScopedList
        include Google::Apis::Core::Hashable
      
        # A list of SecurityPolicies contained in this scope.
        # Corresponds to the JSON property `securityPolicies`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicy>]
        attr_accessor :security_policies
      
        # Informational warning which replaces the list of
        # security policies when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SecurityPoliciesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @security_policies = args[:security_policies] if args.key?(:security_policies)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of
        # security policies when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SecurityPoliciesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class SecurityPoliciesWafConfig
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `wafRules`
        # @return [Google::Apis::ComputeV1::PreconfiguredWafSet]
        attr_accessor :waf_rules
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @waf_rules = args[:waf_rules] if args.key?(:waf_rules)
        end
      end
      
      # Represents a Google Cloud Armor security policy resource.
      # Only external backend services that use load balancers can
      # reference a security policy. For more information, see
      # Google Cloud Armor security policy overview.
      class SecurityPolicy
        include Google::Apis::Core::Hashable
      
        # Configuration options for Cloud Armor Adaptive Protection (CAAP).
        # Corresponds to the JSON property `adaptiveProtectionConfig`
        # @return [Google::Apis::ComputeV1::SecurityPolicyAdaptiveProtectionConfig]
        attr_accessor :adaptive_protection_config
      
        # 
        # Corresponds to the JSON property `advancedOptionsConfig`
        # @return [Google::Apis::ComputeV1::SecurityPolicyAdvancedOptionsConfig]
        attr_accessor :advanced_options_config
      
        # A list of associations that belong to this policy.
        # Corresponds to the JSON property `associations`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyAssociation>]
        attr_accessor :associations
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # 
        # Corresponds to the JSON property `ddosProtectionConfig`
        # @return [Google::Apis::ComputeV1::SecurityPolicyDdosProtectionConfig]
        attr_accessor :ddos_protection_config
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Specifies a fingerprint for this resource, which is essentially a hash of
        # the metadata's contents and used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update metadata. You must always provide an
        # up-to-date fingerprint hash in order to update or change metadata,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make get() request to the
        # security policy.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output only] Type of the resource. Alwayscompute#
        # securityPolicyfor security policies
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this security policy, which
        # is essentially a hash of the labels set used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels.
        # To see the latest fingerprint, make get() request to the
        # security policy.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels for this resource. These can only be added or modified by thesetLabels
        # method. Each label key/value pair must comply withRFC1035.
        # Label values may be empty.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The parent of the security policy.
        # Corresponds to the JSON property `parent`
        # @return [String]
        attr_accessor :parent
      
        # 
        # Corresponds to the JSON property `recaptchaOptionsConfig`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRecaptchaOptionsConfig]
        attr_accessor :recaptcha_options_config
      
        # Output only. [Output Only] URL of the region where the regional security
        # policy
        # resides. This field is not applicable to global security policies.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # A list of rules that belong to this policy.
        # There must always be a default rule which is a rule with priority
        # 2147483647 and match all condition (for the match condition this means
        # match  "*" for srcIpRanges and for the networkMatch condition every field
        # must be either match "*" or not set). If no rules are provided when
        # creating a security policy, a default rule with action "allow" will be
        # added.
        # Corresponds to the JSON property `rules`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyRule>]
        attr_accessor :rules
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # User-provided name of the organization security policy. The name should be
        # unique in the organization in which the security policy is created. This
        # should only be used when SecurityPolicyType is CLOUD_ARMOR.
        # The name must be 1-63 characters long, and comply with
        # https://www.ietf.org/rfc/rfc1035.txt. Specifically, the name must be 1-63
        # characters long and match the regular expression
        # `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a
        # lowercase letter, and all following characters must be a dash, lowercase
        # letter, or digit, except the last character, which cannot be a dash.
        # Corresponds to the JSON property `shortName`
        # @return [String]
        attr_accessor :short_name
      
        # The type indicates the intended use of the security policy.
        # 
        # - CLOUD_ARMOR: Cloud Armor backend security policies can
        # be configured to filter incoming HTTP requests targeting backend services.
        # They filter requests before they hit the origin servers.
        # - CLOUD_ARMOR_EDGE: Cloud Armor edge security policies can
        # be configured to filter incoming HTTP requests targeting backend services
        # (including Cloud CDN-enabled) as well as backend buckets (Cloud Storage).
        # They filter requests before the request is served from Google's cache.
        # - CLOUD_ARMOR_INTERNAL_SERVICE (preview only): Cloud Armor
        # internal service policies can be configured to filter HTTP requests
        # targeting services managed by Traffic Director in a service mesh. They
        # filter requests before the request is served from the application.
        # - CLOUD_ARMOR_NETWORK: Cloud Armor network policies
        # can be configured to filter packets targeting network load balancing
        # resources such as backend services, target pools, target instances, and
        # instances with external IPs. They filter requests before the request is
        # served from the application.
        # This field can be set only at resource creation time.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # Definitions of user-defined fields for CLOUD_ARMOR_NETWORK policies. A
        # user-defined field consists of up to 4 bytes extracted from a fixed offset
        # in the packet, relative to the IPv4, IPv6, TCP, or UDP header, with an
        # optional mask to select certain bits. Rules may then specify matching
        # values for these fields.
        # Example:
        # userDefinedFields:
        # - name: "ipv4_fragment_offset"
        # base: IPV4
        # offset: 6
        # size: 2
        # mask: "0x1fff"
        # Corresponds to the JSON property `userDefinedFields`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyUserDefinedField>]
        attr_accessor :user_defined_fields
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @adaptive_protection_config = args[:adaptive_protection_config] if args.key?(:adaptive_protection_config)
          @advanced_options_config = args[:advanced_options_config] if args.key?(:advanced_options_config)
          @associations = args[:associations] if args.key?(:associations)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @ddos_protection_config = args[:ddos_protection_config] if args.key?(:ddos_protection_config)
          @description = args[:description] if args.key?(:description)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @name = args[:name] if args.key?(:name)
          @parent = args[:parent] if args.key?(:parent)
          @recaptcha_options_config = args[:recaptcha_options_config] if args.key?(:recaptcha_options_config)
          @region = args[:region] if args.key?(:region)
          @rules = args[:rules] if args.key?(:rules)
          @self_link = args[:self_link] if args.key?(:self_link)
          @short_name = args[:short_name] if args.key?(:short_name)
          @type = args[:type] if args.key?(:type)
          @user_defined_fields = args[:user_defined_fields] if args.key?(:user_defined_fields)
        end
      end
      
      # Configuration options for Cloud Armor Adaptive Protection (CAAP).
      class SecurityPolicyAdaptiveProtectionConfig
        include Google::Apis::Core::Hashable
      
        # Configuration options for L7 DDoS detection.
        # This field is only supported in Global Security Policies of type
        # CLOUD_ARMOR.
        # Corresponds to the JSON property `layer7DdosDefenseConfig`
        # @return [Google::Apis::ComputeV1::SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig]
        attr_accessor :layer7_ddos_defense_config
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @layer7_ddos_defense_config = args[:layer7_ddos_defense_config] if args.key?(:layer7_ddos_defense_config)
        end
      end
      
      # Configuration options for L7 DDoS detection.
      # This field is only supported in Global Security Policies of type
      # CLOUD_ARMOR.
      class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig
        include Google::Apis::Core::Hashable
      
        # If set to true, enables CAAP for L7 DDoS detection.
        # This field is only supported in Global Security Policies of type
        # CLOUD_ARMOR.
        # Corresponds to the JSON property `enable`
        # @return [Boolean]
        attr_accessor :enable
        alias_method :enable?, :enable
      
        # Rule visibility can be one of the following:
        # STANDARD - opaque rules. (default)
        # PREMIUM - transparent rules.
        # This field is only supported in Global Security Policies of type
        # CLOUD_ARMOR.
        # Corresponds to the JSON property `ruleVisibility`
        # @return [String]
        attr_accessor :rule_visibility
      
        # Configuration options for layer7 adaptive protection for various
        # customizable thresholds.
        # Corresponds to the JSON property `thresholdConfigs`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig>]
        attr_accessor :threshold_configs
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @enable = args[:enable] if args.key?(:enable)
          @rule_visibility = args[:rule_visibility] if args.key?(:rule_visibility)
          @threshold_configs = args[:threshold_configs] if args.key?(:threshold_configs)
        end
      end
      
      # 
      class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `autoDeployConfidenceThreshold`
        # @return [Float]
        attr_accessor :auto_deploy_confidence_threshold
      
        # 
        # Corresponds to the JSON property `autoDeployExpirationSec`
        # @return [Fixnum]
        attr_accessor :auto_deploy_expiration_sec
      
        # 
        # Corresponds to the JSON property `autoDeployImpactedBaselineThreshold`
        # @return [Float]
        attr_accessor :auto_deploy_impacted_baseline_threshold
      
        # 
        # Corresponds to the JSON property `autoDeployLoadThreshold`
        # @return [Float]
        attr_accessor :auto_deploy_load_threshold
      
        # 
        # Corresponds to the JSON property `detectionAbsoluteQps`
        # @return [Float]
        attr_accessor :detection_absolute_qps
      
        # 
        # Corresponds to the JSON property `detectionLoadThreshold`
        # @return [Float]
        attr_accessor :detection_load_threshold
      
        # 
        # Corresponds to the JSON property `detectionRelativeToBaselineQps`
        # @return [Float]
        attr_accessor :detection_relative_to_baseline_qps
      
        # The name must be 1-63 characters long, and comply withRFC1035.
        # The name must be unique within the security policy.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Configuration options for enabling Adaptive Protection to operate
        # on specified granular traffic units.
        # Corresponds to the JSON property `trafficGranularityConfigs`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig>]
        attr_accessor :traffic_granularity_configs
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auto_deploy_confidence_threshold = args[:auto_deploy_confidence_threshold] if args.key?(:auto_deploy_confidence_threshold)
          @auto_deploy_expiration_sec = args[:auto_deploy_expiration_sec] if args.key?(:auto_deploy_expiration_sec)
          @auto_deploy_impacted_baseline_threshold = args[:auto_deploy_impacted_baseline_threshold] if args.key?(:auto_deploy_impacted_baseline_threshold)
          @auto_deploy_load_threshold = args[:auto_deploy_load_threshold] if args.key?(:auto_deploy_load_threshold)
          @detection_absolute_qps = args[:detection_absolute_qps] if args.key?(:detection_absolute_qps)
          @detection_load_threshold = args[:detection_load_threshold] if args.key?(:detection_load_threshold)
          @detection_relative_to_baseline_qps = args[:detection_relative_to_baseline_qps] if args.key?(:detection_relative_to_baseline_qps)
          @name = args[:name] if args.key?(:name)
          @traffic_granularity_configs = args[:traffic_granularity_configs] if args.key?(:traffic_granularity_configs)
        end
      end
      
      # Configurations to specifc granular traffic units processed by
      # Adaptive Protection.
      class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig
        include Google::Apis::Core::Hashable
      
        # If enabled, traffic matching each unique value for the specified
        # type constitutes a separate traffic unit.
        # It can only be set to true if `value` is empty.
        # Corresponds to the JSON property `enableEachUniqueValue`
        # @return [Boolean]
        attr_accessor :enable_each_unique_value
        alias_method :enable_each_unique_value?, :enable_each_unique_value
      
        # Type of this configuration.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # Requests that match this value constitute a granular traffic unit.
        # Corresponds to the JSON property `value`
        # @return [String]
        attr_accessor :value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @enable_each_unique_value = args[:enable_each_unique_value] if args.key?(:enable_each_unique_value)
          @type = args[:type] if args.key?(:type)
          @value = args[:value] if args.key?(:value)
        end
      end
      
      # 
      class SecurityPolicyAdvancedOptionsConfig
        include Google::Apis::Core::Hashable
      
        # Custom configuration to apply the JSON parsing. Only applicable when
        # json_parsing is set to STANDARD.
        # Corresponds to the JSON property `jsonCustomConfig`
        # @return [Google::Apis::ComputeV1::SecurityPolicyAdvancedOptionsConfigJsonCustomConfig]
        attr_accessor :json_custom_config
      
        # 
        # Corresponds to the JSON property `jsonParsing`
        # @return [String]
        attr_accessor :json_parsing
      
        # 
        # Corresponds to the JSON property `logLevel`
        # @return [String]
        attr_accessor :log_level
      
        # The maximum request size chosen by the customer with Waf enabled.
        # Values supported are "8KB", "16KB, "32KB", "48KB" and "64KB".
        # Values are case insensitive.
        # Corresponds to the JSON property `requestBodyInspectionSize`
        # @return [String]
        attr_accessor :request_body_inspection_size
      
        # An optional list of case-insensitive request header names to use for
        # resolving the callers client IP address.
        # Corresponds to the JSON property `userIpRequestHeaders`
        # @return [Array<String>]
        attr_accessor :user_ip_request_headers
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @json_custom_config = args[:json_custom_config] if args.key?(:json_custom_config)
          @json_parsing = args[:json_parsing] if args.key?(:json_parsing)
          @log_level = args[:log_level] if args.key?(:log_level)
          @request_body_inspection_size = args[:request_body_inspection_size] if args.key?(:request_body_inspection_size)
          @user_ip_request_headers = args[:user_ip_request_headers] if args.key?(:user_ip_request_headers)
        end
      end
      
      # 
      class SecurityPolicyAdvancedOptionsConfigJsonCustomConfig
        include Google::Apis::Core::Hashable
      
        # A list of custom Content-Type header values to apply the JSON parsing.
        # As per RFC 1341, a Content-Type header value has the following format:
        # Content-Type := type "/" subtype *[";" parameter]
        # When configuring a custom Content-Type header value, only the
        # type/subtype needs to be specified, and the parameters should be
        # excluded.
        # Corresponds to the JSON property `contentTypes`
        # @return [Array<String>]
        attr_accessor :content_types
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @content_types = args[:content_types] if args.key?(:content_types)
        end
      end
      
      # 
      class SecurityPolicyAssociation
        include Google::Apis::Core::Hashable
      
        # The resource that the security policy is attached to.
        # Corresponds to the JSON property `attachmentId`
        # @return [String]
        attr_accessor :attachment_id
      
        # Output only. [Output Only] The display name of the security policy of the
        # association.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # A list of folders to exclude from the security policy.
        # Corresponds to the JSON property `excludedFolders`
        # @return [Array<String>]
        attr_accessor :excluded_folders
      
        # A list of projects to exclude from the security policy.
        # Corresponds to the JSON property `excludedProjects`
        # @return [Array<String>]
        attr_accessor :excluded_projects
      
        # The name for an association.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The security policy ID of the association.
        # Corresponds to the JSON property `securityPolicyId`
        # @return [String]
        attr_accessor :security_policy_id
      
        # Output only. [Output Only] The short name of the security policy of the
        # association.
        # Corresponds to the JSON property `shortName`
        # @return [String]
        attr_accessor :short_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @attachment_id = args[:attachment_id] if args.key?(:attachment_id)
          @display_name = args[:display_name] if args.key?(:display_name)
          @excluded_folders = args[:excluded_folders] if args.key?(:excluded_folders)
          @excluded_projects = args[:excluded_projects] if args.key?(:excluded_projects)
          @name = args[:name] if args.key?(:name)
          @security_policy_id = args[:security_policy_id] if args.key?(:security_policy_id)
          @short_name = args[:short_name] if args.key?(:short_name)
        end
      end
      
      # 
      class SecurityPolicyDdosProtectionConfig
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `ddosProtection`
        # @return [String]
        attr_accessor :ddos_protection
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ddos_protection = args[:ddos_protection] if args.key?(:ddos_protection)
        end
      end
      
      # 
      class SecurityPolicyList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of SecurityPolicy resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicy>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#securityPolicyList
        # for listsof securityPolicies
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SecurityPolicyList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SecurityPolicyList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class SecurityPolicyRecaptchaOptionsConfig
        include Google::Apis::Core::Hashable
      
        # An optional field to supply a reCAPTCHA site key to be used for all the
        # rules using the redirect action with the type of GOOGLE_RECAPTCHA under
        # the security policy. The specified site key needs to be created from the
        # reCAPTCHA API. The user is responsible for the validity of the specified
        # site key. If not specified, a Google-managed site key is used.
        # This field is only supported in Global Security Policies of type
        # CLOUD_ARMOR.
        # Corresponds to the JSON property `redirectSiteKey`
        # @return [String]
        attr_accessor :redirect_site_key
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @redirect_site_key = args[:redirect_site_key] if args.key?(:redirect_site_key)
        end
      end
      
      # 
      class SecurityPolicyReference
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `securityPolicy`
        # @return [String]
        attr_accessor :security_policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @security_policy = args[:security_policy] if args.key?(:security_policy)
        end
      end
      
      # Represents a rule that describes one or more match conditions along with
      # the action to be taken when traffic matches this condition (allow or deny).
      class SecurityPolicyRule
        include Google::Apis::Core::Hashable
      
        # The Action to perform when the rule is matched.
        # The following are the valid actions:
        # 
        # - allow: allow access to target.
        # - deny(STATUS): deny access to target, returns the
        # HTTP response code specified. Valid values for `STATUS`
        # are 403, 404, and 502.
        # - rate_based_ban: limit client traffic to the configured
        # threshold and ban the client if the traffic exceeds the threshold.
        # Configure parameters for this action in RateLimitOptions. Requires
        # rate_limit_options to be set.
        # - redirect: redirect to a different target. This can
        # either be an internal reCAPTCHA redirect, or an external URL-based
        # redirect via a 302 response. Parameters for this action can be configured
        # via redirectOptions. This action is only supported in Global Security
        # Policies of type CLOUD_ARMOR.
        # - throttle: limit
        # client traffic to the configured threshold. Configure parameters for this
        # action in rateLimitOptions. Requires rate_limit_options to be set for
        # this.
        # - fairshare (preview only): when traffic reaches the
        # threshold limit, requests from the clients matching this rule begin to be
        # rate-limited using the Fair Share algorithm. This action is only allowed
        # in security policies of type `CLOUD_ARMOR_INTERNAL_SERVICE`.
        # Corresponds to the JSON property `action`
        # @return [String]
        attr_accessor :action
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Optional, additional actions that are performed on headers.
        # This field is only supported in Global Security Policies of type
        # CLOUD_ARMOR.
        # Corresponds to the JSON property `headerAction`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRuleHttpHeaderAction]
        attr_accessor :header_action
      
        # Output only. [Output only] Type of the resource. Alwayscompute#
        # securityPolicyRule for security policy rules
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Represents a match condition that incoming traffic is evaluated against.
        # Exactly one field must be specified.
        # Corresponds to the JSON property `match`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRuleMatcher]
        attr_accessor :match
      
        # Represents a match condition that incoming network traffic is evaluated
        # against.
        # Corresponds to the JSON property `networkMatch`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRuleNetworkMatcher]
        attr_accessor :network_match
      
        # Preconfigured WAF configuration to be applied for the rule. If the rule
        # does not evaluate preconfigured WAF rules, i.e., if
        # evaluatePreconfiguredWaf() is not used, this field will have no effect.
        # Corresponds to the JSON property `preconfiguredWafConfig`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRulePreconfiguredWafConfig]
        attr_accessor :preconfigured_waf_config
      
        # If set to true, the specified action is not enforced.
        # Corresponds to the JSON property `preview`
        # @return [Boolean]
        attr_accessor :preview
        alias_method :preview?, :preview
      
        # An integer indicating the priority of a rule in the list. The priority
        # must be a positive value between 0 and 2147483647.
        # Rules are evaluated from highest to lowest priority where 0 is the
        # highest priority and 2147483647 is the lowest priority.
        # Corresponds to the JSON property `priority`
        # @return [Fixnum]
        attr_accessor :priority
      
        # Must be specified if the action is "rate_based_ban" or "throttle" or
        # "fairshare". Cannot be specified for any other actions.
        # Corresponds to the JSON property `rateLimitOptions`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRuleRateLimitOptions]
        attr_accessor :rate_limit_options
      
        # Parameters defining the redirect action. Cannot be specified for any
        # other actions.
        # This field is only supported in Global Security Policies of type
        # CLOUD_ARMOR.
        # Corresponds to the JSON property `redirectOptions`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRuleRedirectOptions]
        attr_accessor :redirect_options
      
        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)
          @header_action = args[:header_action] if args.key?(:header_action)
          @kind = args[:kind] if args.key?(:kind)
          @match = args[:match] if args.key?(:match)
          @network_match = args[:network_match] if args.key?(:network_match)
          @preconfigured_waf_config = args[:preconfigured_waf_config] if args.key?(:preconfigured_waf_config)
          @preview = args[:preview] if args.key?(:preview)
          @priority = args[:priority] if args.key?(:priority)
          @rate_limit_options = args[:rate_limit_options] if args.key?(:rate_limit_options)
          @redirect_options = args[:redirect_options] if args.key?(:redirect_options)
        end
      end
      
      # 
      class SecurityPolicyRuleHttpHeaderAction
        include Google::Apis::Core::Hashable
      
        # The list of request headers to add or overwrite if they're already
        # present.
        # Corresponds to the JSON property `requestHeadersToAdds`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyRuleHttpHeaderActionHttpHeaderOption>]
        attr_accessor :request_headers_to_adds
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @request_headers_to_adds = args[:request_headers_to_adds] if args.key?(:request_headers_to_adds)
        end
      end
      
      # 
      class SecurityPolicyRuleHttpHeaderActionHttpHeaderOption
        include Google::Apis::Core::Hashable
      
        # The name of the header to set.
        # Corresponds to the JSON property `headerName`
        # @return [String]
        attr_accessor :header_name
      
        # The value to set the named header to.
        # Corresponds to the JSON property `headerValue`
        # @return [String]
        attr_accessor :header_value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @header_name = args[:header_name] if args.key?(:header_name)
          @header_value = args[:header_value] if args.key?(:header_value)
        end
      end
      
      # Represents a match condition that incoming traffic is evaluated against.
      # Exactly one field must be specified.
      class SecurityPolicyRuleMatcher
        include Google::Apis::Core::Hashable
      
        # The configuration options available when specifying versioned_expr.
        # This field must be specified if versioned_expr is specified and cannot
        # be specified if versioned_expr is not specified.
        # Corresponds to the JSON property `config`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRuleMatcherConfig]
        attr_accessor :config
      
        # Represents a textual expression in the Common Expression Language (CEL)
        # syntax. CEL is a C-like expression language. The syntax and semantics of CEL
        # are documented at https://github.com/google/cel-spec.
        # Example (Comparison):
        # title: "Summary size limit"
        # description: "Determines if a summary is less than 100 chars"
        # expression: "document.summary.size() < 100"
        # Example (Equality):
        # title: "Requestor is owner"
        # description: "Determines if requestor is the document owner"
        # expression: "document.owner == request.auth.claims.email"
        # Example (Logic):
        # title: "Public documents"
        # description: "Determine whether the document should be publicly visible"
        # expression: "document.type != 'private' && document.type != 'internal'"
        # Example (Data Manipulation):
        # title: "Notification string"
        # description: "Create a notification string with a timestamp."
        # expression: "'New message received at ' + string(document.create_time)"
        # The exact variables and functions that may be referenced within an expression
        # are determined by the service that evaluates it. See the service
        # documentation for additional information.
        # Corresponds to the JSON property `expr`
        # @return [Google::Apis::ComputeV1::Expr]
        attr_accessor :expr
      
        # The configuration options available when specifying a user defined
        # CEVAL expression (i.e., 'expr').
        # Corresponds to the JSON property `exprOptions`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRuleMatcherExprOptions]
        attr_accessor :expr_options
      
        # Preconfigured versioned expression.
        # If this field is specified, config must also be specified.
        # Available preconfigured expressions along with their requirements are:
        # SRC_IPS_V1 - must specify the corresponding src_ip_range field in
        # config.
        # Corresponds to the JSON property `versionedExpr`
        # @return [String]
        attr_accessor :versioned_expr
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @config = args[:config] if args.key?(:config)
          @expr = args[:expr] if args.key?(:expr)
          @expr_options = args[:expr_options] if args.key?(:expr_options)
          @versioned_expr = args[:versioned_expr] if args.key?(:versioned_expr)
        end
      end
      
      # 
      class SecurityPolicyRuleMatcherConfig
        include Google::Apis::Core::Hashable
      
        # CIDR IP address range.
        # Maximum number of src_ip_ranges allowed is 10.
        # Corresponds to the JSON property `srcIpRanges`
        # @return [Array<String>]
        attr_accessor :src_ip_ranges
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @src_ip_ranges = args[:src_ip_ranges] if args.key?(:src_ip_ranges)
        end
      end
      
      # 
      class SecurityPolicyRuleMatcherExprOptions
        include Google::Apis::Core::Hashable
      
        # reCAPTCHA configuration options to be applied for the rule. If the
        # rule does not evaluate reCAPTCHA tokens, this field has no effect.
        # Corresponds to the JSON property `recaptchaOptions`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRuleMatcherExprOptionsRecaptchaOptions]
        attr_accessor :recaptcha_options
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @recaptcha_options = args[:recaptcha_options] if args.key?(:recaptcha_options)
        end
      end
      
      # 
      class SecurityPolicyRuleMatcherExprOptionsRecaptchaOptions
        include Google::Apis::Core::Hashable
      
        # A list of site keys to be used during the validation of reCAPTCHA
        # action-tokens. The provided site keys need to be created from
        # reCAPTCHA API under the same project where the security policy is
        # created.
        # Corresponds to the JSON property `actionTokenSiteKeys`
        # @return [Array<String>]
        attr_accessor :action_token_site_keys
      
        # A list of site keys to be used during the validation of reCAPTCHA
        # session-tokens. The provided site keys need to be created from
        # reCAPTCHA API under the same project where the security policy is
        # created.
        # Corresponds to the JSON property `sessionTokenSiteKeys`
        # @return [Array<String>]
        attr_accessor :session_token_site_keys
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @action_token_site_keys = args[:action_token_site_keys] if args.key?(:action_token_site_keys)
          @session_token_site_keys = args[:session_token_site_keys] if args.key?(:session_token_site_keys)
        end
      end
      
      # Represents a match condition that incoming network traffic is evaluated
      # against.
      class SecurityPolicyRuleNetworkMatcher
        include Google::Apis::Core::Hashable
      
        # Destination IPv4/IPv6 addresses or CIDR prefixes, in standard text
        # format.
        # Corresponds to the JSON property `destIpRanges`
        # @return [Array<String>]
        attr_accessor :dest_ip_ranges
      
        # Destination port numbers for TCP/UDP/SCTP. Each element can be a 16-bit
        # unsigned decimal number (e.g. "80") or range (e.g. "0-1023").
        # Corresponds to the JSON property `destPorts`
        # @return [Array<String>]
        attr_accessor :dest_ports
      
        # IPv4 protocol / IPv6 next header (after extension headers). Each
        # element can be an 8-bit unsigned decimal number (e.g. "6"), range (e.g.
        # "253-254"), or one of the following protocol names: "tcp", "udp",
        # "icmp", "esp", "ah", "ipip", or "sctp".
        # Corresponds to the JSON property `ipProtocols`
        # @return [Array<String>]
        attr_accessor :ip_protocols
      
        # BGP Autonomous System Number associated with the source IP address.
        # Corresponds to the JSON property `srcAsns`
        # @return [Array<Fixnum>]
        attr_accessor :src_asns
      
        # Source IPv4/IPv6 addresses or CIDR prefixes, in standard text format.
        # Corresponds to the JSON property `srcIpRanges`
        # @return [Array<String>]
        attr_accessor :src_ip_ranges
      
        # Source port numbers for TCP/UDP/SCTP. Each element can be a 16-bit
        # unsigned decimal number (e.g. "80") or range (e.g. "0-1023").
        # Corresponds to the JSON property `srcPorts`
        # @return [Array<String>]
        attr_accessor :src_ports
      
        # Two-letter ISO 3166-1 alpha-2 country code associated with the source
        # IP address.
        # Corresponds to the JSON property `srcRegionCodes`
        # @return [Array<String>]
        attr_accessor :src_region_codes
      
        # User-defined fields. Each element names a defined field and lists the
        # matching values for that field.
        # Corresponds to the JSON property `userDefinedFields`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyRuleNetworkMatcherUserDefinedFieldMatch>]
        attr_accessor :user_defined_fields
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @dest_ip_ranges = args[:dest_ip_ranges] if args.key?(:dest_ip_ranges)
          @dest_ports = args[:dest_ports] if args.key?(:dest_ports)
          @ip_protocols = args[:ip_protocols] if args.key?(:ip_protocols)
          @src_asns = args[:src_asns] if args.key?(:src_asns)
          @src_ip_ranges = args[:src_ip_ranges] if args.key?(:src_ip_ranges)
          @src_ports = args[:src_ports] if args.key?(:src_ports)
          @src_region_codes = args[:src_region_codes] if args.key?(:src_region_codes)
          @user_defined_fields = args[:user_defined_fields] if args.key?(:user_defined_fields)
        end
      end
      
      # 
      class SecurityPolicyRuleNetworkMatcherUserDefinedFieldMatch
        include Google::Apis::Core::Hashable
      
        # Name of the user-defined field, as given in the definition.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Matching values of the field. Each element can be a 32-bit unsigned
        # decimal or hexadecimal (starting with "0x") number (e.g. "64") or
        # range (e.g.  "0x400-0x7ff").
        # Corresponds to the JSON property `values`
        # @return [Array<String>]
        attr_accessor :values
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @values = args[:values] if args.key?(:values)
        end
      end
      
      # 
      class SecurityPolicyRulePreconfiguredWafConfig
        include Google::Apis::Core::Hashable
      
        # A list of exclusions to apply during preconfigured WAF evaluation.
        # Corresponds to the JSON property `exclusions`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyRulePreconfiguredWafConfigExclusion>]
        attr_accessor :exclusions
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @exclusions = args[:exclusions] if args.key?(:exclusions)
        end
      end
      
      # 
      class SecurityPolicyRulePreconfiguredWafConfigExclusion
        include Google::Apis::Core::Hashable
      
        # A list of request cookie names whose value will be excluded from
        # inspection during preconfigured WAF evaluation.
        # Corresponds to the JSON property `requestCookiesToExclude`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyRulePreconfiguredWafConfigExclusionFieldParams>]
        attr_accessor :request_cookies_to_exclude
      
        # A list of request header names whose value will be excluded from
        # inspection during preconfigured WAF evaluation.
        # Corresponds to the JSON property `requestHeadersToExclude`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyRulePreconfiguredWafConfigExclusionFieldParams>]
        attr_accessor :request_headers_to_exclude
      
        # A list of request query parameter names whose value will be excluded
        # from inspection during preconfigured WAF evaluation. Note that the
        # parameter can be in the query string or in the POST body.
        # Corresponds to the JSON property `requestQueryParamsToExclude`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyRulePreconfiguredWafConfigExclusionFieldParams>]
        attr_accessor :request_query_params_to_exclude
      
        # A list of request URIs from the request line to be excluded from
        # inspection during preconfigured WAF evaluation. When specifying this
        # field, the query or fragment part should be excluded.
        # Corresponds to the JSON property `requestUrisToExclude`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyRulePreconfiguredWafConfigExclusionFieldParams>]
        attr_accessor :request_uris_to_exclude
      
        # A list of target rule IDs under the WAF rule set to apply the
        # preconfigured WAF exclusion. If omitted, it refers to all the rule
        # IDs under the WAF rule set.
        # Corresponds to the JSON property `targetRuleIds`
        # @return [Array<String>]
        attr_accessor :target_rule_ids
      
        # Target WAF rule set to apply the preconfigured WAF exclusion.
        # Corresponds to the JSON property `targetRuleSet`
        # @return [String]
        attr_accessor :target_rule_set
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @request_cookies_to_exclude = args[:request_cookies_to_exclude] if args.key?(:request_cookies_to_exclude)
          @request_headers_to_exclude = args[:request_headers_to_exclude] if args.key?(:request_headers_to_exclude)
          @request_query_params_to_exclude = args[:request_query_params_to_exclude] if args.key?(:request_query_params_to_exclude)
          @request_uris_to_exclude = args[:request_uris_to_exclude] if args.key?(:request_uris_to_exclude)
          @target_rule_ids = args[:target_rule_ids] if args.key?(:target_rule_ids)
          @target_rule_set = args[:target_rule_set] if args.key?(:target_rule_set)
        end
      end
      
      # 
      class SecurityPolicyRulePreconfiguredWafConfigExclusionFieldParams
        include Google::Apis::Core::Hashable
      
        # The match operator for the field.
        # Corresponds to the JSON property `op`
        # @return [String]
        attr_accessor :op
      
        # The value of the field.
        # Corresponds to the JSON property `val`
        # @return [String]
        attr_accessor :val
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @op = args[:op] if args.key?(:op)
          @val = args[:val] if args.key?(:val)
        end
      end
      
      # 
      class SecurityPolicyRuleRateLimitOptions
        include Google::Apis::Core::Hashable
      
        # Can only be specified if the action for the rule is
        # "rate_based_ban". If specified, determines the time (in seconds)
        # the traffic will continue to be banned by the rate limit after the
        # rate falls below the threshold.
        # Corresponds to the JSON property `banDurationSec`
        # @return [Fixnum]
        attr_accessor :ban_duration_sec
      
        # Can only be specified if the action for the rule is
        # "rate_based_ban". If specified, the key will be banned for the
        # configured 'ban_duration_sec' when the number of requests that exceed
        # the 'rate_limit_threshold' also exceed this 'ban_threshold'.
        # Corresponds to the JSON property `banThreshold`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRuleRateLimitOptionsThreshold]
        attr_accessor :ban_threshold
      
        # Action to take for requests that are under the configured rate limit
        # threshold. Valid option is "allow" only.
        # Corresponds to the JSON property `conformAction`
        # @return [String]
        attr_accessor :conform_action
      
        # Determines the key to enforce the rate_limit_threshold on. Possible
        # values are:
        # 
        # - ALL: A single rate limit threshold is applied to all
        # the requests matching this rule. This is the default value if
        # "enforceOnKey" is not configured.
        # - IP: The source IP address of
        # the request is the key. Each IP has this limit enforced
        # separately.
        # - HTTP_HEADER: The value of the HTTP
        # header whose name is configured under "enforceOnKeyName". The key
        # value is truncated to the first 128 bytes of the header value. If no
        # such header is present in the request, the key type defaults toALL.
        # - XFF_IP: The first IP address (i.e. the
        # originating client IP address) specified in the list of IPs under
        # X-Forwarded-For HTTP header. If no such header is present or the value
        # is not a valid IP, the key defaults to the source IP address of
        # the request i.e. key type IP.
        # - HTTP_COOKIE: The value of the HTTP
        # cookie whose name is configured under "enforceOnKeyName". The key
        # value is truncated to the first 128 bytes of the cookie value. If no
        # such cookie is present in the request, the key type defaults toALL.
        # - HTTP_PATH: The URL path of the HTTP request. The key
        # value is truncated to the first 128 bytes.
        # - SNI: Server name indication in the TLS session of the
        # HTTPS request. The key value is truncated to the first 128 bytes. The
        # key type defaults to ALL on a HTTP session.
        # - REGION_CODE: The country/region from which the request
        # originates.
        # - TLS_JA3_FINGERPRINT: JA3 TLS/SSL fingerprint if the
        # client connects using HTTPS, HTTP/2 or HTTP/3. If not available, the
        # key type defaults to ALL.
        # - USER_IP: The IP address of the originating client,
        # which is resolved based on "userIpRequestHeaders" configured with the
        # security policy. If there is no "userIpRequestHeaders" configuration or
        # an IP address cannot be resolved from it, the key type defaults toIP.
        # - TLS_JA4_FINGERPRINT: JA4 TLS/SSL fingerprint if the
        # client connects using HTTPS, HTTP/2 or HTTP/3. If not available, the
        # key type defaults to ALL.
        # For "fairshare" action, this value is limited to ALL i.e. a single rate
        # limit threshold is enforced for all the requests matching the rule.
        # Corresponds to the JSON property `enforceOnKey`
        # @return [String]
        attr_accessor :enforce_on_key
      
        # If specified, any combination of values of
        # enforce_on_key_type/enforce_on_key_name is treated as the key on which
        # ratelimit threshold/action is enforced. You can specify up to 3
        # enforce_on_key_configs. If enforce_on_key_configs is specified,
        # enforce_on_key must not be specified.
        # Corresponds to the JSON property `enforceOnKeyConfigs`
        # @return [Array<Google::Apis::ComputeV1::SecurityPolicyRuleRateLimitOptionsEnforceOnKeyConfig>]
        attr_accessor :enforce_on_key_configs
      
        # Rate limit key name applicable only for the following key types:
        # HTTP_HEADER -- Name of the HTTP header whose value is taken as the key
        # value.
        # HTTP_COOKIE -- Name of the HTTP cookie whose value is taken as the key
        # value.
        # Corresponds to the JSON property `enforceOnKeyName`
        # @return [String]
        attr_accessor :enforce_on_key_name
      
        # Action to take for requests that are above the configured rate limit
        # threshold, to either deny with a specified HTTP response code, or
        # redirect to a different endpoint.
        # Valid options are `deny(STATUS)`, where valid values for
        # `STATUS` are 403, 404, 429, and 502, and
        # `redirect`, where the redirect parameters come from
        # `exceedRedirectOptions` below.
        # The `redirect` action is only supported in Global Security Policies of
        # type CLOUD_ARMOR.
        # Corresponds to the JSON property `exceedAction`
        # @return [String]
        attr_accessor :exceed_action
      
        # Parameters defining the redirect action that is used as the exceed
        # action. Cannot be specified if the exceed action is not redirect.
        # This field is only supported in Global Security Policies of type
        # CLOUD_ARMOR.
        # Corresponds to the JSON property `exceedRedirectOptions`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRuleRedirectOptions]
        attr_accessor :exceed_redirect_options
      
        # Threshold at which to begin ratelimiting.
        # Corresponds to the JSON property `rateLimitThreshold`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRuleRateLimitOptionsThreshold]
        attr_accessor :rate_limit_threshold
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ban_duration_sec = args[:ban_duration_sec] if args.key?(:ban_duration_sec)
          @ban_threshold = args[:ban_threshold] if args.key?(:ban_threshold)
          @conform_action = args[:conform_action] if args.key?(:conform_action)
          @enforce_on_key = args[:enforce_on_key] if args.key?(:enforce_on_key)
          @enforce_on_key_configs = args[:enforce_on_key_configs] if args.key?(:enforce_on_key_configs)
          @enforce_on_key_name = args[:enforce_on_key_name] if args.key?(:enforce_on_key_name)
          @exceed_action = args[:exceed_action] if args.key?(:exceed_action)
          @exceed_redirect_options = args[:exceed_redirect_options] if args.key?(:exceed_redirect_options)
          @rate_limit_threshold = args[:rate_limit_threshold] if args.key?(:rate_limit_threshold)
        end
      end
      
      # 
      class SecurityPolicyRuleRateLimitOptionsEnforceOnKeyConfig
        include Google::Apis::Core::Hashable
      
        # Rate limit key name applicable only for the following key types:
        # HTTP_HEADER -- Name of the HTTP header whose value is taken as the
        # key value. HTTP_COOKIE -- Name of the HTTP cookie whose value is
        # taken as the key value.
        # Corresponds to the JSON property `enforceOnKeyName`
        # @return [String]
        attr_accessor :enforce_on_key_name
      
        # Determines the key to enforce the rate_limit_threshold on. Possible
        # values are:
        # 
        # - ALL: A single rate limit threshold is applied to all
        # the requests matching this rule. This is the default value if
        # "enforceOnKeyConfigs" is not configured.
        # - IP: The source IP address of
        # the request is the key. Each IP has this limit enforced
        # separately.
        # - HTTP_HEADER: The value of the HTTP
        # header whose name is configured under "enforceOnKeyName". The key
        # value is truncated to the first 128 bytes of the header value. If no
        # such header is present in the request, the key type defaults toALL.
        # - XFF_IP: The first IP address (i.e. the
        # originating client IP address) specified in the list of IPs under
        # X-Forwarded-For HTTP header. If no such header is present or the
        # value is not a valid IP, the key defaults to the source IP address of
        # the request i.e. key type IP.
        # - HTTP_COOKIE: The value of the HTTP
        # cookie whose name is configured under "enforceOnKeyName". The key
        # value is truncated to the first 128 bytes of the cookie value. If no
        # such cookie is present in the request, the key type defaults toALL.
        # - HTTP_PATH: The URL path of the HTTP request. The key
        # value is truncated to the first 128 bytes.
        # - SNI: Server name indication in the TLS session of
        # the HTTPS request. The key value is truncated to the first 128 bytes.
        # The key type defaults to ALL on a HTTP session.
        # - REGION_CODE: The country/region from which the
        # request originates.
        # - TLS_JA3_FINGERPRINT: JA3 TLS/SSL fingerprint if the
        # client connects using HTTPS, HTTP/2 or HTTP/3. If not available, the
        # key type defaults to ALL.
        # - USER_IP: The IP address of the originating client,
        # which is resolved based on "userIpRequestHeaders" configured with the
        # security policy. If there is no "userIpRequestHeaders" configuration
        # or an IP address cannot be resolved from it, the key type defaults toIP.
        # - TLS_JA4_FINGERPRINT: JA4 TLS/SSL fingerprint if the
        # client connects using HTTPS, HTTP/2 or HTTP/3. If not available, the
        # key type defaults to ALL.
        # Corresponds to the JSON property `enforceOnKeyType`
        # @return [String]
        attr_accessor :enforce_on_key_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @enforce_on_key_name = args[:enforce_on_key_name] if args.key?(:enforce_on_key_name)
          @enforce_on_key_type = args[:enforce_on_key_type] if args.key?(:enforce_on_key_type)
        end
      end
      
      # 
      class SecurityPolicyRuleRateLimitOptionsThreshold
        include Google::Apis::Core::Hashable
      
        # Number of HTTP(S) requests for calculating the threshold.
        # Corresponds to the JSON property `count`
        # @return [Fixnum]
        attr_accessor :count
      
        # Interval over which the threshold is computed.
        # Corresponds to the JSON property `intervalSec`
        # @return [Fixnum]
        attr_accessor :interval_sec
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @count = args[:count] if args.key?(:count)
          @interval_sec = args[:interval_sec] if args.key?(:interval_sec)
        end
      end
      
      # 
      class SecurityPolicyRuleRedirectOptions
        include Google::Apis::Core::Hashable
      
        # Target for the redirect action. This is required if the type is
        # EXTERNAL_302 and cannot be specified for GOOGLE_RECAPTCHA.
        # Corresponds to the JSON property `target`
        # @return [String]
        attr_accessor :target
      
        # Type of the redirect action. Possible values are:
        # 
        # - GOOGLE_RECAPTCHA: redirect to reCAPTCHA for manual
        # challenge assessment.
        # - EXTERNAL_302: redirect to a different URL via a 302
        # response.
        # 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)
          @target = args[:target] if args.key?(:target)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # 
      class SecurityPolicyUserDefinedField
        include Google::Apis::Core::Hashable
      
        # The base relative to which 'offset' is measured. Possible values are:
        # 
        # - IPV4: Points to the beginning of the IPv4 header.
        # - IPV6: Points to the beginning of the IPv6 header.
        # - TCP: Points to the beginning of the TCP header, skipping
        # over any IPv4 options or IPv6 extension headers. Not present for
        # non-first fragments.
        # - UDP: Points to the beginning of the UDP header, skipping
        # over any IPv4 options or IPv6 extension headers. Not present for
        # non-first fragments.
        # required
        # Corresponds to the JSON property `base`
        # @return [String]
        attr_accessor :base
      
        # If specified, apply this mask (bitwise AND) to the field to ignore bits
        # before matching. Encoded as a hexadecimal number (starting with "0x").
        # The last byte of the field (in network byte order) corresponds to the
        # least significant byte of the mask.
        # Corresponds to the JSON property `mask`
        # @return [String]
        attr_accessor :mask
      
        # The name of this field. Must be unique within the policy.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Offset of the first byte of the field (in network byte order) relative to
        # 'base'.
        # Corresponds to the JSON property `offset`
        # @return [Fixnum]
        attr_accessor :offset
      
        # Size of the field in bytes. Valid values: 1-4.
        # Corresponds to the JSON property `size`
        # @return [Fixnum]
        attr_accessor :size
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @base = args[:base] if args.key?(:base)
          @mask = args[:mask] if args.key?(:mask)
          @name = args[:name] if args.key?(:name)
          @offset = args[:offset] if args.key?(:offset)
          @size = args[:size] if args.key?(:size)
        end
      end
      
      # The authentication and authorization settings for a BackendService.
      class SecuritySettings
        include Google::Apis::Core::Hashable
      
        # Contains the configurations necessary to generate a signature for access to
        # private storage buckets that support Signature Version 4 for authentication.
        # The service name for generating the authentication header will always default
        # to 's3'.
        # Corresponds to the JSON property `awsV4Authentication`
        # @return [Google::Apis::ComputeV1::Awsv4Signature]
        attr_accessor :aws_v4_authentication
      
        # Optional. A URL referring to a networksecurity.ClientTlsPolicy resource
        # that describes how clients should authenticate with this service's
        # backends.
        # clientTlsPolicy only applies to a globalBackendService with the
        # loadBalancingScheme set
        # to INTERNAL_SELF_MANAGED.
        # If left blank, communications are not encrypted.
        # Corresponds to the JSON property `clientTlsPolicy`
        # @return [String]
        attr_accessor :client_tls_policy
      
        # Optional. A list of Subject Alternative Names (SANs) that the client
        # verifies during a mutual TLS handshake with an server/endpoint for
        # thisBackendService. When the server presents its X.509 certificate
        # to the client, the client inspects the certificate'ssubjectAltName field. If
        # the field contains one of the
        # specified values, the communication continues. Otherwise, it fails. This
        # additional check enables the client to verify that the server is authorized
        # to run the requested service.
        # Note that the contents of the server
        # certificate's subjectAltName field are configured by the
        # Public Key Infrastructure which provisions server identities.
        # Only applies to a global BackendService withloadBalancingScheme set to
        # INTERNAL_SELF_MANAGED.
        # Only applies when BackendService has an attachedclientTlsPolicy with
        # clientCertificate (mTLS
        # mode).
        # Corresponds to the JSON property `subjectAltNames`
        # @return [Array<String>]
        attr_accessor :subject_alt_names
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @aws_v4_authentication = args[:aws_v4_authentication] if args.key?(:aws_v4_authentication)
          @client_tls_policy = args[:client_tls_policy] if args.key?(:client_tls_policy)
          @subject_alt_names = args[:subject_alt_names] if args.key?(:subject_alt_names)
        end
      end
      
      # An instance serial console output.
      class SerialPortOutput
        include Google::Apis::Core::Hashable
      
        # [Output Only] The contents of the console output.
        # Corresponds to the JSON property `contents`
        # @return [String]
        attr_accessor :contents
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # serialPortOutput for serial port output.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] The position of the next byte of content, regardless of
        # whether the content exists, following the output returned in the `contents`
        # property. Use this value in the next request as the start
        # parameter.
        # Corresponds to the JSON property `next`
        # @return [Fixnum]
        attr_accessor :next
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # The starting byte position of the output that was returned.
        # This should match the start parameter sent with the request.
        # If the serial console output exceeds the size of the buffer (1 MB), older
        # output is overwritten by newer content. The output start value will
        # indicate the byte position of the output that was returned, which might be
        # different than the `start` value that was specified in the request.
        # Corresponds to the JSON property `start`
        # @return [Fixnum]
        attr_accessor :start
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @contents = args[:contents] if args.key?(:contents)
          @kind = args[:kind] if args.key?(:kind)
          @next = args[:next] if args.key?(:next)
          @self_link = args[:self_link] if args.key?(:self_link)
          @start = args[:start] if args.key?(:start)
        end
      end
      
      # 
      class ServerBinding
        include Google::Apis::Core::Hashable
      
        # 
        # 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)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # A service account.
      class ServiceAccount
        include Google::Apis::Core::Hashable
      
        # Email address of the service account.
        # Corresponds to the JSON property `email`
        # @return [String]
        attr_accessor :email
      
        # The list of scopes to be made available for this service account.
        # Corresponds to the JSON property `scopes`
        # @return [Array<String>]
        attr_accessor :scopes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @email = args[:email] if args.key?(:email)
          @scopes = args[:scopes] if args.key?(:scopes)
        end
      end
      
      # Represents a ServiceAttachment resource.
      # A service attachment represents a service that a producer has exposed.
      # It encapsulates the load balancer which fronts the service runs and
      # a list of NAT IP ranges that the producers uses to represent
      # the consumers connecting to the service.
      class ServiceAttachment
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] An array of connections for all the consumers
        # connected to
        # this service attachment.
        # Corresponds to the JSON property `connectedEndpoints`
        # @return [Array<Google::Apis::ComputeV1::ServiceAttachmentConnectedEndpoint>]
        attr_accessor :connected_endpoints
      
        # The connection preference of service attachment. The value can be set
        # to ACCEPT_AUTOMATIC. An ACCEPT_AUTOMATIC
        # service attachment is one that always accepts the connection from consumer
        # forwarding rules.
        # Corresponds to the JSON property `connectionPreference`
        # @return [String]
        attr_accessor :connection_preference
      
        # Specifies which consumer projects or networks are allowed to connect to the
        # service attachment. Each project or network has a connection limit. A given
        # service attachment can manage connections at either the project or network
        # level. Therefore, both the accept and reject lists for a given service
        # attachment must contain either only projects or only networks or only
        # endpoints.
        # Corresponds to the JSON property `consumerAcceptLists`
        # @return [Array<Google::Apis::ComputeV1::ServiceAttachmentConsumerProjectLimit>]
        attr_accessor :consumer_accept_lists
      
        # Specifies a list of projects or networks that are not allowed to connect to
        # this service attachment. The project can be specified using its project ID
        # or project number and the network can be specified using its URL. A given
        # service attachment can manage connections at either the project or network
        # level. Therefore, both the reject and accept lists for a given service
        # attachment must contain either only projects or only networks.
        # Corresponds to the JSON property `consumerRejectLists`
        # @return [Array<String>]
        attr_accessor :consumer_reject_lists
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # If specified, the domain name will be used during the integration between
        # the PSC connected endpoints and the Cloud DNS. For example, this is a valid
        # domain name: "p.mycompany.com.". Current max number of domain names
        # supported is 1.
        # Corresponds to the JSON property `domainNames`
        # @return [Array<String>]
        attr_accessor :domain_names
      
        # If true, enable the proxy protocol which is for supplying client TCP/IP
        # address data in TCP connections that traverse proxies on their way to
        # destination servers.
        # Corresponds to the JSON property `enableProxyProtocol`
        # @return [Boolean]
        attr_accessor :enable_proxy_protocol
        alias_method :enable_proxy_protocol?, :enable_proxy_protocol
      
        # Fingerprint of this resource. A hash of the contents stored in this object.
        # This field is used in optimistic locking. This field will be ignored when
        # inserting a ServiceAttachment. An up-to-date fingerprint must
        # be provided in order to patch/update the ServiceAttachment; otherwise, the
        # request will fail with error 412 conditionNotMet. To see the
        # latest fingerprint, make a get() request to retrieve the
        # ServiceAttachment.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Output only. [Output Only] The unique identifier for the resource type. The
        # server
        # generates this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # serviceAttachment for service attachments.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Metadata of the service attachment.
        # Corresponds to the JSON property `metadata`
        # @return [Hash<String,String>]
        attr_accessor :metadata
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # An array of URLs where each entry is the URL of a subnet provided
        # by the service producer to use for NAT in this service attachment.
        # Corresponds to the JSON property `natSubnets`
        # @return [Array<String>]
        attr_accessor :nat_subnets
      
        # The URL of a forwarding rule with loadBalancingScheme INTERNAL* that is
        # serving the endpoint identified by this service attachment.
        # Corresponds to the JSON property `producerForwardingRule`
        # @return [String]
        attr_accessor :producer_forwarding_rule
      
        # The number of consumer spokes that connected Private Service Connect
        # endpoints can be propagated to through Network Connectivity Center. This
        # limit lets the service producer limit how many propagated Private Service
        # Connect connections can be established to this service attachment from a
        # single consumer.
        # If the connection preference of the service attachment is ACCEPT_MANUAL,
        # the limit applies to each project or network that is listed in the consumer
        # accept list. If the connection preference of the service attachment is
        # ACCEPT_AUTOMATIC, the limit applies to each project that contains a
        # connected endpoint.
        # If unspecified, the default propagated connection limit is 250.
        # Corresponds to the JSON property `propagatedConnectionLimit`
        # @return [Fixnum]
        attr_accessor :propagated_connection_limit
      
        # Output only. [Output Only] An 128-bit global unique ID of the PSC service
        # attachment.
        # Corresponds to the JSON property `pscServiceAttachmentId`
        # @return [Google::Apis::ComputeV1::Uint128]
        attr_accessor :psc_service_attachment_id
      
        # This flag determines whether a consumer accept/reject list change can
        # reconcile the statuses of existing ACCEPTED or REJECTED PSC endpoints.
        # 
        # 
        # -  If false, connection policy update will only affect existing PENDING
        # PSC endpoints. Existing ACCEPTED/REJECTED endpoints will remain untouched
        # regardless how the connection policy is modified .
        # -  If true,
        # update will affect both PENDING and ACCEPTED/REJECTED PSC endpoints. For
        # example, an ACCEPTED PSC endpoint will be moved to REJECTED if its project
        # is added to the reject list.
        # For newly created service attachment, this boolean defaults to false.
        # Corresponds to the JSON property `reconcileConnections`
        # @return [Boolean]
        attr_accessor :reconcile_connections
        alias_method :reconcile_connections?, :reconcile_connections
      
        # Output only. [Output Only] URL of the region where the service attachment
        # resides.
        # This field applies only to the region resource. You must specify this
        # field as part of the HTTP request URL. It is not settable as a field in
        # the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # The URL of a service serving the endpoint identified by this service
        # attachment.
        # Corresponds to the JSON property `targetService`
        # @return [String]
        attr_accessor :target_service
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @connected_endpoints = args[:connected_endpoints] if args.key?(:connected_endpoints)
          @connection_preference = args[:connection_preference] if args.key?(:connection_preference)
          @consumer_accept_lists = args[:consumer_accept_lists] if args.key?(:consumer_accept_lists)
          @consumer_reject_lists = args[:consumer_reject_lists] if args.key?(:consumer_reject_lists)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @domain_names = args[:domain_names] if args.key?(:domain_names)
          @enable_proxy_protocol = args[:enable_proxy_protocol] if args.key?(:enable_proxy_protocol)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @metadata = args[:metadata] if args.key?(:metadata)
          @name = args[:name] if args.key?(:name)
          @nat_subnets = args[:nat_subnets] if args.key?(:nat_subnets)
          @producer_forwarding_rule = args[:producer_forwarding_rule] if args.key?(:producer_forwarding_rule)
          @propagated_connection_limit = args[:propagated_connection_limit] if args.key?(:propagated_connection_limit)
          @psc_service_attachment_id = args[:psc_service_attachment_id] if args.key?(:psc_service_attachment_id)
          @reconcile_connections = args[:reconcile_connections] if args.key?(:reconcile_connections)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @target_service = args[:target_service] if args.key?(:target_service)
        end
      end
      
      # Contains a list of ServiceAttachmentsScopedList.
      class ServiceAttachmentAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of ServiceAttachmentsScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::ServiceAttachmentsScopedList>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ServiceAttachmentAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ServiceAttachmentAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # [Output Only] A connection connected to this service attachment.
      class ServiceAttachmentConnectedEndpoint
        include Google::Apis::Core::Hashable
      
        # The url of the consumer network.
        # Corresponds to the JSON property `consumerNetwork`
        # @return [String]
        attr_accessor :consumer_network
      
        # The url of a connected endpoint.
        # Corresponds to the JSON property `endpoint`
        # @return [String]
        attr_accessor :endpoint
      
        # NAT IPs of the connected PSC endpoint and those of other endpoints
        # propagated from it.
        # Corresponds to the JSON property `natIps`
        # @return [Array<String>]
        attr_accessor :nat_ips
      
        # The number of consumer Network Connectivity Center spokes that the
        # connected Private Service Connect endpoint has propagated to.
        # Corresponds to the JSON property `propagatedConnectionCount`
        # @return [Fixnum]
        attr_accessor :propagated_connection_count
      
        # The PSC connection id of the connected endpoint.
        # Corresponds to the JSON property `pscConnectionId`
        # @return [Fixnum]
        attr_accessor :psc_connection_id
      
        # The status of a connected endpoint to this service attachment.
        # 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)
          @consumer_network = args[:consumer_network] if args.key?(:consumer_network)
          @endpoint = args[:endpoint] if args.key?(:endpoint)
          @nat_ips = args[:nat_ips] if args.key?(:nat_ips)
          @propagated_connection_count = args[:propagated_connection_count] if args.key?(:propagated_connection_count)
          @psc_connection_id = args[:psc_connection_id] if args.key?(:psc_connection_id)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # 
      class ServiceAttachmentConsumerProjectLimit
        include Google::Apis::Core::Hashable
      
        # The value of the limit to set. For endpoint_url, the limit should be no
        # more than 1.
        # Corresponds to the JSON property `connectionLimit`
        # @return [Fixnum]
        attr_accessor :connection_limit
      
        # The network URL for the network to set the limit for.
        # Corresponds to the JSON property `networkUrl`
        # @return [String]
        attr_accessor :network_url
      
        # The project id or number for the project to set the limit for.
        # Corresponds to the JSON property `projectIdOrNum`
        # @return [String]
        attr_accessor :project_id_or_num
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @connection_limit = args[:connection_limit] if args.key?(:connection_limit)
          @network_url = args[:network_url] if args.key?(:network_url)
          @project_id_or_num = args[:project_id_or_num] if args.key?(:project_id_or_num)
        end
      end
      
      # 
      class ServiceAttachmentList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of ServiceAttachment resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::ServiceAttachment>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # serviceAttachment for service attachments.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ServiceAttachmentList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ServiceAttachmentList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class ServiceAttachmentsScopedList
        include Google::Apis::Core::Hashable
      
        # A list of ServiceAttachments contained in this scope.
        # Corresponds to the JSON property `serviceAttachments`
        # @return [Array<Google::Apis::ComputeV1::ServiceAttachment>]
        attr_accessor :service_attachments
      
        # Informational warning which replaces the list of
        # service attachments when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ServiceAttachmentsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @service_attachments = args[:service_attachments] if args.key?(:service_attachments)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of
        # service attachments when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ServiceAttachmentsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class SetCommonInstanceMetadataOperationMetadata
        include Google::Apis::Core::Hashable
      
        # [Output Only] The client operation id.
        # Corresponds to the JSON property `clientOperationId`
        # @return [String]
        attr_accessor :client_operation_id
      
        # [Output Only] Status information per location (location name is key).
        # Example key: zones/us-central1-a
        # Corresponds to the JSON property `perLocationOperations`
        # @return [Hash<String,Google::Apis::ComputeV1::SetCommonInstanceMetadataOperationMetadataPerLocationOperationInfo>]
        attr_accessor :per_location_operations
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @client_operation_id = args[:client_operation_id] if args.key?(:client_operation_id)
          @per_location_operations = args[:per_location_operations] if args.key?(:per_location_operations)
        end
      end
      
      # 
      class SetCommonInstanceMetadataOperationMetadataPerLocationOperationInfo
        include Google::Apis::Core::Hashable
      
        # 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::ComputeV1::Status]
        attr_accessor :error
      
        # [Output Only] Status of the action, which can be one of the following:
        # `PROPAGATING`, `PROPAGATED`, `ABANDONED`, `FAILED`, or `DONE`.
        # 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)
          @error = args[:error] if args.key?(:error)
          @state = args[:state] if args.key?(:state)
        end
      end
      
      # The share setting for reservations and sole tenancy node groups.
      class ShareSettings
        include Google::Apis::Core::Hashable
      
        # A map of project id and project config. This is only valid when
        # share_type's value is SPECIFIC_PROJECTS.
        # Corresponds to the JSON property `projectMap`
        # @return [Hash<String,Google::Apis::ComputeV1::ShareSettingsProjectConfig>]
        attr_accessor :project_map
      
        # Type of sharing for this shared-reservation
        # Corresponds to the JSON property `shareType`
        # @return [String]
        attr_accessor :share_type
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @project_map = args[:project_map] if args.key?(:project_map)
          @share_type = args[:share_type] if args.key?(:share_type)
        end
      end
      
      # Config for each project in the share settings.
      class ShareSettingsProjectConfig
        include Google::Apis::Core::Hashable
      
        # The project ID, should be same as the key of this project config in the
        # parent map.
        # Corresponds to the JSON property `projectId`
        # @return [String]
        attr_accessor :project_id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @project_id = args[:project_id] if args.key?(:project_id)
        end
      end
      
      # A set of Shielded Instance options.
      class ShieldedInstanceConfig
        include Google::Apis::Core::Hashable
      
        # Defines whether the instance has integrity monitoring enabled.Enabled by
        # default.
        # Corresponds to the JSON property `enableIntegrityMonitoring`
        # @return [Boolean]
        attr_accessor :enable_integrity_monitoring
        alias_method :enable_integrity_monitoring?, :enable_integrity_monitoring
      
        # Defines whether the instance has Secure Boot enabled.Disabled by
        # default.
        # Corresponds to the JSON property `enableSecureBoot`
        # @return [Boolean]
        attr_accessor :enable_secure_boot
        alias_method :enable_secure_boot?, :enable_secure_boot
      
        # Defines whether the instance has the vTPM enabled.Enabled by
        # default.
        # Corresponds to the JSON property `enableVtpm`
        # @return [Boolean]
        attr_accessor :enable_vtpm
        alias_method :enable_vtpm?, :enable_vtpm
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @enable_integrity_monitoring = args[:enable_integrity_monitoring] if args.key?(:enable_integrity_monitoring)
          @enable_secure_boot = args[:enable_secure_boot] if args.key?(:enable_secure_boot)
          @enable_vtpm = args[:enable_vtpm] if args.key?(:enable_vtpm)
        end
      end
      
      # A Shielded Instance Identity.
      class ShieldedInstanceIdentity
        include Google::Apis::Core::Hashable
      
        # A Shielded Instance Identity Entry.
        # Corresponds to the JSON property `eccP256EncryptionKey`
        # @return [Google::Apis::ComputeV1::ShieldedInstanceIdentityEntry]
        attr_accessor :ecc_p256_encryption_key
      
        # A Shielded Instance Identity Entry.
        # Corresponds to the JSON property `eccP256SigningKey`
        # @return [Google::Apis::ComputeV1::ShieldedInstanceIdentityEntry]
        attr_accessor :ecc_p256_signing_key
      
        # A Shielded Instance Identity Entry.
        # Corresponds to the JSON property `encryptionKey`
        # @return [Google::Apis::ComputeV1::ShieldedInstanceIdentityEntry]
        attr_accessor :encryption_key
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#
        # shieldedInstanceIdentity for shielded Instance
        # identity entry.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A Shielded Instance Identity Entry.
        # Corresponds to the JSON property `signingKey`
        # @return [Google::Apis::ComputeV1::ShieldedInstanceIdentityEntry]
        attr_accessor :signing_key
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ecc_p256_encryption_key = args[:ecc_p256_encryption_key] if args.key?(:ecc_p256_encryption_key)
          @ecc_p256_signing_key = args[:ecc_p256_signing_key] if args.key?(:ecc_p256_signing_key)
          @encryption_key = args[:encryption_key] if args.key?(:encryption_key)
          @kind = args[:kind] if args.key?(:kind)
          @signing_key = args[:signing_key] if args.key?(:signing_key)
        end
      end
      
      # A Shielded Instance Identity Entry.
      class ShieldedInstanceIdentityEntry
        include Google::Apis::Core::Hashable
      
        # A PEM-encoded X.509 certificate. This field can be empty.
        # Corresponds to the JSON property `ekCert`
        # @return [String]
        attr_accessor :ek_cert
      
        # A PEM-encoded public key.
        # Corresponds to the JSON property `ekPub`
        # @return [String]
        attr_accessor :ek_pub
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ek_cert = args[:ek_cert] if args.key?(:ek_cert)
          @ek_pub = args[:ek_pub] if args.key?(:ek_pub)
        end
      end
      
      # The policy describes the baseline against which
      # Instance boot integrity is measured.
      class ShieldedInstanceIntegrityPolicy
        include Google::Apis::Core::Hashable
      
        # Updates the integrity policy baseline using the
        # measurements from the VM instance's most recent boot.
        # Corresponds to the JSON property `updateAutoLearnPolicy`
        # @return [Boolean]
        attr_accessor :update_auto_learn_policy
        alias_method :update_auto_learn_policy?, :update_auto_learn_policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @update_auto_learn_policy = args[:update_auto_learn_policy] if args.key?(:update_auto_learn_policy)
        end
      end
      
      # Represents a customer-supplied Signing Key used by Cloud CDN Signed URLs
      class SignedUrlKey
        include Google::Apis::Core::Hashable
      
        # Name of the key. The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `keyName`
        # @return [String]
        attr_accessor :key_name
      
        # 128-bit key value used for signing the URL. The key value must be a validRFC
        # 4648 Section 5 base64url encoded string.
        # Corresponds to the JSON property `keyValue`
        # @return [String]
        attr_accessor :key_value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @key_name = args[:key_name] if args.key?(:key_name)
          @key_value = args[:key_value] if args.key?(:key_value)
        end
      end
      
      # Represents a Persistent Disk Snapshot resource.
      # You can use snapshots to back up data on a regular interval. For more
      # information, read  Creating
      # persistent disk snapshots.
      class Snapshot
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The architecture of the snapshot. Valid values are
        # ARM64 or X86_64.
        # Corresponds to the JSON property `architecture`
        # @return [String]
        attr_accessor :architecture
      
        # Output only. [Output Only] Set to true if snapshots are automatically created
        # by
        # applying resource policy on the target disk.
        # Corresponds to the JSON property `autoCreated`
        # @return [Boolean]
        attr_accessor :auto_created
        alias_method :auto_created?, :auto_created
      
        # Creates the new snapshot in the snapshot chain labeled with the
        # specified name. The chain name must be 1-63 characters long and comply
        # with RFC1035. This is an uncommon option only for advanced service
        # owners who needs to create separate snapshot chains, for example,
        # for chargeback tracking. When you describe your snapshot resource, this
        # field is visible only if it has a non-empty value.
        # Corresponds to the JSON property `chainName`
        # @return [String]
        attr_accessor :chain_name
      
        # Output only. [Output Only] Size in bytes of the snapshot at creation time.
        # Corresponds to the JSON property `creationSizeBytes`
        # @return [Fixnum]
        attr_accessor :creation_size_bytes
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] Size of the source disk, specified in GB.
        # Corresponds to the JSON property `diskSizeGb`
        # @return [Fixnum]
        attr_accessor :disk_size_gb
      
        # Output only. [Output Only] Number of bytes downloaded to restore a snapshot to
        # a disk.
        # Corresponds to the JSON property `downloadBytes`
        # @return [Fixnum]
        attr_accessor :download_bytes
      
        # Output only. Whether this snapshot is created from a confidential compute mode
        # disk.
        # [Output Only]: This field is not set by user, but from source disk.
        # Corresponds to the JSON property `enableConfidentialCompute`
        # @return [Boolean]
        attr_accessor :enable_confidential_compute
        alias_method :enable_confidential_compute?, :enable_confidential_compute
      
        # [Input Only] Whether to attempt an application consistent snapshot by
        # informing the OS to prepare for the snapshot process.
        # Corresponds to the JSON property `guestFlush`
        # @return [Boolean]
        attr_accessor :guest_flush
        alias_method :guest_flush?, :guest_flush
      
        # Output only. [Output Only] A list of features to enable on the guest operating
        # system.
        # Applicable only for bootable images. Read
        # Enabling guest operating system features to see a list of available
        # options.
        # Corresponds to the JSON property `guestOsFeatures`
        # @return [Array<Google::Apis::ComputeV1::GuestOsFeature>]
        attr_accessor :guest_os_features
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Always compute#snapshot
        # for Snapshot resources.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this snapshot, which is
        # essentially a hash of the labels set used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a snapshot.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels to apply to this snapshot. These can be later modified by
        # the setLabels method.
        # Label values may be empty.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Output only. [Output Only] Integer license codes indicating which licenses are
        # attached
        # to this snapshot.
        # Corresponds to the JSON property `licenseCodes`
        # @return [Array<Fixnum>]
        attr_accessor :license_codes
      
        # Output only. [Output Only] A list of public visible licenses that apply to
        # this
        # snapshot. This can be because the original image had licenses attached
        # (such as a Windows image).
        # Corresponds to the JSON property `licenses`
        # @return [Array<String>]
        attr_accessor :licenses
      
        # An opaque location hint used to place the snapshot close to other
        # resources.
        # This field is for use by internal tools that use the public API.
        # Corresponds to the JSON property `locationHint`
        # @return [String]
        attr_accessor :location_hint
      
        # Name of the resource; provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must be
        # a dash, lowercase letter, or digit, except the last character, which cannot
        # be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Additional snapshot params.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::SnapshotParams]
        attr_accessor :params
      
        # Output only. Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzi`
        # @return [Boolean]
        attr_accessor :satisfies_pzi
        alias_method :satisfies_pzi?, :satisfies_pzi
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Encrypts the snapshot using acustomer-supplied
        # encryption key.
        # After you encrypt a snapshot using a customer-supplied key, you must
        # provide the same key if you use the snapshot later. For example, you must
        # provide the encryption key when you create a disk from the encrypted
        # snapshot in a future request.
        # Customer-supplied encryption keys do not protect access to metadata
        # of the snapshot.
        # If you do not provide an encryption key when creating the snapshot, then
        # the snapshot will be encrypted using an automatically generated key and you
        # do not need to provide a key to use the snapshot later.
        # Corresponds to the JSON property `snapshotEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :snapshot_encryption_key
      
        # Indicates the type of the snapshot.
        # Corresponds to the JSON property `snapshotType`
        # @return [String]
        attr_accessor :snapshot_type
      
        # The source disk used to create this snapshot.
        # Corresponds to the JSON property `sourceDisk`
        # @return [String]
        attr_accessor :source_disk
      
        # The customer-supplied
        # encryption key of the source disk. Required if the source disk is
        # protected by a customer-supplied encryption key.
        # Corresponds to the JSON property `sourceDiskEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :source_disk_encryption_key
      
        # The source disk whose recovery checkpoint will be used to create this
        # snapshot.
        # Corresponds to the JSON property `sourceDiskForRecoveryCheckpoint`
        # @return [String]
        attr_accessor :source_disk_for_recovery_checkpoint
      
        # Output only. [Output Only] The ID value of the disk used to create this
        # snapshot. This
        # value may be used to determine whether the snapshot was taken from the
        # current or a previous instance of a given disk name.
        # Corresponds to the JSON property `sourceDiskId`
        # @return [String]
        attr_accessor :source_disk_id
      
        # The source instant snapshot used to create this snapshot. You can provide
        # this as a partial or full URL to the resource. For example, the following
        # are valid values:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/
        # instantSnapshots/instantSnapshot
        # - projects/project/zones/zone/instantSnapshots/instantSnapshot
        # - zones/zone/instantSnapshots/instantSnapshot
        # Corresponds to the JSON property `sourceInstantSnapshot`
        # @return [String]
        attr_accessor :source_instant_snapshot
      
        # Customer provided encryption key when creating Snapshot from Instant
        # Snapshot.
        # Corresponds to the JSON property `sourceInstantSnapshotEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :source_instant_snapshot_encryption_key
      
        # Output only. [Output Only] The unique ID of the instant snapshot used to
        # create this
        # snapshot. This value identifies the exact instant snapshot that was used to
        # create this snapshot. For example, if you created the snapshot from an
        # instant snapshot that was later deleted and recreated under the same name,
        # the source instant snapshot ID would identify the exact instant snapshot
        # that was used.
        # Corresponds to the JSON property `sourceInstantSnapshotId`
        # @return [String]
        attr_accessor :source_instant_snapshot_id
      
        # Output only. [Output Only] URL of the resource policy which created this
        # scheduled snapshot.
        # Corresponds to the JSON property `sourceSnapshotSchedulePolicy`
        # @return [String]
        attr_accessor :source_snapshot_schedule_policy
      
        # Output only. [Output Only] ID of the resource policy which created this
        # scheduled snapshot.
        # Corresponds to the JSON property `sourceSnapshotSchedulePolicyId`
        # @return [String]
        attr_accessor :source_snapshot_schedule_policy_id
      
        # Output only. [Output Only] The status of the snapshot. This can beCREATING,
        # DELETING, FAILED,READY, or UPLOADING.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Output only. [Output Only] A size of the storage used by the snapshot. As
        # snapshots
        # share storage, this number is expected to change with snapshot
        # creation/deletion.
        # Corresponds to the JSON property `storageBytes`
        # @return [Fixnum]
        attr_accessor :storage_bytes
      
        # Output only. [Output Only] An indicator whether storageBytes is in a
        # stable state or it is being adjusted as a result of shared storage
        # reallocation. This status can either be UPDATING, meaning
        # the size of the snapshot is being updated, or UP_TO_DATE,
        # meaning the size of the snapshot is up-to-date.
        # Corresponds to the JSON property `storageBytesStatus`
        # @return [String]
        attr_accessor :storage_bytes_status
      
        # Cloud Storage bucket storage location of the snapshot (regional or
        # multi-regional).
        # Corresponds to the JSON property `storageLocations`
        # @return [Array<String>]
        attr_accessor :storage_locations
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @architecture = args[:architecture] if args.key?(:architecture)
          @auto_created = args[:auto_created] if args.key?(:auto_created)
          @chain_name = args[:chain_name] if args.key?(:chain_name)
          @creation_size_bytes = args[:creation_size_bytes] if args.key?(:creation_size_bytes)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @disk_size_gb = args[:disk_size_gb] if args.key?(:disk_size_gb)
          @download_bytes = args[:download_bytes] if args.key?(:download_bytes)
          @enable_confidential_compute = args[:enable_confidential_compute] if args.key?(:enable_confidential_compute)
          @guest_flush = args[:guest_flush] if args.key?(:guest_flush)
          @guest_os_features = args[:guest_os_features] if args.key?(:guest_os_features)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @license_codes = args[:license_codes] if args.key?(:license_codes)
          @licenses = args[:licenses] if args.key?(:licenses)
          @location_hint = args[:location_hint] if args.key?(:location_hint)
          @name = args[:name] if args.key?(:name)
          @params = args[:params] if args.key?(:params)
          @satisfies_pzi = args[:satisfies_pzi] if args.key?(:satisfies_pzi)
          @satisfies_pzs = args[:satisfies_pzs] if args.key?(:satisfies_pzs)
          @self_link = args[:self_link] if args.key?(:self_link)
          @snapshot_encryption_key = args[:snapshot_encryption_key] if args.key?(:snapshot_encryption_key)
          @snapshot_type = args[:snapshot_type] if args.key?(:snapshot_type)
          @source_disk = args[:source_disk] if args.key?(:source_disk)
          @source_disk_encryption_key = args[:source_disk_encryption_key] if args.key?(:source_disk_encryption_key)
          @source_disk_for_recovery_checkpoint = args[:source_disk_for_recovery_checkpoint] if args.key?(:source_disk_for_recovery_checkpoint)
          @source_disk_id = args[:source_disk_id] if args.key?(:source_disk_id)
          @source_instant_snapshot = args[:source_instant_snapshot] if args.key?(:source_instant_snapshot)
          @source_instant_snapshot_encryption_key = args[:source_instant_snapshot_encryption_key] if args.key?(:source_instant_snapshot_encryption_key)
          @source_instant_snapshot_id = args[:source_instant_snapshot_id] if args.key?(:source_instant_snapshot_id)
          @source_snapshot_schedule_policy = args[:source_snapshot_schedule_policy] if args.key?(:source_snapshot_schedule_policy)
          @source_snapshot_schedule_policy_id = args[:source_snapshot_schedule_policy_id] if args.key?(:source_snapshot_schedule_policy_id)
          @status = args[:status] if args.key?(:status)
          @storage_bytes = args[:storage_bytes] if args.key?(:storage_bytes)
          @storage_bytes_status = args[:storage_bytes_status] if args.key?(:storage_bytes_status)
          @storage_locations = args[:storage_locations] if args.key?(:storage_locations)
        end
      end
      
      # Contains a list of Snapshot resources.
      class SnapshotList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Snapshot resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Snapshot>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SnapshotList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SnapshotList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Additional snapshot params.
      class SnapshotParams
        include Google::Apis::Core::Hashable
      
        # Resource manager tags to be bound to the snapshot. Tag keys and values have
        # the same definition as resource
        # manager tags. Keys and values can be either in numeric format,
        # such as `tagKeys/`tag_key_id`` and `tagValues/456` or in namespaced
        # format such as ``org_id|project_id`/`tag_key_short_name`` and
        # ``tag_value_short_name``. The field is ignored (both PUT &
        # PATCH) when empty.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # 
      class SnapshotSettings
        include Google::Apis::Core::Hashable
      
        # Policy of which storage location is going to be resolved, and additional
        # data that particularizes how the policy is going to be carried out.
        # Corresponds to the JSON property `storageLocation`
        # @return [Google::Apis::ComputeV1::SnapshotSettingsStorageLocationSettings]
        attr_accessor :storage_location
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @storage_location = args[:storage_location] if args.key?(:storage_location)
        end
      end
      
      # 
      class SnapshotSettingsStorageLocationSettings
        include Google::Apis::Core::Hashable
      
        # When the policy is SPECIFIC_LOCATIONS, snapshots will be stored
        # in the locations listed in this field. Keys are Cloud Storage bucket
        # locations. Only one location can be specified.
        # Corresponds to the JSON property `locations`
        # @return [Hash<String,Google::Apis::ComputeV1::SnapshotSettingsStorageLocationSettingsStorageLocationPreference>]
        attr_accessor :locations
      
        # The chosen location policy.
        # Corresponds to the JSON property `policy`
        # @return [String]
        attr_accessor :policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @locations = args[:locations] if args.key?(:locations)
          @policy = args[:policy] if args.key?(:policy)
        end
      end
      
      # A structure for specifying storage locations.
      class SnapshotSettingsStorageLocationSettingsStorageLocationPreference
        include Google::Apis::Core::Hashable
      
        # Name of the location. It should be one of the Cloud Storage buckets.
        # Only one location can be specified.
        # 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)
          @name = args[:name] if args.key?(:name)
        end
      end
      
      # 
      class SourceDiskEncryptionKey
        include Google::Apis::Core::Hashable
      
        # Thecustomer-supplied
        # encryption key of the source disk. Required if the source disk is
        # protected by a customer-supplied encryption key.
        # Corresponds to the JSON property `diskEncryptionKey`
        # @return [Google::Apis::ComputeV1::CustomerEncryptionKey]
        attr_accessor :disk_encryption_key
      
        # URL of the disk attached to the source instance. This can be a full or
        # valid partial URL. For example, the following are valid values:
        # 
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/disks/
        # disk
        # - projects/project/zones/zone/disks/disk
        # - zones/zone/disks/disk
        # Corresponds to the JSON property `sourceDisk`
        # @return [String]
        attr_accessor :source_disk
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disk_encryption_key = args[:disk_encryption_key] if args.key?(:disk_encryption_key)
          @source_disk = args[:source_disk] if args.key?(:source_disk)
        end
      end
      
      # A specification of the parameters to use when creating the instance template
      # from a source instance.
      class SourceInstanceParams
        include Google::Apis::Core::Hashable
      
        # Attached disks configuration. If not provided, defaults are applied:
        # For boot disk and any other R/W disks, the source images for each disk
        # will be used. For read-only disks, they will be attached in read-only
        # mode. Local SSD disks will be created as blank volumes.
        # Corresponds to the JSON property `diskConfigs`
        # @return [Array<Google::Apis::ComputeV1::DiskInstantiationConfig>]
        attr_accessor :disk_configs
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disk_configs = args[:disk_configs] if args.key?(:disk_configs)
        end
      end
      
      # DEPRECATED: Please use compute#instanceProperties instead.
      # New properties will not be added to this field.
      class SourceInstanceProperties
        include Google::Apis::Core::Hashable
      
        # Enables instances created based on this machine image to send packets with
        # source IP addresses other than their own and receive packets with
        # destination IP addresses other than their own. If these instances will be
        # used as an IP gateway or it will be set as the next-hop in a Route
        # resource, specify true. If unsure, leave this set tofalse. See theEnable IP
        # forwarding
        # documentation for more information.
        # Corresponds to the JSON property `canIpForward`
        # @return [Boolean]
        attr_accessor :can_ip_forward
        alias_method :can_ip_forward?, :can_ip_forward
      
        # Whether the instance created from this machine image should be protected
        # against deletion.
        # Corresponds to the JSON property `deletionProtection`
        # @return [Boolean]
        attr_accessor :deletion_protection
        alias_method :deletion_protection?, :deletion_protection
      
        # An optional text description for the instances that are created from this
        # machine image.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # An array of disks that are associated with the instances that are created
        # from this machine image.
        # Corresponds to the JSON property `disks`
        # @return [Array<Google::Apis::ComputeV1::SavedAttachedDisk>]
        attr_accessor :disks
      
        # A list of guest accelerator cards' type and count to use for instances
        # created from this machine image.
        # Corresponds to the JSON property `guestAccelerators`
        # @return [Array<Google::Apis::ComputeV1::AcceleratorConfig>]
        attr_accessor :guest_accelerators
      
        # KeyRevocationActionType of the instance. Supported options are "STOP" and
        # "NONE". The default value is "NONE" if it is not specified.
        # Corresponds to the JSON property `keyRevocationActionType`
        # @return [String]
        attr_accessor :key_revocation_action_type
      
        # Labels to apply to instances that are created from this machine image.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # The machine type to use for instances that are created from this machine
        # image.
        # Corresponds to the JSON property `machineType`
        # @return [String]
        attr_accessor :machine_type
      
        # A metadata key/value entry.
        # Corresponds to the JSON property `metadata`
        # @return [Google::Apis::ComputeV1::Metadata]
        attr_accessor :metadata
      
        # Minimum cpu/platform to be used by instances created from this machine
        # image. The instance may be scheduled on the specified or newer
        # cpu/platform. Applicable values are the friendly names of CPU platforms,
        # such as minCpuPlatform: "Intel Haswell" orminCpuPlatform: "Intel Sandy Bridge".
        # For more
        # information, read Specifying a
        # Minimum CPU Platform.
        # Corresponds to the JSON property `minCpuPlatform`
        # @return [String]
        attr_accessor :min_cpu_platform
      
        # An array of network access configurations for this interface.
        # Corresponds to the JSON property `networkInterfaces`
        # @return [Array<Google::Apis::ComputeV1::NetworkInterface>]
        attr_accessor :network_interfaces
      
        # PostKeyRevocationActionType of the instance.
        # Corresponds to the JSON property `postKeyRevocationActionType`
        # @return [String]
        attr_accessor :post_key_revocation_action_type
      
        # Sets the scheduling options for an Instance.
        # Corresponds to the JSON property `scheduling`
        # @return [Google::Apis::ComputeV1::Scheduling]
        attr_accessor :scheduling
      
        # A list of service accounts with specified scopes. Access tokens for these
        # service accounts are available to the instances that are created from this
        # machine image. Use metadata queries to obtain the access tokens for these
        # instances.
        # Corresponds to the JSON property `serviceAccounts`
        # @return [Array<Google::Apis::ComputeV1::ServiceAccount>]
        attr_accessor :service_accounts
      
        # A set of instance tags.
        # Corresponds to the JSON property `tags`
        # @return [Google::Apis::ComputeV1::Tags]
        attr_accessor :tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @can_ip_forward = args[:can_ip_forward] if args.key?(:can_ip_forward)
          @deletion_protection = args[:deletion_protection] if args.key?(:deletion_protection)
          @description = args[:description] if args.key?(:description)
          @disks = args[:disks] if args.key?(:disks)
          @guest_accelerators = args[:guest_accelerators] if args.key?(:guest_accelerators)
          @key_revocation_action_type = args[:key_revocation_action_type] if args.key?(:key_revocation_action_type)
          @labels = args[:labels] if args.key?(:labels)
          @machine_type = args[:machine_type] if args.key?(:machine_type)
          @metadata = args[:metadata] if args.key?(:metadata)
          @min_cpu_platform = args[:min_cpu_platform] if args.key?(:min_cpu_platform)
          @network_interfaces = args[:network_interfaces] if args.key?(:network_interfaces)
          @post_key_revocation_action_type = args[:post_key_revocation_action_type] if args.key?(:post_key_revocation_action_type)
          @scheduling = args[:scheduling] if args.key?(:scheduling)
          @service_accounts = args[:service_accounts] if args.key?(:service_accounts)
          @tags = args[:tags] if args.key?(:tags)
        end
      end
      
      # Represents an SSL certificate resource.
      # Google Compute Engine has two SSL certificate resources:
      # * [Global](/compute/docs/reference/rest/v1/sslCertificates)
      # * [Regional](/compute/docs/reference/rest/v1/regionSslCertificates)
      # The global SSL certificates (sslCertificates) are used by:
      # 
      # - Global external Application Load Balancers
      # - Classic Application Load Balancers
      # - Proxy Network Load Balancers (with target SSL proxies)
      # The regional SSL certificates (regionSslCertificates) are used
      # by:
      # 
      # - Regional external Application Load Balancers
      # - Regional internal Application Load Balancers
      # Optionally, certificate file contents that you upload can contain a set of up
      # to five PEM-encoded certificates.
      # The API call creates an object (sslCertificate) that holds this data.
      # You can use SSL keys and certificates to secure connections to a load
      # balancer.
      # For more information, read
      # Creating and using SSL certificates,SSL certificates
      # quotas and limits, and
      # Troubleshooting SSL certificates.
      class SslCertificate
        include Google::Apis::Core::Hashable
      
        # A value read into memory from a certificate file. The certificate file must
        # be in PEM format. The certificate chain must be no greater than 5 certs
        # long. The chain must include at least one intermediate cert.
        # Corresponds to the JSON property `certificate`
        # @return [String]
        attr_accessor :certificate
      
        # [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] Expire time of the certificate. RFC3339
        # Corresponds to the JSON property `expireTime`
        # @return [String]
        attr_accessor :expire_time
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#sslCertificate
        # for SSL certificates.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Configuration and status of a managed SSL certificate.
        # Corresponds to the JSON property `managed`
        # @return [Google::Apis::ComputeV1::SslCertificateManagedSslCertificate]
        attr_accessor :managed
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # A value read into memory from a write-only private key file. The private
        # key file must be in PEM format. For security, only insert
        # requests include this field.
        # Corresponds to the JSON property `privateKey`
        # @return [String]
        attr_accessor :private_key
      
        # Output only. [Output Only] URL of the region where the regional SSL
        # Certificate
        # resides. This field is not applicable to global SSL Certificate.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Configuration and status of a self-managed SSL certificate.
        # Corresponds to the JSON property `selfManaged`
        # @return [Google::Apis::ComputeV1::SslCertificateSelfManagedSslCertificate]
        attr_accessor :self_managed
      
        # Output only. [Output Only] Domains associated with the certificate via Subject
        # Alternative Name.
        # Corresponds to the JSON property `subjectAlternativeNames`
        # @return [Array<String>]
        attr_accessor :subject_alternative_names
      
        # (Optional) Specifies the type of SSL certificate, either "SELF_MANAGED" or
        # "MANAGED". If not specified, the certificate is self-managed and the
        # fieldscertificate and private_key are used.
        # 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)
          @certificate = args[:certificate] if args.key?(:certificate)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @expire_time = args[:expire_time] if args.key?(:expire_time)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @managed = args[:managed] if args.key?(:managed)
          @name = args[:name] if args.key?(:name)
          @private_key = args[:private_key] if args.key?(:private_key)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_managed = args[:self_managed] if args.key?(:self_managed)
          @subject_alternative_names = args[:subject_alternative_names] if args.key?(:subject_alternative_names)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # 
      class SslCertificateAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of SslCertificatesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::SslCertificatesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # sslCertificateAggregatedList for lists of SSL
        # Certificates.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SslCertificateAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SslCertificateAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of SslCertificate resources.
      class SslCertificateList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of SslCertificate resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::SslCertificate>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SslCertificateList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SslCertificateList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Configuration and status of a managed SSL certificate.
      class SslCertificateManagedSslCertificate
        include Google::Apis::Core::Hashable
      
        # Output only. [Output only] Detailed statuses of the domains specified for
        # managed
        # certificate resource.
        # Corresponds to the JSON property `domainStatus`
        # @return [Hash<String,String>]
        attr_accessor :domain_status
      
        # The domains for which a managed SSL certificate will be generated. Each
        # Google-managed SSL certificate supports up to the [maximum number of
        # domains per Google-managed SSL
        # certificate](/load-balancing/docs/quotas#ssl_certificates).
        # Corresponds to the JSON property `domains`
        # @return [Array<String>]
        attr_accessor :domains
      
        # Output only. [Output only] Status of the managed certificate resource.
        # 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)
          @domain_status = args[:domain_status] if args.key?(:domain_status)
          @domains = args[:domains] if args.key?(:domains)
          @status = args[:status] if args.key?(:status)
        end
      end
      
      # Configuration and status of a self-managed SSL certificate.
      class SslCertificateSelfManagedSslCertificate
        include Google::Apis::Core::Hashable
      
        # A local certificate file. The certificate must be in
        # PEM format. The certificate chain must be no greater than 5 certs
        # long. The chain must include at least one intermediate cert.
        # Corresponds to the JSON property `certificate`
        # @return [String]
        attr_accessor :certificate
      
        # A write-only private key in PEM format. Only insert
        # requests will include this field.
        # Corresponds to the JSON property `privateKey`
        # @return [String]
        attr_accessor :private_key
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @certificate = args[:certificate] if args.key?(:certificate)
          @private_key = args[:private_key] if args.key?(:private_key)
        end
      end
      
      # 
      class SslCertificatesScopedList
        include Google::Apis::Core::Hashable
      
        # List of SslCertificates contained in this scope.
        # Corresponds to the JSON property `sslCertificates`
        # @return [Array<Google::Apis::ComputeV1::SslCertificate>]
        attr_accessor :ssl_certificates
      
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SslCertificatesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ssl_certificates = args[:ssl_certificates] if args.key?(:ssl_certificates)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SslCertificatesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class SslPoliciesAggregatedList
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of SslPoliciesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::SslPoliciesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # sslPolicyAggregatedList for lists of SSL Policies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SslPoliciesAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SslPoliciesAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class SslPoliciesList
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Unique identifier for the resource; defined by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # Output only. A list of SslPolicy resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::SslPolicy>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#sslPoliciesList
        # for lists of sslPolicies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SslPoliciesList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SslPoliciesList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class SslPoliciesListAvailableFeaturesResponse
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `features`
        # @return [Array<String>]
        attr_accessor :features
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @features = args[:features] if args.key?(:features)
        end
      end
      
      # 
      class SslPoliciesScopedList
        include Google::Apis::Core::Hashable
      
        # A list of SslPolicies contained in this scope.
        # Corresponds to the JSON property `sslPolicies`
        # @return [Array<Google::Apis::ComputeV1::SslPolicy>]
        attr_accessor :ssl_policies
      
        # Informational warning which replaces the list of
        # SSL policies when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SslPoliciesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ssl_policies = args[:ssl_policies] if args.key?(:ssl_policies)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of
        # SSL policies when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SslPoliciesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents an SSL Policy resource.
      # Use SSL policies to control SSL features, such as versions and cipher
      # suites, that are offered by Application Load Balancers and proxy Network Load
      # Balancers. For more information, read
      # SSL policies overview.
      class SslPolicy
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # A list of features enabled when the selected profile is CUSTOM. The
        # method returns the set of features that can be
        # specified in this list. This field must be empty if the profile is notCUSTOM.
        # Corresponds to the JSON property `customFeatures`
        # @return [Array<String>]
        attr_accessor :custom_features
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Output only. [Output Only] The list of features enabled in the SSL policy.
        # Corresponds to the JSON property `enabledFeatures`
        # @return [Array<String>]
        attr_accessor :enabled_features
      
        # Fingerprint of this resource. A hash of the contents stored in this object.
        # This field is used in optimistic locking. This field will be ignored when
        # inserting a SslPolicy. An up-to-date fingerprint must be
        # provided in order to update the SslPolicy, otherwise the
        # request will fail with error 412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve an SslPolicy.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output only] Type of the resource. Alwayscompute#sslPolicyfor
        # SSL policies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The minimum version of SSL protocol that can be used by the clients to
        # establish a connection with the load balancer. This can be one ofTLS_1_0,
        # TLS_1_1, TLS_1_2,TLS_1_3. When set to TLS_1_3, the profile field
        # must be set to RESTRICTED.
        # Corresponds to the JSON property `minTlsVersion`
        # @return [String]
        attr_accessor :min_tls_version
      
        # Name of the resource. The name must be 1-63 characters long, and comply
        # with RFC1035. Specifically, the name must be 1-63 characters
        # long and match the regular expression
        # `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character
        # must be a lowercase letter, and all following characters must be a dash,
        # lowercase letter, or digit, except the last character, which cannot be a
        # dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Profile specifies the set of SSL features that can be used by the load
        # balancer when negotiating SSL with clients. This can be one ofCOMPATIBLE,
        # MODERN, RESTRICTED, orCUSTOM. If using CUSTOM, the set of SSL features
        # to enable must be specified in the customFeatures field.
        # Corresponds to the JSON property `profile`
        # @return [String]
        attr_accessor :profile
      
        # Output only. [Output Only] URL of the region where the regional SSL policy
        # resides. This field is not applicable to global SSL policies.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] If potential misconfigurations are detected for
        # this
        # SSL policy, this field will be populated with warning messages.
        # Corresponds to the JSON property `warnings`
        # @return [Array<Google::Apis::ComputeV1::SslPolicy::Warning>]
        attr_accessor :warnings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @custom_features = args[:custom_features] if args.key?(:custom_features)
          @description = args[:description] if args.key?(:description)
          @enabled_features = args[:enabled_features] if args.key?(:enabled_features)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @min_tls_version = args[:min_tls_version] if args.key?(:min_tls_version)
          @name = args[:name] if args.key?(:name)
          @profile = args[:profile] if args.key?(:profile)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warnings = args[:warnings] if args.key?(:warnings)
        end
        
        # 
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SslPolicy::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class SslPolicyReference
        include Google::Apis::Core::Hashable
      
        # URL of the SSL policy resource. Set this to empty string to clear any
        # existing SSL policy associated with the target proxy resource.
        # 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)
          @ssl_policy = args[:ssl_policy] if args.key?(:ssl_policy)
        end
      end
      
      # 
      class StatefulPolicy
        include Google::Apis::Core::Hashable
      
        # Configuration of preserved resources.
        # Corresponds to the JSON property `preservedState`
        # @return [Google::Apis::ComputeV1::StatefulPolicyPreservedState]
        attr_accessor :preserved_state
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @preserved_state = args[:preserved_state] if args.key?(:preserved_state)
        end
      end
      
      # Configuration of preserved resources.
      class StatefulPolicyPreservedState
        include Google::Apis::Core::Hashable
      
        # Disks created on the instances that will be preserved on instance
        # delete, update, etc. This map is keyed with the device names of
        # the disks.
        # Corresponds to the JSON property `disks`
        # @return [Hash<String,Google::Apis::ComputeV1::StatefulPolicyPreservedStateDiskDevice>]
        attr_accessor :disks
      
        # External network IPs assigned to the instances that will be preserved on
        # instance delete, update, etc. This map is keyed with the network
        # interface name.
        # Corresponds to the JSON property `externalIPs`
        # @return [Hash<String,Google::Apis::ComputeV1::StatefulPolicyPreservedStateNetworkIp>]
        attr_accessor :external_i_ps
      
        # Internal network IPs assigned to the instances that will be preserved on
        # instance delete, update, etc. This map is keyed with the network
        # interface name.
        # Corresponds to the JSON property `internalIPs`
        # @return [Hash<String,Google::Apis::ComputeV1::StatefulPolicyPreservedStateNetworkIp>]
        attr_accessor :internal_i_ps
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disks = args[:disks] if args.key?(:disks)
          @external_i_ps = args[:external_i_ps] if args.key?(:external_i_ps)
          @internal_i_ps = args[:internal_i_ps] if args.key?(:internal_i_ps)
        end
      end
      
      # 
      class StatefulPolicyPreservedStateDiskDevice
        include Google::Apis::Core::Hashable
      
        # These stateful disks will never be deleted during autohealing,
        # update or VM instance recreate operations.
        # This flag is used to configure if the disk should be deleted after it
        # is no longer used by the group, e.g. when the given instance or
        # the whole group is deleted. Note: disks attached inREAD_ONLY mode cannot be
        # auto-deleted.
        # Corresponds to the JSON property `autoDelete`
        # @return [String]
        attr_accessor :auto_delete
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auto_delete = args[:auto_delete] if args.key?(:auto_delete)
        end
      end
      
      # 
      class StatefulPolicyPreservedStateNetworkIp
        include Google::Apis::Core::Hashable
      
        # These stateful IPs will never be released during autohealing,
        # update or VM instance recreate operations.
        # This flag is used to configure if the IP reservation should be deleted
        # after it is no longer used by the group, e.g. when the given instance
        # or the whole group is deleted.
        # Corresponds to the JSON property `autoDelete`
        # @return [String]
        attr_accessor :auto_delete
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @auto_delete = args[:auto_delete] if args.key?(:auto_delete)
        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
      
      # Represents a zonal storage pool resource.
      class StoragePool
        include Google::Apis::Core::Hashable
      
        # Provisioning type of the byte capacity of the pool.
        # Corresponds to the JSON property `capacityProvisioningType`
        # @return [String]
        attr_accessor :capacity_provisioning_type
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Exapool provisioned capacities for each SKU type
        # Corresponds to the JSON property `exapoolProvisionedCapacityGb`
        # @return [Google::Apis::ComputeV1::StoragePoolExapoolProvisionedCapacityGb]
        attr_accessor :exapool_provisioned_capacity_gb
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Always compute#storagePool
        # for storage pools.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this storage pool, which is
        # essentially a hash of the labels set used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a storage pool.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels to apply to this storage pool. These can be later modified by
        # the setLabels method.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?`
        # which means the first character must be a lowercase letter, and all
        # following characters must be a dash, lowercase letter, or digit, except
        # the last character, which cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Additional storage pool params.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::StoragePoolParams]
        attr_accessor :params
      
        # Provisioning type of the performance-related parameters of the pool,
        # such as throughput and IOPS.
        # Corresponds to the JSON property `performanceProvisioningType`
        # @return [String]
        attr_accessor :performance_provisioning_type
      
        # Size of the storage pool in GiB. For more information about the size
        # limits, see https://cloud.google.com/compute/docs/disks/storage-pools.
        # Corresponds to the JSON property `poolProvisionedCapacityGb`
        # @return [Fixnum]
        attr_accessor :pool_provisioned_capacity_gb
      
        # Provisioned IOPS of the storage pool. Only relevant if the storage pool
        # type is hyperdisk-balanced.
        # Corresponds to the JSON property `poolProvisionedIops`
        # @return [Fixnum]
        attr_accessor :pool_provisioned_iops
      
        # Provisioned throughput of the storage pool in MiB/s. Only relevant if the
        # storage pool type is hyperdisk-balanced or hyperdisk-throughput.
        # Corresponds to the JSON property `poolProvisionedThroughput`
        # @return [Fixnum]
        attr_accessor :pool_provisioned_throughput
      
        # [Output Only] Contains output only fields.
        # Corresponds to the JSON property `resourceStatus`
        # @return [Google::Apis::ComputeV1::StoragePoolResourceStatus]
        attr_accessor :resource_status
      
        # Output only. [Output Only] Server-defined fully-qualified URL for this
        # resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource's resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # Output only. [Output Only] The status of storage pool creation.
        # 
        # 
        # - CREATING: Storage pool is provisioning.
        # storagePool.
        # - FAILED: Storage pool creation failed.
        # - READY: Storage pool is ready for use.
        # - DELETING: Storage pool is deleting.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # [Output Only] Contains output only fields.
        # Corresponds to the JSON property `status`
        # @return [Google::Apis::ComputeV1::StoragePoolResourceStatus]
        attr_accessor :status
      
        # Type of the storage pool.
        # Corresponds to the JSON property `storagePoolType`
        # @return [String]
        attr_accessor :storage_pool_type
      
        # Output only. [Output Only] URL of the zone where the storage pool resides.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @capacity_provisioning_type = args[:capacity_provisioning_type] if args.key?(:capacity_provisioning_type)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @exapool_provisioned_capacity_gb = args[:exapool_provisioned_capacity_gb] if args.key?(:exapool_provisioned_capacity_gb)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @name = args[:name] if args.key?(:name)
          @params = args[:params] if args.key?(:params)
          @performance_provisioning_type = args[:performance_provisioning_type] if args.key?(:performance_provisioning_type)
          @pool_provisioned_capacity_gb = args[:pool_provisioned_capacity_gb] if args.key?(:pool_provisioned_capacity_gb)
          @pool_provisioned_iops = args[:pool_provisioned_iops] if args.key?(:pool_provisioned_iops)
          @pool_provisioned_throughput = args[:pool_provisioned_throughput] if args.key?(:pool_provisioned_throughput)
          @resource_status = args[:resource_status] if args.key?(:resource_status)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @state = args[:state] if args.key?(:state)
          @status = args[:status] if args.key?(:status)
          @storage_pool_type = args[:storage_pool_type] if args.key?(:storage_pool_type)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class StoragePoolAggregatedList
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of StoragePoolsScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::StoragePoolsScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # storagePoolAggregatedList for aggregated lists of
        # storage pools.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::StoragePoolAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::StoragePoolAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class StoragePoolDisk
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Instances this disk is attached to.
        # Corresponds to the JSON property `attachedInstances`
        # @return [Array<String>]
        attr_accessor :attached_instances
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Output only. [Output Only] The URL of the disk.
        # Corresponds to the JSON property `disk`
        # @return [String]
        attr_accessor :disk
      
        # Output only. [Output Only] The name of the disk.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] The number of IOPS provisioned for the disk.
        # Corresponds to the JSON property `provisionedIops`
        # @return [Fixnum]
        attr_accessor :provisioned_iops
      
        # Output only. [Output Only] The throughput provisioned for the disk.
        # Corresponds to the JSON property `provisionedThroughput`
        # @return [Fixnum]
        attr_accessor :provisioned_throughput
      
        # Output only. [Output Only] Resource policies applied to disk for automatic
        # snapshot
        # creations.
        # Corresponds to the JSON property `resourcePolicies`
        # @return [Array<String>]
        attr_accessor :resource_policies
      
        # Output only. [Output Only] The disk size, in GB.
        # Corresponds to the JSON property `sizeGb`
        # @return [Fixnum]
        attr_accessor :size_gb
      
        # Output only. [Output Only] The disk status.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Output only. [Output Only] The disk type.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # Output only. [Output Only] Amount of disk space used.
        # Corresponds to the JSON property `usedBytes`
        # @return [Fixnum]
        attr_accessor :used_bytes
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @attached_instances = args[:attached_instances] if args.key?(:attached_instances)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @disk = args[:disk] if args.key?(:disk)
          @name = args[:name] if args.key?(:name)
          @provisioned_iops = args[:provisioned_iops] if args.key?(:provisioned_iops)
          @provisioned_throughput = args[:provisioned_throughput] if args.key?(:provisioned_throughput)
          @resource_policies = args[:resource_policies] if args.key?(:resource_policies)
          @size_gb = args[:size_gb] if args.key?(:size_gb)
          @status = args[:status] if args.key?(:status)
          @type = args[:type] if args.key?(:type)
          @used_bytes = args[:used_bytes] if args.key?(:used_bytes)
        end
      end
      
      # Exapool provisioned capacities for each SKU type
      class StoragePoolExapoolProvisionedCapacityGb
        include Google::Apis::Core::Hashable
      
        # Size, in GiB, of provisioned capacity-optimized capacity for this Exapool
        # Corresponds to the JSON property `capacityOptimized`
        # @return [Fixnum]
        attr_accessor :capacity_optimized
      
        # Size, in GiB, of provisioned read-optimized capacity for this Exapool
        # Corresponds to the JSON property `readOptimized`
        # @return [Fixnum]
        attr_accessor :read_optimized
      
        # Size, in GiB, of provisioned write-optimized capacity for this Exapool
        # Corresponds to the JSON property `writeOptimized`
        # @return [Fixnum]
        attr_accessor :write_optimized
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @capacity_optimized = args[:capacity_optimized] if args.key?(:capacity_optimized)
          @read_optimized = args[:read_optimized] if args.key?(:read_optimized)
          @write_optimized = args[:write_optimized] if args.key?(:write_optimized)
        end
      end
      
      # A list of StoragePool resources.
      class StoragePoolList
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of StoragePool resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::StoragePool>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#storagePoolList
        # for lists of storagePools.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # end_interface: MixerListResponseWithEtagBuilder
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::StoragePoolList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::StoragePoolList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class StoragePoolListDisks
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # Output only. [Output Only] Unique identifier for the resource; defined by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of StoragePoolDisk resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::StoragePoolDisk>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # storagePoolListDisks for lists of disks in a
        # storagePool.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Output only. [Output Only] This token allows you to get the next page of
        # results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # end_interface: MixerListResponseWithEtagBuilder
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # Output only. [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::StoragePoolListDisks::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Output only. [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::StoragePoolListDisks::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Additional storage pool params.
      class StoragePoolParams
        include Google::Apis::Core::Hashable
      
        # Input only. Resource manager tags to be bound to the storage pool. Tag keys
        # and values
        # have the same definition as resource
        # manager tags. Keys and values can be either in numeric format,
        # such as `tagKeys/`tag_key_id`` and `tagValues/456` or in namespaced
        # format such as ``org_id|project_id`/`tag_key_short_name`` and
        # ``tag_value_short_name``. The field is ignored (both PUT &
        # PATCH) when empty.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # [Output Only] Contains output only fields.
      class StoragePoolResourceStatus
        include Google::Apis::Core::Hashable
      
        # [Output Only] Number of disks used.
        # Corresponds to the JSON property `diskCount`
        # @return [Fixnum]
        attr_accessor :disk_count
      
        # Output only. [Output Only] Maximum allowed read IOPS for this Exapool.
        # Corresponds to the JSON property `exapoolMaxReadIops`
        # @return [Fixnum]
        attr_accessor :exapool_max_read_iops
      
        # Output only. [Output Only] Maximum allowed read throughput in MiB/s for
        # this Exapool.
        # Corresponds to the JSON property `exapoolMaxReadThroughput`
        # @return [Fixnum]
        attr_accessor :exapool_max_read_throughput
      
        # Output only. [Output Only] Maximum allowed write IOPS for this Exapool.
        # Corresponds to the JSON property `exapoolMaxWriteIops`
        # @return [Fixnum]
        attr_accessor :exapool_max_write_iops
      
        # Output only. [Output Only] Maximum allowed write throughput in MiB/s
        # for this Exapool.
        # Corresponds to the JSON property `exapoolMaxWriteThroughput`
        # @return [Fixnum]
        attr_accessor :exapool_max_write_throughput
      
        # Output only. [Output Only] Timestamp of the last successful resize inRFC3339
        # text format.
        # Corresponds to the JSON property `lastResizeTimestamp`
        # @return [String]
        attr_accessor :last_resize_timestamp
      
        # [Output Only] Maximum allowed aggregate disk size in GiB.
        # Corresponds to the JSON property `maxTotalProvisionedDiskCapacityGb`
        # @return [Fixnum]
        attr_accessor :max_total_provisioned_disk_capacity_gb
      
        # [Output Only] Space used by data stored in disks within the storage pool
        # (in bytes). This will reflect the total number of bytes written to the
        # disks in the pool, in contrast to the capacity of those disks.
        # Corresponds to the JSON property `poolUsedCapacityBytes`
        # @return [Fixnum]
        attr_accessor :pool_used_capacity_bytes
      
        # [Output Only] Sum of all the disks' provisioned IOPS, minus some amount
        # that is allowed per disk that is not counted towards pool's IOPS
        # capacity. For more information, see
        # https://cloud.google.com/compute/docs/disks/storage-pools.
        # Corresponds to the JSON property `poolUsedIops`
        # @return [Fixnum]
        attr_accessor :pool_used_iops
      
        # [Output Only] Sum of all the disks' provisioned throughput in MiB/s.
        # Corresponds to the JSON property `poolUsedThroughput`
        # @return [Fixnum]
        attr_accessor :pool_used_throughput
      
        # [Output Only] Amount of data written into the pool, before it is
        # compacted.
        # Corresponds to the JSON property `poolUserWrittenBytes`
        # @return [Fixnum]
        attr_accessor :pool_user_written_bytes
      
        # [Output Only] Sum of all the disks' provisioned capacity (in GiB) in
        # this storage pool. A disk's provisioned capacity is the same as its total
        # capacity.
        # Corresponds to the JSON property `totalProvisionedDiskCapacityGb`
        # @return [Fixnum]
        attr_accessor :total_provisioned_disk_capacity_gb
      
        # [Output Only] Sum of all the disks' provisioned IOPS.
        # Corresponds to the JSON property `totalProvisionedDiskIops`
        # @return [Fixnum]
        attr_accessor :total_provisioned_disk_iops
      
        # [Output Only] Sum of all the disks' provisioned throughput in MiB/s,
        # minus some amount that is allowed per disk that is not counted towards
        # pool's throughput capacity.
        # Corresponds to the JSON property `totalProvisionedDiskThroughput`
        # @return [Fixnum]
        attr_accessor :total_provisioned_disk_throughput
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @disk_count = args[:disk_count] if args.key?(:disk_count)
          @exapool_max_read_iops = args[:exapool_max_read_iops] if args.key?(:exapool_max_read_iops)
          @exapool_max_read_throughput = args[:exapool_max_read_throughput] if args.key?(:exapool_max_read_throughput)
          @exapool_max_write_iops = args[:exapool_max_write_iops] if args.key?(:exapool_max_write_iops)
          @exapool_max_write_throughput = args[:exapool_max_write_throughput] if args.key?(:exapool_max_write_throughput)
          @last_resize_timestamp = args[:last_resize_timestamp] if args.key?(:last_resize_timestamp)
          @max_total_provisioned_disk_capacity_gb = args[:max_total_provisioned_disk_capacity_gb] if args.key?(:max_total_provisioned_disk_capacity_gb)
          @pool_used_capacity_bytes = args[:pool_used_capacity_bytes] if args.key?(:pool_used_capacity_bytes)
          @pool_used_iops = args[:pool_used_iops] if args.key?(:pool_used_iops)
          @pool_used_throughput = args[:pool_used_throughput] if args.key?(:pool_used_throughput)
          @pool_user_written_bytes = args[:pool_user_written_bytes] if args.key?(:pool_user_written_bytes)
          @total_provisioned_disk_capacity_gb = args[:total_provisioned_disk_capacity_gb] if args.key?(:total_provisioned_disk_capacity_gb)
          @total_provisioned_disk_iops = args[:total_provisioned_disk_iops] if args.key?(:total_provisioned_disk_iops)
          @total_provisioned_disk_throughput = args[:total_provisioned_disk_throughput] if args.key?(:total_provisioned_disk_throughput)
        end
      end
      
      # 
      class StoragePoolType
        include Google::Apis::Core::Hashable
      
        # [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Deprecation status for a public resource.
        # Corresponds to the JSON property `deprecated`
        # @return [Google::Apis::ComputeV1::DeprecationStatus]
        attr_accessor :deprecated
      
        # [Output Only] An optional description of this resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#storagePoolType
        # for storage pool types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] Maximum storage pool size in GB.
        # Corresponds to the JSON property `maxPoolProvisionedCapacityGb`
        # @return [Fixnum]
        attr_accessor :max_pool_provisioned_capacity_gb
      
        # [Output Only] Maximum provisioned IOPS.
        # Corresponds to the JSON property `maxPoolProvisionedIops`
        # @return [Fixnum]
        attr_accessor :max_pool_provisioned_iops
      
        # [Output Only] Maximum provisioned throughput.
        # Corresponds to the JSON property `maxPoolProvisionedThroughput`
        # @return [Fixnum]
        attr_accessor :max_pool_provisioned_throughput
      
        # [Output Only] Minimum storage pool size in GB.
        # Corresponds to the JSON property `minPoolProvisionedCapacityGb`
        # @return [Fixnum]
        attr_accessor :min_pool_provisioned_capacity_gb
      
        # [Output Only] Minimum provisioned IOPS.
        # Corresponds to the JSON property `minPoolProvisionedIops`
        # @return [Fixnum]
        attr_accessor :min_pool_provisioned_iops
      
        # [Output Only] Minimum provisioned throughput.
        # Corresponds to the JSON property `minPoolProvisionedThroughput`
        # @return [Fixnum]
        attr_accessor :min_pool_provisioned_throughput
      
        # [Deprecated] This field is deprecated. Use minPoolProvisionedCapacityGb
        # instead.
        # Corresponds to the JSON property `minSizeGb`
        # @return [Fixnum]
        attr_accessor :min_size_gb
      
        # [Output Only] Name of the resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL for this resource with the
        # resource id.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # [Output Only] The list of disk types supported in this storage pool type.
        # Corresponds to the JSON property `supportedDiskTypes`
        # @return [Array<String>]
        attr_accessor :supported_disk_types
      
        # [Output Only] URL of the zone where the storage pool type resides.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @deprecated = args[:deprecated] if args.key?(:deprecated)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @max_pool_provisioned_capacity_gb = args[:max_pool_provisioned_capacity_gb] if args.key?(:max_pool_provisioned_capacity_gb)
          @max_pool_provisioned_iops = args[:max_pool_provisioned_iops] if args.key?(:max_pool_provisioned_iops)
          @max_pool_provisioned_throughput = args[:max_pool_provisioned_throughput] if args.key?(:max_pool_provisioned_throughput)
          @min_pool_provisioned_capacity_gb = args[:min_pool_provisioned_capacity_gb] if args.key?(:min_pool_provisioned_capacity_gb)
          @min_pool_provisioned_iops = args[:min_pool_provisioned_iops] if args.key?(:min_pool_provisioned_iops)
          @min_pool_provisioned_throughput = args[:min_pool_provisioned_throughput] if args.key?(:min_pool_provisioned_throughput)
          @min_size_gb = args[:min_size_gb] if args.key?(:min_size_gb)
          @name = args[:name] if args.key?(:name)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @supported_disk_types = args[:supported_disk_types] if args.key?(:supported_disk_types)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class StoragePoolTypeAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of StoragePoolTypesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::StoragePoolTypesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # storagePoolTypeAggregatedList.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::StoragePoolTypeAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::StoragePoolTypeAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of storage pool types.
      class StoragePoolTypeList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of StoragePoolType resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::StoragePoolType>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#storagePoolTypeList
        # for storage pool types.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::StoragePoolTypeList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::StoragePoolTypeList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class StoragePoolTypesScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of storage pool types contained in this scope.
        # Corresponds to the JSON property `storagePoolTypes`
        # @return [Array<Google::Apis::ComputeV1::StoragePoolType>]
        attr_accessor :storage_pool_types
      
        # [Output Only] Informational warning which replaces the list of storage pool
        # types when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::StoragePoolTypesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @storage_pool_types = args[:storage_pool_types] if args.key?(:storage_pool_types)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning which replaces the list of storage pool
        # types when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::StoragePoolTypesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class StoragePoolsScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of storage pool contained in this scope.
        # Corresponds to the JSON property `storagePools`
        # @return [Array<Google::Apis::ComputeV1::StoragePool>]
        attr_accessor :storage_pools
      
        # [Output Only] Informational warning which replaces the list of storage pool
        # when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::StoragePoolsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @storage_pools = args[:storage_pools] if args.key?(:storage_pools)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning which replaces the list of storage pool
        # when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::StoragePoolsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a Subnetwork resource.
      # A subnetwork (also known as a subnet) is a logical partition of a Virtual
      # Private Cloud network with one primary IP range and zero or more secondary
      # IP ranges. For more information, read
      # Virtual Private Cloud (VPC) Network.
      class Subnetwork
        include Google::Apis::Core::Hashable
      
        # Whether this subnetwork's ranges can conflict with existing custom routes.
        # Setting this to true allows this subnetwork's primary and secondary ranges
        # to overlap with (and contain) custom routes that have already been
        # configured on the corresponding network.
        # For example if a static route has range 10.1.0.0/16, a subnet
        # range 10.0.0.0/8 could only be created if allow_conflicting_routes=true.
        # Overlapping is only allowed on subnetwork operations; routes
        # whose ranges conflict with this subnetwork's ranges won't be allowed unless
        # route.allow_conflicting_subnetworks is set to true.
        # Typically packets destined to IPs within the subnetwork (which may contain
        # private/sensitive data) are prevented from leaving the virtual network.
        # Setting this field to true will disable this feature.
        # The default value is false and applies to all existing subnetworks and
        # automatically created subnetworks.
        # Corresponds to the JSON property `allowSubnetCidrRoutesOverlap`
        # @return [Boolean]
        attr_accessor :allow_subnet_cidr_routes_overlap
        alias_method :allow_subnet_cidr_routes_overlap?, :allow_subnet_cidr_routes_overlap
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource. This field can be set only at resource creation time.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Whether to enable flow logging for this subnetwork. If this field is not
        # explicitly set, it will not appear in get listings. If not set
        # the default behavior is determined by the org policy, if there is no org
        # policy specified, then it will default to disabled. This field isn't
        # supported if the subnet purpose field is set toREGIONAL_MANAGED_PROXY. It is
        # recommended to uselogConfig.enable field instead.
        # Corresponds to the JSON property `enableFlowLogs`
        # @return [Boolean]
        attr_accessor :enable_flow_logs
        alias_method :enable_flow_logs?, :enable_flow_logs
      
        # The external IPv6 address range that is owned by this
        # subnetwork.
        # Corresponds to the JSON property `externalIpv6Prefix`
        # @return [String]
        attr_accessor :external_ipv6_prefix
      
        # Fingerprint of this resource. A hash of the contents stored in this object.
        # This field is used in optimistic locking. This field will be ignored when
        # inserting a Subnetwork. An up-to-date fingerprint must be
        # provided in order to update the Subnetwork, otherwise the
        # request will fail with error 412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a Subnetwork.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Output only. [Output Only] The gateway address for default routes to reach
        # destination
        # addresses outside this subnetwork.
        # Corresponds to the JSON property `gatewayAddress`
        # @return [String]
        attr_accessor :gateway_address
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # The internal IPv6 address range that is owned by this
        # subnetwork.
        # Corresponds to the JSON property `internalIpv6Prefix`
        # @return [String]
        attr_accessor :internal_ipv6_prefix
      
        # The range of internal addresses that are owned by this subnetwork.
        # Provide this property when you create the subnetwork. For example,10.0.0.0/8
        # or 100.64.0.0/10. Ranges must
        # be unique and non-overlapping within a network. Only IPv4 is supported.
        # This field is set at resource creation time. The range can be any range
        # listed in theValid
        # ranges list. The range can be expanded after creation usingexpandIpCidrRange.
        # Corresponds to the JSON property `ipCidrRange`
        # @return [String]
        attr_accessor :ip_cidr_range
      
        # Reference to the source of IP, like a PublicDelegatedPrefix
        # (PDP) for BYOIP. The PDP must be a sub-PDP in
        # EXTERNAL_IPV6_SUBNETWORK_CREATION or INTERNAL_IPV6_SUBNETWORK_CREATION
        # mode.
        # Use one of the following formats to specify a sub-PDP when creating a dual
        # stack or IPv6-only subnetwork with external access using BYOIP:
        # 
        # -
        # Full resource URL, as inhttps://www.googleapis.com/compute/v1/projects/
        # projectId/regions/region/publicDelegatedPrefixes/sub-pdp-name
        # -
        # Partial URL, as in
        # 
        # 
        # - projects/projectId/regions/region/publicDelegatedPrefixes/sub-pdp-
        # name
        # - regions/region/publicDelegatedPrefixes/sub-pdp-name
        # Corresponds to the JSON property `ipCollection`
        # @return [String]
        attr_accessor :ip_collection
      
        # The access type of IPv6 address this subnet holds. It's immutable and can
        # only be specified during creation or the first time the subnet is updated
        # into IPV4_IPV6 dual stack.
        # Corresponds to the JSON property `ipv6AccessType`
        # @return [String]
        attr_accessor :ipv6_access_type
      
        # Output only. [Output Only] This field is for internal use.
        # Corresponds to the JSON property `ipv6CidrRange`
        # @return [String]
        attr_accessor :ipv6_cidr_range
      
        # Output only. [Output Only] Possible endpoints of this subnetwork. It can be
        # one of the
        # following:
        # 
        # - VM_ONLY: The subnetwork can be used for creating instances and
        # IPv6 addresses with VM endpoint type. Such a subnetwork gets external IPv6
        # ranges from a public delegated prefix and cannot be used to create NetLb.
        # - VM_AND_FR: The subnetwork can be used for creating both VM
        # instances and Forwarding Rules. It can also be used to reserve IPv6
        # addresses with both VM and FR endpoint types. Such a subnetwork gets its
        # IPv6 range from Google IP Pool directly.
        # Corresponds to the JSON property `ipv6GceEndpoint`
        # @return [String]
        attr_accessor :ipv6_gce_endpoint
      
        # Output only. [Output Only] Type of the resource. Always compute#subnetwork
        # for Subnetwork resources.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # The available logging options for this subnetwork.
        # Corresponds to the JSON property `logConfig`
        # @return [Google::Apis::ComputeV1::SubnetworkLogConfig]
        attr_accessor :log_config
      
        # The name of the resource, provided by the client when initially creating
        # the resource. The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The URL of the network to which this subnetwork belongs, provided by the
        # client when initially creating the subnetwork. This field can be set only
        # at resource creation time.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # Additional subnetwork parameters.
        # Corresponds to the JSON property `params`
        # @return [Google::Apis::ComputeV1::SubnetworkParams]
        attr_accessor :params
      
        # Whether the VMs in this subnet can access Google services without assigned
        # external IP addresses. This field can be both set at resource creation
        # time and updated using setPrivateIpGoogleAccess.
        # Corresponds to the JSON property `privateIpGoogleAccess`
        # @return [Boolean]
        attr_accessor :private_ip_google_access
        alias_method :private_ip_google_access?, :private_ip_google_access
      
        # This field is for internal use.
        # This field can be both set at resource creation time and updated usingpatch.
        # Corresponds to the JSON property `privateIpv6GoogleAccess`
        # @return [String]
        attr_accessor :private_ipv6_google_access
      
        # 
        # Corresponds to the JSON property `purpose`
        # @return [String]
        attr_accessor :purpose
      
        # URL of the region where the Subnetwork resides. This
        # field can be set only at resource creation time.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # The URL of the reserved internal range.
        # Corresponds to the JSON property `reservedInternalRange`
        # @return [String]
        attr_accessor :reserved_internal_range
      
        # Configures subnet mask resolution for this subnetwork.
        # Corresponds to the JSON property `resolveSubnetMask`
        # @return [String]
        attr_accessor :resolve_subnet_mask
      
        # The role of subnetwork. Currently, this field is only used when
        # purpose is set to GLOBAL_MANAGED_PROXY orREGIONAL_MANAGED_PROXY. The value can
        # be set toACTIVE or BACKUP. An ACTIVE
        # subnetwork is one that is currently being used for Envoy-based load
        # balancers in a region. A BACKUP subnetwork is one that is
        # ready to be promoted to ACTIVE or is currently draining.
        # This field can be updated with a patch request.
        # Corresponds to the JSON property `role`
        # @return [String]
        attr_accessor :role
      
        # An array of configurations for secondary IP ranges for VM instances
        # contained in this subnetwork. The primary IP of such VM must belong to the
        # primary ipCidrRange of the subnetwork. The alias IPs may belong to either
        # primary or secondary ranges. This field can be updated with apatch request.
        # Supports both IPv4 and IPv6 ranges.
        # Corresponds to the JSON property `secondaryIpRanges`
        # @return [Array<Google::Apis::ComputeV1::SubnetworkSecondaryRange>]
        attr_accessor :secondary_ip_ranges
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # The stack type for the subnet. If set to IPV4_ONLY, new VMs
        # in the subnet are assigned IPv4 addresses only. If set toIPV4_IPV6, new VMs in
        # the subnet can be assigned both IPv4 and
        # IPv6 addresses. If not specified, IPV4_ONLY is used.
        # This field can be both set at resource creation time and updated usingpatch.
        # Corresponds to the JSON property `stackType`
        # @return [String]
        attr_accessor :stack_type
      
        # Output only. [Output Only] The state of the subnetwork, which can be one of
        # the
        # following values:READY: Subnetwork is created and ready to useDRAINING: only
        # applicable to subnetworks that have the
        # purpose set to INTERNAL_HTTPS_LOAD_BALANCER and indicates that
        # connections to the load balancer are being drained. A subnetwork that is
        # draining cannot be used or modified until it reaches a status ofREADY
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # Output only. [Output Only] The array of external IPv6 network ranges reserved
        # from
        # the subnetwork's external IPv6 range for system use.
        # Corresponds to the JSON property `systemReservedExternalIpv6Ranges`
        # @return [Array<String>]
        attr_accessor :system_reserved_external_ipv6_ranges
      
        # Output only. [Output Only] The array of internal IPv6 network ranges reserved
        # from
        # the subnetwork's internal IPv6 range for system use.
        # Corresponds to the JSON property `systemReservedInternalIpv6Ranges`
        # @return [Array<String>]
        attr_accessor :system_reserved_internal_ipv6_ranges
      
        # The current IP utilization of all subnetwork ranges. Contains the total
        # number of allocated and free IPs in each range.
        # Corresponds to the JSON property `utilizationDetails`
        # @return [Google::Apis::ComputeV1::SubnetworkUtilizationDetails]
        attr_accessor :utilization_details
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @allow_subnet_cidr_routes_overlap = args[:allow_subnet_cidr_routes_overlap] if args.key?(:allow_subnet_cidr_routes_overlap)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @enable_flow_logs = args[:enable_flow_logs] if args.key?(:enable_flow_logs)
          @external_ipv6_prefix = args[:external_ipv6_prefix] if args.key?(:external_ipv6_prefix)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @gateway_address = args[:gateway_address] if args.key?(:gateway_address)
          @id = args[:id] if args.key?(:id)
          @internal_ipv6_prefix = args[:internal_ipv6_prefix] if args.key?(:internal_ipv6_prefix)
          @ip_cidr_range = args[:ip_cidr_range] if args.key?(:ip_cidr_range)
          @ip_collection = args[:ip_collection] if args.key?(:ip_collection)
          @ipv6_access_type = args[:ipv6_access_type] if args.key?(:ipv6_access_type)
          @ipv6_cidr_range = args[:ipv6_cidr_range] if args.key?(:ipv6_cidr_range)
          @ipv6_gce_endpoint = args[:ipv6_gce_endpoint] if args.key?(:ipv6_gce_endpoint)
          @kind = args[:kind] if args.key?(:kind)
          @log_config = args[:log_config] if args.key?(:log_config)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @params = args[:params] if args.key?(:params)
          @private_ip_google_access = args[:private_ip_google_access] if args.key?(:private_ip_google_access)
          @private_ipv6_google_access = args[:private_ipv6_google_access] if args.key?(:private_ipv6_google_access)
          @purpose = args[:purpose] if args.key?(:purpose)
          @region = args[:region] if args.key?(:region)
          @reserved_internal_range = args[:reserved_internal_range] if args.key?(:reserved_internal_range)
          @resolve_subnet_mask = args[:resolve_subnet_mask] if args.key?(:resolve_subnet_mask)
          @role = args[:role] if args.key?(:role)
          @secondary_ip_ranges = args[:secondary_ip_ranges] if args.key?(:secondary_ip_ranges)
          @self_link = args[:self_link] if args.key?(:self_link)
          @stack_type = args[:stack_type] if args.key?(:stack_type)
          @state = args[:state] if args.key?(:state)
          @system_reserved_external_ipv6_ranges = args[:system_reserved_external_ipv6_ranges] if args.key?(:system_reserved_external_ipv6_ranges)
          @system_reserved_internal_ipv6_ranges = args[:system_reserved_internal_ipv6_ranges] if args.key?(:system_reserved_internal_ipv6_ranges)
          @utilization_details = args[:utilization_details] if args.key?(:utilization_details)
        end
      end
      
      # 
      class SubnetworkAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of SubnetworksScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::SubnetworksScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # subnetworkAggregatedList for aggregated lists of
        # subnetworks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SubnetworkAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SubnetworkAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of Subnetwork resources.
      class SubnetworkList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Subnetwork resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Subnetwork>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#subnetworkList
        # for lists of subnetworks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SubnetworkList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SubnetworkList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # The available logging options for this subnetwork.
      class SubnetworkLogConfig
        include Google::Apis::Core::Hashable
      
        # Can only be specified if VPC flow logging for this subnetwork is enabled.
        # Toggles the aggregation interval for collecting flow logs. Increasing the
        # interval time will reduce the amount of generated flow logs for long
        # lasting connections. Default is an interval of 5 seconds per connection.
        # Corresponds to the JSON property `aggregationInterval`
        # @return [String]
        attr_accessor :aggregation_interval
      
        # Whether to enable flow logging for this subnetwork. If this field is not
        # explicitly set, it will not appear in get listings. If not
        # set the default behavior is determined by the org policy, if there is no
        # org policy specified, then it will default to disabled.
        # Flow logging isn't supported if the subnet purpose field is
        # set to REGIONAL_MANAGED_PROXY.
        # Corresponds to the JSON property `enable`
        # @return [Boolean]
        attr_accessor :enable
        alias_method :enable?, :enable
      
        # Can only be specified if VPC flow logs for this subnetwork is enabled.
        # The filter expression is used to define which VPC flow logs should be
        # exported to Cloud Logging.
        # Corresponds to the JSON property `filterExpr`
        # @return [String]
        attr_accessor :filter_expr
      
        # Can only be specified if VPC flow logging for this subnetwork is enabled.
        # The value of the field must be in [0, 1]. Set the sampling rate of VPC
        # flow logs within the subnetwork where 1.0 means all collected logs are
        # reported and 0.0 means no logs are reported. Default is 0.5 unless
        # otherwise specified by the org policy, which means half of all collected
        # logs are reported.
        # Corresponds to the JSON property `flowSampling`
        # @return [Float]
        attr_accessor :flow_sampling
      
        # Can only be specified if VPC flow logs for this subnetwork is enabled.
        # Configures whether all, none or a subset of metadata fields should be
        # added to the reported VPC flow logs. Default isEXCLUDE_ALL_METADATA.
        # Corresponds to the JSON property `metadata`
        # @return [String]
        attr_accessor :metadata
      
        # Can only be specified if VPC flow logs for this subnetwork is enabled and
        # "metadata" was set to CUSTOM_METADATA.
        # Corresponds to the JSON property `metadataFields`
        # @return [Array<String>]
        attr_accessor :metadata_fields
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @aggregation_interval = args[:aggregation_interval] if args.key?(:aggregation_interval)
          @enable = args[:enable] if args.key?(:enable)
          @filter_expr = args[:filter_expr] if args.key?(:filter_expr)
          @flow_sampling = args[:flow_sampling] if args.key?(:flow_sampling)
          @metadata = args[:metadata] if args.key?(:metadata)
          @metadata_fields = args[:metadata_fields] if args.key?(:metadata_fields)
        end
      end
      
      # Additional subnetwork parameters.
      class SubnetworkParams
        include Google::Apis::Core::Hashable
      
        # Tag keys/values directly bound to this resource.
        # Tag keys and values have the same definition as resource
        # manager tags. The field is allowed for INSERT
        # only. The keys/values to set on the resource should be specified in
        # either ID ` : ` or Namespaced format
        # ` : `.
        # For example the following are valid inputs:
        # * `"tagKeys/333" : "tagValues/444", "tagKeys/123" : "tagValues/456"`
        # * `"123/environment" : "production", "345/abc" : "xyz"`
        # Note:
        # * Invalid combinations of ID & namespaced format is not supported. For
        # instance: `"123/environment" : "tagValues/444"` is invalid.
        # Corresponds to the JSON property `resourceManagerTags`
        # @return [Hash<String,String>]
        attr_accessor :resource_manager_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @resource_manager_tags = args[:resource_manager_tags] if args.key?(:resource_manager_tags)
        end
      end
      
      # Represents a secondary IP range of a subnetwork.
      class SubnetworkSecondaryRange
        include Google::Apis::Core::Hashable
      
        # The range of IP addresses belonging to this subnetwork secondary range.
        # Provide this property when you create the subnetwork. Ranges must be
        # unique and non-overlapping with all primary and secondary IP ranges
        # within a network. Both IPv4 and IPv6 ranges are supported. For IPv4,
        # the range can be any range listed in theValid
        # ranges list.
        # For IPv6:
        # The range must have a /64 prefix length.
        # The range must be omitted, for auto-allocation from Google-defined ULA
        # IPv6 range.
        # For BYOGUA internal IPv6 secondary range, the range may be specified
        # along with the `ipCollection` field.
        # If an `ipCollection` is specified, the requested ip_cidr_range must lie
        # within the range of the PDP referenced by the `ipCollection` field for
        # allocation.
        # If `ipCollection` field is specified, but ip_cidr_range is not,
        # the range is auto-allocated from the PDP referenced by the `ipCollection`
        # field.
        # Corresponds to the JSON property `ipCidrRange`
        # @return [String]
        attr_accessor :ip_cidr_range
      
        # The name associated with this subnetwork secondary range, used when adding
        # an alias IP/IPv6 range to a VM instance.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # The name must be unique within the subnetwork.
        # Corresponds to the JSON property `rangeName`
        # @return [String]
        attr_accessor :range_name
      
        # The URL of the reserved internal range. Only IPv4 is supported.
        # Corresponds to the JSON property `reservedInternalRange`
        # @return [String]
        attr_accessor :reserved_internal_range
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ip_cidr_range = args[:ip_cidr_range] if args.key?(:ip_cidr_range)
          @range_name = args[:range_name] if args.key?(:range_name)
          @reserved_internal_range = args[:reserved_internal_range] if args.key?(:reserved_internal_range)
        end
      end
      
      # The current IP utilization of all subnetwork ranges. Contains the total
      # number of allocated and free IPs in each range.
      class SubnetworkUtilizationDetails
        include Google::Apis::Core::Hashable
      
        # The IPV6 utilization of a single IP range.
        # Corresponds to the JSON property `externalIpv6InstanceUtilization`
        # @return [Google::Apis::ComputeV1::SubnetworkUtilizationDetailsIpv6Utilization]
        attr_accessor :external_ipv6_instance_utilization
      
        # The IPV6 utilization of a single IP range.
        # Corresponds to the JSON property `externalIpv6LbUtilization`
        # @return [Google::Apis::ComputeV1::SubnetworkUtilizationDetailsIpv6Utilization]
        attr_accessor :external_ipv6_lb_utilization
      
        # The IPV6 utilization of a single IP range.
        # Corresponds to the JSON property `internalIpv6Utilization`
        # @return [Google::Apis::ComputeV1::SubnetworkUtilizationDetailsIpv6Utilization]
        attr_accessor :internal_ipv6_utilization
      
        # Utilizations of all IPV4 IP ranges. For primary ranges, the range name
        # will be empty.
        # Corresponds to the JSON property `ipv4Utilizations`
        # @return [Array<Google::Apis::ComputeV1::SubnetworkUtilizationDetailsIpv4Utilization>]
        attr_accessor :ipv4_utilizations
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @external_ipv6_instance_utilization = args[:external_ipv6_instance_utilization] if args.key?(:external_ipv6_instance_utilization)
          @external_ipv6_lb_utilization = args[:external_ipv6_lb_utilization] if args.key?(:external_ipv6_lb_utilization)
          @internal_ipv6_utilization = args[:internal_ipv6_utilization] if args.key?(:internal_ipv6_utilization)
          @ipv4_utilizations = args[:ipv4_utilizations] if args.key?(:ipv4_utilizations)
        end
      end
      
      # The IPV4 utilization of a single IP range.
      class SubnetworkUtilizationDetailsIpv4Utilization
        include Google::Apis::Core::Hashable
      
        # Will be set for secondary range. Empty for primary IPv4 range.
        # Corresponds to the JSON property `rangeName`
        # @return [String]
        attr_accessor :range_name
      
        # 
        # Corresponds to the JSON property `totalAllocatedIp`
        # @return [Fixnum]
        attr_accessor :total_allocated_ip
      
        # 
        # Corresponds to the JSON property `totalFreeIp`
        # @return [Fixnum]
        attr_accessor :total_free_ip
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @range_name = args[:range_name] if args.key?(:range_name)
          @total_allocated_ip = args[:total_allocated_ip] if args.key?(:total_allocated_ip)
          @total_free_ip = args[:total_free_ip] if args.key?(:total_free_ip)
        end
      end
      
      # The IPV6 utilization of a single IP range.
      class SubnetworkUtilizationDetailsIpv6Utilization
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `totalAllocatedIp`
        # @return [Google::Apis::ComputeV1::Uint128]
        attr_accessor :total_allocated_ip
      
        # 
        # Corresponds to the JSON property `totalFreeIp`
        # @return [Google::Apis::ComputeV1::Uint128]
        attr_accessor :total_free_ip
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @total_allocated_ip = args[:total_allocated_ip] if args.key?(:total_allocated_ip)
          @total_free_ip = args[:total_free_ip] if args.key?(:total_free_ip)
        end
      end
      
      # 
      class SubnetworksExpandIpCidrRangeRequest
        include Google::Apis::Core::Hashable
      
        # The IP (in CIDR format or netmask) of internal addresses that are legal on
        # this Subnetwork. This range should be disjoint from other subnetworks
        # within this network. This range can only be larger than (i.e. a superset
        # of) the range previously defined before the update.
        # Corresponds to the JSON property `ipCidrRange`
        # @return [String]
        attr_accessor :ip_cidr_range
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ip_cidr_range = args[:ip_cidr_range] if args.key?(:ip_cidr_range)
        end
      end
      
      # 
      class SubnetworksScopedList
        include Google::Apis::Core::Hashable
      
        # A list of subnetworks contained in this scope.
        # Corresponds to the JSON property `subnetworks`
        # @return [Array<Google::Apis::ComputeV1::Subnetwork>]
        attr_accessor :subnetworks
      
        # An informational warning that appears when the list of addresses
        # is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SubnetworksScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @subnetworks = args[:subnetworks] if args.key?(:subnetworks)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # An informational warning that appears when the list of addresses
        # is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SubnetworksScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class SubnetworksScopedWarning
        include Google::Apis::Core::Hashable
      
        # Name of the scope containing this set of Subnetworks.
        # Corresponds to the JSON property `scopeName`
        # @return [String]
        attr_accessor :scope_name
      
        # An informational warning about unreachable scope
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::SubnetworksScopedWarning::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @scope_name = args[:scope_name] if args.key?(:scope_name)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # An informational warning about unreachable scope
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::SubnetworksScopedWarning::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class SubnetworksSetPrivateIpGoogleAccessRequest
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `privateIpGoogleAccess`
        # @return [Boolean]
        attr_accessor :private_ip_google_access
        alias_method :private_ip_google_access?, :private_ip_google_access
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @private_ip_google_access = args[:private_ip_google_access] if args.key?(:private_ip_google_access)
        end
      end
      
      # Subsetting configuration for this BackendService.
      # Currently this is applicable only for Internal TCP/UDP load balancing,
      # Internal HTTP(S) load balancing and Traffic Director.
      class Subsetting
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `policy`
        # @return [String]
        attr_accessor :policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @policy = args[:policy] if args.key?(:policy)
        end
      end
      
      # 
      class TcpHealthCheck
        include Google::Apis::Core::Hashable
      
        # The TCP port number to which the health check prober sends packets. The
        # default value is 80. Valid values are 1 through65535.
        # Corresponds to the JSON property `port`
        # @return [Fixnum]
        attr_accessor :port
      
        # Not supported.
        # Corresponds to the JSON property `portName`
        # @return [String]
        attr_accessor :port_name
      
        # Specifies how a port is selected for health checking. Can be one of the
        # following values:
        # USE_FIXED_PORT: Specifies a port number explicitly using theport field  in the
        # health check. Supported by backend services
        # for passthrough load balancers and backend services for proxy load
        # balancers. Not supported by target pools. The health check supports all
        # backends supported by the backend service provided the backend can be
        # health checked. For example, GCE_VM_IP network endpoint
        # groups, GCE_VM_IP_PORT network endpoint groups, and instance
        # group backends.
        # USE_NAMED_PORT: Not supported.
        # USE_SERVING_PORT: Provides an indirect method of specifying
        # the health check port by referring to the backend service. Only supported
        # by backend services for proxy load balancers. Not supported by target
        # pools.  Not supported by backend services for passthrough load balancers.
        # Supports all backends that can be health checked; for example,GCE_VM_IP_PORT
        # network endpoint groups and instance group
        # backends.
        # For GCE_VM_IP_PORT network endpoint group backends, the health
        # check uses the port number specified for each endpoint in the network
        # endpoint group.  For instance group backends, the health check uses the
        # port number determined by looking up the backend service's named port in
        # the instance group's list of named ports.
        # Corresponds to the JSON property `portSpecification`
        # @return [String]
        attr_accessor :port_specification
      
        # Specifies the type of proxy header to append before sending data to the
        # backend, either NONE or PROXY_V1. The default
        # is NONE.
        # Corresponds to the JSON property `proxyHeader`
        # @return [String]
        attr_accessor :proxy_header
      
        # Instructs the health check prober to send this exact ASCII string, up to
        # 1024 bytes in length, after establishing the TCP connection.
        # Corresponds to the JSON property `request`
        # @return [String]
        attr_accessor :request
      
        # Creates a content-based TCP health check. In addition to establishing a
        # TCP connection, you can configure the health check to pass only when the
        # backend sends this exact response ASCII string, up to 1024 bytes in length.
        # For details, see:
        # https://cloud.google.com/load-balancing/docs/health-check-concepts#criteria-
        # protocol-ssl-tcp
        # Corresponds to the JSON property `response`
        # @return [String]
        attr_accessor :response
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @port = args[:port] if args.key?(:port)
          @port_name = args[:port_name] if args.key?(:port_name)
          @port_specification = args[:port_specification] if args.key?(:port_specification)
          @proxy_header = args[:proxy_header] if args.key?(:proxy_header)
          @request = args[:request] if args.key?(:request)
          @response = args[:response] if args.key?(:response)
        end
      end
      
      # A set of instance tags.
      class Tags
        include Google::Apis::Core::Hashable
      
        # Specifies a fingerprint for this request, which is essentially a hash of
        # the tags' contents and used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update tags. You must always provide an
        # up-to-date fingerprint hash in order to update or change tags.
        # To see the latest fingerprint, make get() request to the
        # instance.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # An array of tags. Each tag must be 1-63 characters long, and comply
        # with RFC1035.
        # Corresponds to the JSON property `items`
        # @return [Array<String>]
        attr_accessor :items
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @items = args[:items] if args.key?(:items)
        end
      end
      
      # Represents a Target gRPC Proxy resource.
      # A target gRPC proxy is a component of load balancers intended for
      # load balancing gRPC traffic. Only global forwarding rules with load balancing
      # scheme INTERNAL_SELF_MANAGED can reference a target gRPC proxy. The target
      # gRPC Proxy references a URL map that specifies how traffic is routed to
      # gRPC backend services.
      class TargetGrpcProxy
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Fingerprint of this resource. A hash of the contents stored in this object.
        # This field is used in optimistic locking. This field will be ignored when
        # inserting a TargetGrpcProxy. An up-to-date fingerprint must
        # be provided in order to patch/update the TargetGrpcProxy; otherwise, the
        # request will fail with error 412 conditionNotMet. To see the
        # latest fingerprint, make a get() request to retrieve the
        # TargetGrpcProxy.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Output only. [Output Only] The unique identifier for the resource type. The
        # server
        # generates this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#targetGrpcProxy
        # for target grpc proxies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Server-defined URL with id for the resource.
        # Corresponds to the JSON property `selfLinkWithId`
        # @return [String]
        attr_accessor :self_link_with_id
      
        # URL to the UrlMap resource that defines the mapping from URL to the
        # BackendService. The protocol field in the BackendService must be set to
        # GRPC.
        # Corresponds to the JSON property `urlMap`
        # @return [String]
        attr_accessor :url_map
      
        # If true, indicates that the BackendServices referenced by the urlMap may be
        # accessed by gRPC applications without using a sidecar proxy. This will
        # enable configuration checks on urlMap and its referenced BackendServices to
        # not allow unsupported features. A gRPC application must use
        # "xds:///" scheme in the target URI of the service it is
        # connecting to.
        # If false, indicates that the BackendServices referenced by the urlMap will
        # be accessed by gRPC applications via a sidecar proxy. In this case, a gRPC
        # application must not use "xds:///" scheme in the target URI of
        # the service it is connecting to
        # Corresponds to the JSON property `validateForProxyless`
        # @return [Boolean]
        attr_accessor :validate_for_proxyless
        alias_method :validate_for_proxyless?, :validate_for_proxyless
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @self_link = args[:self_link] if args.key?(:self_link)
          @self_link_with_id = args[:self_link_with_id] if args.key?(:self_link_with_id)
          @url_map = args[:url_map] if args.key?(:url_map)
          @validate_for_proxyless = args[:validate_for_proxyless] if args.key?(:validate_for_proxyless)
        end
      end
      
      # 
      class TargetGrpcProxyList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetGrpcProxy resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::TargetGrpcProxy>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#targetGrpcProxy
        # for target grpc proxies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetGrpcProxyList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetGrpcProxyList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class TargetHttpProxiesScopedList
        include Google::Apis::Core::Hashable
      
        # A list of TargetHttpProxies contained in this scope.
        # Corresponds to the JSON property `targetHttpProxies`
        # @return [Array<Google::Apis::ComputeV1::TargetHttpProxy>]
        attr_accessor :target_http_proxies
      
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetHttpProxiesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @target_http_proxies = args[:target_http_proxies] if args.key?(:target_http_proxies)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetHttpProxiesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a Target HTTP Proxy resource.
      # Google Compute Engine has two Target HTTP Proxy resources:
      # * [Global](/compute/docs/reference/rest/v1/targetHttpProxies)
      # * [Regional](/compute/docs/reference/rest/v1/regionTargetHttpProxies)
      # A target HTTP proxy is a component of Google Cloud HTTP load balancers.
      # * targetHttpProxies are used by global external Application Load Balancers,
      # classic Application Load Balancers, cross-region internal Application Load
      # Balancers, and Traffic Director.
      # * regionTargetHttpProxies are used by regional internal Application Load
      # Balancers and regional external Application Load Balancers.
      # Forwarding rules reference a target HTTP proxy, and the target proxy
      # then references a URL map. For more information, readUsing Target Proxies
      # and
      # Forwarding rule concepts.
      class TargetHttpProxy
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Fingerprint of this resource. A hash of the contents stored in this object.
        # This field is used in optimistic locking. This field will be ignored when
        # inserting a TargetHttpProxy. An up-to-date fingerprint must
        # be provided in order to patch/update the TargetHttpProxy; otherwise, the
        # request will fail with error 412 conditionNotMet. To see the
        # latest fingerprint, make a get() request to retrieve the
        # TargetHttpProxy.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Specifies how long to keep a connection open, after completing a response,
        # while there is no matching traffic (in seconds). If an HTTP keep-alive is
        # not specified, a default value (610 seconds) will be used.
        # For global external Application Load Balancers, the minimum allowed value
        # is 5 seconds and the maximum allowed value is 1200 seconds.
        # For classic Application Load Balancers, this option is not supported.
        # Corresponds to the JSON property `httpKeepAliveTimeoutSec`
        # @return [Fixnum]
        attr_accessor :http_keep_alive_timeout_sec
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of resource. Always compute#targetHttpProxy
        # for target HTTP proxies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # This field only applies when the forwarding rule that references this
        # target proxy has a loadBalancingScheme set toINTERNAL_SELF_MANAGED.
        # When this field is set to true, Envoy proxies set up inbound
        # traffic interception and bind to the IP address and port specified in the
        # forwarding rule. This is generally useful when using Traffic Director to
        # configure Envoy as a gateway or middle proxy (in other words, not a
        # sidecar proxy). The Envoy proxy listens for inbound requests and handles
        # requests when it receives them.
        # The default is false.
        # Corresponds to the JSON property `proxyBind`
        # @return [Boolean]
        attr_accessor :proxy_bind
        alias_method :proxy_bind?, :proxy_bind
      
        # Output only. [Output Only] URL of the region where the regional Target HTTP
        # Proxy
        # resides. This field is not applicable to global Target HTTP Proxies.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # URL to the UrlMap resource that defines the mapping from URL to
        # the BackendService.
        # Corresponds to the JSON property `urlMap`
        # @return [String]
        attr_accessor :url_map
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @http_keep_alive_timeout_sec = args[:http_keep_alive_timeout_sec] if args.key?(:http_keep_alive_timeout_sec)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @proxy_bind = args[:proxy_bind] if args.key?(:proxy_bind)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @url_map = args[:url_map] if args.key?(:url_map)
        end
      end
      
      # 
      class TargetHttpProxyAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetHttpProxiesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::TargetHttpProxiesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # targetHttpProxyAggregatedList for lists of Target HTTP
        # Proxies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
        end
      end
      
      # A list of TargetHttpProxy resources.
      class TargetHttpProxyList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetHttpProxy resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::TargetHttpProxy>]
        attr_accessor :items
      
        # Output only. Type of resource. Always compute#targetHttpProxyList for lists
        # of target HTTP proxies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetHttpProxyList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetHttpProxyList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class TargetHttpsProxiesScopedList
        include Google::Apis::Core::Hashable
      
        # A list of TargetHttpsProxies contained in this scope.
        # Corresponds to the JSON property `targetHttpsProxies`
        # @return [Array<Google::Apis::ComputeV1::TargetHttpsProxy>]
        attr_accessor :target_https_proxies
      
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetHttpsProxiesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @target_https_proxies = args[:target_https_proxies] if args.key?(:target_https_proxies)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetHttpsProxiesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class TargetHttpsProxiesSetCertificateMapRequest
        include Google::Apis::Core::Hashable
      
        # URL of the Certificate Map to associate with this TargetHttpsProxy.
        # Accepted format is//certificatemanager.googleapis.com/projects/`project`/
        # locations/`location`/certificateMaps/`resourceName`.
        # Corresponds to the JSON property `certificateMap`
        # @return [String]
        attr_accessor :certificate_map
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @certificate_map = args[:certificate_map] if args.key?(:certificate_map)
        end
      end
      
      # 
      class TargetHttpsProxiesSetQuicOverrideRequest
        include Google::Apis::Core::Hashable
      
        # QUIC policy for the TargetHttpsProxy resource.
        # Corresponds to the JSON property `quicOverride`
        # @return [String]
        attr_accessor :quic_override
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @quic_override = args[:quic_override] if args.key?(:quic_override)
        end
      end
      
      # 
      class TargetHttpsProxiesSetSslCertificatesRequest
        include Google::Apis::Core::Hashable
      
        # New set of SslCertificate resources to associate
        # with this TargetHttpsProxy resource. At least one SSL
        # certificate must be specified. Currently, you may specify up to 15 SSL
        # certificates.
        # Corresponds to the JSON property `sslCertificates`
        # @return [Array<String>]
        attr_accessor :ssl_certificates
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ssl_certificates = args[:ssl_certificates] if args.key?(:ssl_certificates)
        end
      end
      
      # Represents a Target HTTPS Proxy resource.
      # Google Compute Engine has two Target HTTPS Proxy resources:
      # * [Global](/compute/docs/reference/rest/v1/targetHttpsProxies)
      # * [Regional](/compute/docs/reference/rest/v1/regionTargetHttpsProxies)
      # A target HTTPS proxy is a component of Google Cloud HTTPS load balancers.
      # * targetHttpsProxies are used by global external Application Load Balancers,
      # classic Application Load Balancers, cross-region internal Application Load
      # Balancers, and Traffic Director.
      # * regionTargetHttpsProxies are used by regional internal Application Load
      # Balancers and regional external Application Load Balancers.
      # Forwarding rules reference a target HTTPS proxy, and the target proxy
      # then references a URL map. For more information, readUsing Target Proxies
      # and
      # Forwarding rule concepts.
      class TargetHttpsProxy
        include Google::Apis::Core::Hashable
      
        # Optional. A URL referring to a networksecurity.AuthorizationPolicy resource
        # that describes how the proxy should authorize inbound traffic. If left
        # blank, access will not be restricted by an authorization policy.
        # Refer to the AuthorizationPolicy resource for additional
        # details.
        # authorizationPolicy only applies to a globalTargetHttpsProxy attached
        # toglobalForwardingRules with theloadBalancingScheme set to
        # INTERNAL_SELF_MANAGED.
        # Note: This field currently has no impact.
        # Corresponds to the JSON property `authorizationPolicy`
        # @return [String]
        attr_accessor :authorization_policy
      
        # URL of a certificate map that identifies a certificate map associated with
        # the given target proxy.
        # This field can only be set for Global external Application Load Balancer or
        # Classic Application Load Balancer. For other products use Certificate
        # Manager Certificates instead.
        # If set, sslCertificates will be ignored.
        # Accepted format is//certificatemanager.googleapis.com/projects/`project`/
        # locations/`location`/certificateMaps/`resourceName`.
        # Corresponds to the JSON property `certificateMap`
        # @return [String]
        attr_accessor :certificate_map
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Fingerprint of this resource. A hash of the contents stored in this object.
        # This field is used in optimistic locking. This field will be ignored when
        # inserting a TargetHttpsProxy. An up-to-date fingerprint must
        # be provided in order to patch the TargetHttpsProxy; otherwise, the request
        # will fail with error 412 conditionNotMet. To see the latest
        # fingerprint, make a get() request to retrieve the
        # TargetHttpsProxy.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # Specifies how long to keep a connection open, after completing a response,
        # while there is no matching traffic (in seconds). If an HTTP keep-alive is
        # not specified, a default value (610 seconds) will be used.
        # For global external Application Load Balancers, the minimum allowed value
        # is 5 seconds and the maximum allowed value is 1200 seconds.
        # For classic Application Load Balancers, this option is not supported.
        # Corresponds to the JSON property `httpKeepAliveTimeoutSec`
        # @return [Fixnum]
        attr_accessor :http_keep_alive_timeout_sec
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of resource. Alwayscompute#targetHttpsProxy
        # for target HTTPS proxies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # This field only applies when the forwarding rule that references this
        # target proxy has a loadBalancingScheme set toINTERNAL_SELF_MANAGED.
        # When this field is set to true, Envoy proxies set up inbound
        # traffic interception and bind to the IP address and port specified in the
        # forwarding rule. This is generally useful when using Traffic Director to
        # configure Envoy as a gateway or middle proxy (in other words, not a
        # sidecar proxy). The Envoy proxy listens for inbound requests and handles
        # requests when it receives them.
        # The default is false.
        # Corresponds to the JSON property `proxyBind`
        # @return [Boolean]
        attr_accessor :proxy_bind
        alias_method :proxy_bind?, :proxy_bind
      
        # Specifies the QUIC override policy for this TargetHttpsProxy resource. This
        # setting determines whether the load balancer attempts to negotiate QUIC
        # with clients.
        # You can specify NONE, ENABLE, orDISABLE.
        # 
        # - When quic-override is set to NONE,
        # Google manages whether QUIC is used.
        # - When quic-override is set to ENABLE, the
        # load balancer uses QUIC when possible.
        # - When quic-override is set to DISABLE, the
        # load balancer doesn't use QUIC.
        # - If the quic-override flag is not specified,NONE is implied.
        # Corresponds to the JSON property `quicOverride`
        # @return [String]
        attr_accessor :quic_override
      
        # Output only. [Output Only] URL of the region where the regional
        # TargetHttpsProxy
        # resides. This field is not applicable to global TargetHttpsProxies.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Optional. A URL referring to a networksecurity.ServerTlsPolicy resource
        # that describes how the proxy should authenticate inbound traffic.
        # serverTlsPolicy only applies to a globalTargetHttpsProxy attached
        # toglobalForwardingRules with theloadBalancingScheme set to
        # INTERNAL_SELF_MANAGED
        # or EXTERNAL orEXTERNAL_MANAGED or INTERNAL_MANAGED.
        # It also applies to a regional TargetHttpsProxy attached to
        # regional forwardingRules with theloadBalancingScheme set to EXTERNAL_MANAGED
        # orINTERNAL_MANAGED. For details whichServerTlsPolicy resources are accepted
        # withINTERNAL_SELF_MANAGED and which with EXTERNAL,INTERNAL_MANAGED,
        # EXTERNAL_MANAGEDloadBalancingScheme consult ServerTlsPolicy
        # documentation.
        # If left blank, communications are not encrypted.
        # Corresponds to the JSON property `serverTlsPolicy`
        # @return [String]
        attr_accessor :server_tls_policy
      
        # URLs to SslCertificate resources that are used to authenticate
        # connections between users and the load balancer. At least one SSL
        # certificate must be specified. SslCertificates do not apply when the load
        # balancing scheme is set to INTERNAL_SELF_MANAGED.
        # The URLs should refer to a SSL Certificate resource or Certificate Manager
        # Certificate resource. Mixing Classic Certificates and Certificate Manager
        # Certificates is not allowed. Certificate Manager Certificates must include
        # the certificatemanager API namespace. Using Certificate Manager
        # Certificates in this field is not supported by Global external Application
        # Load Balancer or Classic Application Load Balancer, use certificate_map
        # instead.
        # Currently, you may specify up to 15 Classic SSL Certificates or up to 100
        # Certificate Manager Certificates.
        # Certificate Manager Certificates accepted formats are:
        # 
        # - //certificatemanager.googleapis.com/projects/`project`/locations/`
        # location`/certificates/`resourceName`.
        # - https://certificatemanager.googleapis.com/v1alpha1/projects/`project`/
        # locations/`location`/certificates/`resourceName`.
        # Corresponds to the JSON property `sslCertificates`
        # @return [Array<String>]
        attr_accessor :ssl_certificates
      
        # URL of SslPolicy resource that will be associated with the TargetHttpsProxy
        # resource. If not set, the TargetHttpsProxy resource has no
        # SSL policy configured.
        # Corresponds to the JSON property `sslPolicy`
        # @return [String]
        attr_accessor :ssl_policy
      
        # Specifies whether TLS 1.3 0-RTT Data ("Early Data") should be accepted
        # for this service. Early Data allows a TLS resumption handshake to include
        # the initial application payload (a HTTP request) alongside the handshake,
        # reducing the effective round trips to "zero". This applies to TLS 1.3
        # connections over TCP (HTTP/2) as well as over UDP (QUIC/h3).
        # This can improve application performance, especially on networks where
        # interruptions may be common, such as on mobile.
        # Requests with Early Data will have the "Early-Data" HTTP header set on
        # the request, with a value of "1", to allow the backend to determine whether
        # Early Data was included.
        # Note: TLS Early Data may allow requests to be replayed, as the data is
        # sent to the backend before the handshake has fully completed. Applications
        # that allow idempotent HTTP methods to make non-idempotent changes, such as
        # a GET request updating a database, should not accept Early Data on those
        # requests, and reject requests with the "Early-Data: 1" HTTP header by
        # returning a HTTP 425 (Too Early) status code, in order to remain RFC
        # compliant.
        # The default value is DISABLED.
        # Corresponds to the JSON property `tlsEarlyData`
        # @return [String]
        attr_accessor :tls_early_data
      
        # A fully-qualified or valid partial URL to the UrlMap resource that defines
        # the mapping from URL to the BackendService. For example, the following are
        # all valid URLs for specifying a URL map:
        # 
        # - https://www.googleapis.compute/v1/projects/project/global/urlMaps/url-map
        # - projects/project/global/urlMaps/url-map
        # - global/urlMaps/url-map
        # Corresponds to the JSON property `urlMap`
        # @return [String]
        attr_accessor :url_map
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @authorization_policy = args[:authorization_policy] if args.key?(:authorization_policy)
          @certificate_map = args[:certificate_map] if args.key?(:certificate_map)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @http_keep_alive_timeout_sec = args[:http_keep_alive_timeout_sec] if args.key?(:http_keep_alive_timeout_sec)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @proxy_bind = args[:proxy_bind] if args.key?(:proxy_bind)
          @quic_override = args[:quic_override] if args.key?(:quic_override)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @server_tls_policy = args[:server_tls_policy] if args.key?(:server_tls_policy)
          @ssl_certificates = args[:ssl_certificates] if args.key?(:ssl_certificates)
          @ssl_policy = args[:ssl_policy] if args.key?(:ssl_policy)
          @tls_early_data = args[:tls_early_data] if args.key?(:tls_early_data)
          @url_map = args[:url_map] if args.key?(:url_map)
        end
      end
      
      # 
      class TargetHttpsProxyAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetHttpsProxiesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::TargetHttpsProxiesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # targetHttpsProxyAggregatedList for lists of Target
        # HTTP Proxies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetHttpsProxyAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetHttpsProxyAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of TargetHttpsProxy resources.
      class TargetHttpsProxyList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetHttpsProxy resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::TargetHttpsProxy>]
        attr_accessor :items
      
        # Output only. Type of resource. Always compute#targetHttpsProxyList for
        # lists of target HTTPS proxies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetHttpsProxyList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetHttpsProxyList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a Target Instance resource.
      # You can use a target instance to handle traffic for one or more forwarding
      # rules, which is ideal for forwarding protocol traffic that is managed by a
      # single source. For example, ESP, AH, TCP, or UDP.
      # For more information, readTarget
      # instances.
      class TargetInstance
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # A URL to the virtual machine instance that handles traffic for this target
        # instance. When creating a target instance, you can provide the
        # fully-qualified URL or a valid partial URL to the desired virtual machine.
        # For example, the following are all valid URLs:
        # 
        # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/
        # instances/instance
        # - projects/project/zones/zone/instances/instance
        # - zones/zone/instances/instance
        # Corresponds to the JSON property `instance`
        # @return [String]
        attr_accessor :instance
      
        # Output only. [Output Only] The type of the resource. Alwayscompute#
        # targetInstance for target instances.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Must have a value of NO_NAT.
        # Protocol forwarding delivers packets while preserving the destination IP
        # address of the forwarding rule referencing the target instance.
        # Corresponds to the JSON property `natPolicy`
        # @return [String]
        attr_accessor :nat_policy
      
        # The URL of the network this target instance uses to forward traffic.
        # If not specified, the traffic will be forwarded to the network that
        # the default network interface belongs to.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # [Output Only] The resource URL for the security policy associated with this
        # target instance.
        # Corresponds to the JSON property `securityPolicy`
        # @return [String]
        attr_accessor :security_policy
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] URL of the zone where the target instance resides.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `zone`
        # @return [String]
        attr_accessor :zone
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @instance = args[:instance] if args.key?(:instance)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @nat_policy = args[:nat_policy] if args.key?(:nat_policy)
          @network = args[:network] if args.key?(:network)
          @security_policy = args[:security_policy] if args.key?(:security_policy)
          @self_link = args[:self_link] if args.key?(:self_link)
          @zone = args[:zone] if args.key?(:zone)
        end
      end
      
      # 
      class TargetInstanceAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetInstance resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::TargetInstancesScopedList>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetInstanceAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetInstanceAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of TargetInstance resources.
      class TargetInstanceList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetInstance resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::TargetInstance>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetInstanceList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetInstanceList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class TargetInstancesScopedList
        include Google::Apis::Core::Hashable
      
        # A list of target instances contained in this scope.
        # Corresponds to the JSON property `targetInstances`
        # @return [Array<Google::Apis::ComputeV1::TargetInstance>]
        attr_accessor :target_instances
      
        # Informational warning which replaces the list of addresses when
        # the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetInstancesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @target_instances = args[:target_instances] if args.key?(:target_instances)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of addresses when
        # the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetInstancesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a Target Pool resource.
      # Target pools are used with external passthrough Network Load Balancers.
      # A target pool references member instances, an associated legacy
      # HttpHealthCheck resource, and, optionally, a backup target pool.
      # For more information, readUsing target pools.
      class TargetPool
        include Google::Apis::Core::Hashable
      
        # The server-defined URL for the resource. This field is applicable only when
        # the containing target pool is serving a forwarding rule as the primary
        # pool, and its failoverRatio field is properly set to a value
        # between [0, 1].backupPool and failoverRatio together define
        # the fallback behavior of the primary target pool: if the ratio of the
        # healthy instances in the primary pool is at or belowfailoverRatio, traffic
        # arriving at the load-balanced
        # IP will be directed to the backup pool.
        # In case where failoverRatio and backupPool
        # are not set, or all the instances in the backup pool are unhealthy,
        # the traffic will be directed back to the primary pool in the "force"
        # mode, where traffic will be spread to the healthy instances with the
        # best effort, or to all instances when no instance is healthy.
        # Corresponds to the JSON property `backupPool`
        # @return [String]
        attr_accessor :backup_pool
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # This field is applicable only when the containing target pool is serving a
        # forwarding rule as the primary pool (i.e., not as a backup pool to some
        # other target pool). The value of the field must be in [0, 1].
        # If set, backupPool must also be set. They together define
        # the fallback behavior of the primary target pool: if the ratio of the
        # healthy instances in the primary pool is at or below this number,
        # traffic arriving at the load-balanced IP will be directed to the
        # backup pool.
        # In case where failoverRatio is not set or all the
        # instances in the backup pool are unhealthy, the traffic will be
        # directed back to the primary pool in the "force" mode, where traffic
        # will be spread to the healthy instances with the
        # best effort, or to all instances when no instance is healthy.
        # Corresponds to the JSON property `failoverRatio`
        # @return [Float]
        attr_accessor :failover_ratio
      
        # The URL of the HttpHealthCheck resource. A member instance in this
        # pool is considered healthy if and only if the health checks pass.
        # Only legacy HttpHealthChecks are supported. Only one health check may be
        # specified.
        # Corresponds to the JSON property `healthChecks`
        # @return [Array<String>]
        attr_accessor :health_checks
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # A list of resource URLs to the virtual machine instances serving this pool.
        # They must live in zones contained in the same region as this pool.
        # Corresponds to the JSON property `instances`
        # @return [Array<String>]
        attr_accessor :instances
      
        # Output only. [Output Only] Type of the resource. Always compute#targetPool
        # for target pools.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] URL of the region where the target pool resides.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] The resource URL for the security policy associated with this
        # target pool.
        # Corresponds to the JSON property `securityPolicy`
        # @return [String]
        attr_accessor :security_policy
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Session affinity option, must be one of the following values:
        # NONE: Connections from the same client IP may go to any
        # instance in the pool.
        # CLIENT_IP: Connections from the same client IP will go
        # to the same instance in
        # the pool while that instance remains healthy.
        # CLIENT_IP_PROTO: Connections from the same client IP
        # with the same IP protocol will go to the same instance in the
        # pool while that instance remains healthy.
        # Corresponds to the JSON property `sessionAffinity`
        # @return [String]
        attr_accessor :session_affinity
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @backup_pool = args[:backup_pool] if args.key?(:backup_pool)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @failover_ratio = args[:failover_ratio] if args.key?(:failover_ratio)
          @health_checks = args[:health_checks] if args.key?(:health_checks)
          @id = args[:id] if args.key?(:id)
          @instances = args[:instances] if args.key?(:instances)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @region = args[:region] if args.key?(:region)
          @security_policy = args[:security_policy] if args.key?(:security_policy)
          @self_link = args[:self_link] if args.key?(:self_link)
          @session_affinity = args[:session_affinity] if args.key?(:session_affinity)
        end
      end
      
      # 
      class TargetPoolAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetPool resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::TargetPoolsScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # targetPoolAggregatedList for aggregated lists of
        # target pools.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetPoolAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetPoolAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class TargetPoolInstanceHealth
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `healthStatus`
        # @return [Array<Google::Apis::ComputeV1::HealthStatus>]
        attr_accessor :health_status
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # targetPoolInstanceHealth when checking the health of
        # an instance.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @health_status = args[:health_status] if args.key?(:health_status)
          @kind = args[:kind] if args.key?(:kind)
        end
      end
      
      # Contains a list of TargetPool resources.
      class TargetPoolList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetPool resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::TargetPool>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#targetPoolList
        # for lists of target pools.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetPoolList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetPoolList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class AddTargetPoolsHealthCheckRequest
        include Google::Apis::Core::Hashable
      
        # The HttpHealthCheck to add to the target pool.
        # Corresponds to the JSON property `healthChecks`
        # @return [Array<Google::Apis::ComputeV1::HealthCheckReference>]
        attr_accessor :health_checks
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @health_checks = args[:health_checks] if args.key?(:health_checks)
        end
      end
      
      # 
      class AddTargetPoolsInstanceRequest
        include Google::Apis::Core::Hashable
      
        # A full or partial URL to an instance to add to this target pool. This can
        # be a full or partial URL. For example, the following are valid URLs:
        # 
        # - https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/
        # instances/instance-name
        # - projects/project-id/zones/zone/instances/instance-name
        # - zones/zone/instances/instance-name
        # Corresponds to the JSON property `instances`
        # @return [Array<Google::Apis::ComputeV1::InstanceReference>]
        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
      
      # 
      class RemoveTargetPoolsHealthCheckRequest
        include Google::Apis::Core::Hashable
      
        # Health check URL to be removed. This can be a full or valid partial URL.
        # For example, the following are valid URLs:
        # 
        # - https://www.googleapis.com/compute/beta/projects/project/global/
        # httpHealthChecks/health-check
        # - projects/project/global/httpHealthChecks/health-check
        # - global/httpHealthChecks/health-check
        # Corresponds to the JSON property `healthChecks`
        # @return [Array<Google::Apis::ComputeV1::HealthCheckReference>]
        attr_accessor :health_checks
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @health_checks = args[:health_checks] if args.key?(:health_checks)
        end
      end
      
      # 
      class RemoveTargetPoolsInstanceRequest
        include Google::Apis::Core::Hashable
      
        # URLs of the instances to be removed from target pool.
        # Corresponds to the JSON property `instances`
        # @return [Array<Google::Apis::ComputeV1::InstanceReference>]
        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
      
      # 
      class TargetPoolsScopedList
        include Google::Apis::Core::Hashable
      
        # A list of target pools contained in this scope.
        # Corresponds to the JSON property `targetPools`
        # @return [Array<Google::Apis::ComputeV1::TargetPool>]
        attr_accessor :target_pools
      
        # Informational warning which replaces the list of addresses when
        # the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetPoolsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @target_pools = args[:target_pools] if args.key?(:target_pools)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of addresses when
        # the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetPoolsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class TargetReference
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `target`
        # @return [String]
        attr_accessor :target
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @target = args[:target] if args.key?(:target)
        end
      end
      
      # 
      class TargetSslProxiesSetBackendServiceRequest
        include Google::Apis::Core::Hashable
      
        # The URL of the new BackendService resource for the targetSslProxy.
        # 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)
          @service = args[:service] if args.key?(:service)
        end
      end
      
      # 
      class TargetSslProxiesSetCertificateMapRequest
        include Google::Apis::Core::Hashable
      
        # URL of the Certificate Map to associate with this TargetSslProxy.
        # Accepted format is//certificatemanager.googleapis.com/projects/`project`/
        # locations/`location`/certificateMaps/`resourceName`.
        # Corresponds to the JSON property `certificateMap`
        # @return [String]
        attr_accessor :certificate_map
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @certificate_map = args[:certificate_map] if args.key?(:certificate_map)
        end
      end
      
      # 
      class TargetSslProxiesSetProxyHeaderRequest
        include Google::Apis::Core::Hashable
      
        # The new type of proxy header to append before sending data to the
        # backend.  NONE or PROXY_V1 are allowed.
        # Corresponds to the JSON property `proxyHeader`
        # @return [String]
        attr_accessor :proxy_header
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @proxy_header = args[:proxy_header] if args.key?(:proxy_header)
        end
      end
      
      # 
      class TargetSslProxiesSetSslCertificatesRequest
        include Google::Apis::Core::Hashable
      
        # New set of URLs to SslCertificate resources to associate with this
        # TargetSslProxy. At least one SSL certificate must be specified.
        # Currently, you may specify up to 15 SSL certificates.
        # Corresponds to the JSON property `sslCertificates`
        # @return [Array<String>]
        attr_accessor :ssl_certificates
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ssl_certificates = args[:ssl_certificates] if args.key?(:ssl_certificates)
        end
      end
      
      # Represents a Target SSL Proxy resource.
      # A target SSL proxy is a component of a Proxy Network Load Balancer.
      # The forwarding rule references the target SSL proxy, and the target proxy
      # then references a backend service. For more information, readProxy Network
      # Load Balancer overview.
      class TargetSslProxy
        include Google::Apis::Core::Hashable
      
        # URL of a certificate map that identifies a certificate map associated with
        # the given target proxy.
        # This field can only be set for global target proxies.
        # If set, sslCertificates will be ignored.
        # Accepted format is//certificatemanager.googleapis.com/projects/`project`/
        # locations/`location`/certificateMaps/`resourceName`.
        # Corresponds to the JSON property `certificateMap`
        # @return [String]
        attr_accessor :certificate_map
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#targetSslProxy
        # for target SSL proxies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Specifies the type of proxy header to append before sending data to the
        # backend, either NONE or PROXY_V1. The default
        # is NONE.
        # Corresponds to the JSON property `proxyHeader`
        # @return [String]
        attr_accessor :proxy_header
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # URL to the BackendService resource.
        # Corresponds to the JSON property `service`
        # @return [String]
        attr_accessor :service
      
        # URLs to SslCertificate resources that are used to
        # authenticate connections to Backends. At least one SSL certificate
        # must be specified. Currently, you may specify up to 15 SSL certificates.
        # sslCertificates do not apply when the load balancing scheme is set to
        # INTERNAL_SELF_MANAGED.
        # Corresponds to the JSON property `sslCertificates`
        # @return [Array<String>]
        attr_accessor :ssl_certificates
      
        # URL of SslPolicy resource that will be associated with the TargetSslProxy
        # resource. If not set, the TargetSslProxy resource will not have any
        # SSL policy configured.
        # 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)
          @certificate_map = args[:certificate_map] if args.key?(:certificate_map)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @proxy_header = args[:proxy_header] if args.key?(:proxy_header)
          @self_link = args[:self_link] if args.key?(:self_link)
          @service = args[:service] if args.key?(:service)
          @ssl_certificates = args[:ssl_certificates] if args.key?(:ssl_certificates)
          @ssl_policy = args[:ssl_policy] if args.key?(:ssl_policy)
        end
      end
      
      # Contains a list of TargetSslProxy resources.
      class TargetSslProxyList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetSslProxy resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::TargetSslProxy>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetSslProxyList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetSslProxyList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class TargetTcpProxiesScopedList
        include Google::Apis::Core::Hashable
      
        # A list of TargetTcpProxies contained in this scope.
        # Corresponds to the JSON property `targetTcpProxies`
        # @return [Array<Google::Apis::ComputeV1::TargetTcpProxy>]
        attr_accessor :target_tcp_proxies
      
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetTcpProxiesScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @target_tcp_proxies = args[:target_tcp_proxies] if args.key?(:target_tcp_proxies)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetTcpProxiesScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class TargetTcpProxiesSetBackendServiceRequest
        include Google::Apis::Core::Hashable
      
        # The URL of the new BackendService resource for the targetTcpProxy.
        # 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)
          @service = args[:service] if args.key?(:service)
        end
      end
      
      # 
      class TargetTcpProxiesSetProxyHeaderRequest
        include Google::Apis::Core::Hashable
      
        # The new type of proxy header to append before sending data to the
        # backend.  NONE or PROXY_V1 are allowed.
        # Corresponds to the JSON property `proxyHeader`
        # @return [String]
        attr_accessor :proxy_header
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @proxy_header = args[:proxy_header] if args.key?(:proxy_header)
        end
      end
      
      # Represents a Target TCP Proxy resource.
      # A target TCP proxy is a component of a Proxy Network Load Balancer.
      # The forwarding rule references the target TCP proxy, and the target proxy
      # then references a backend service. For more information, readProxy Network
      # Load Balancer overview.
      class TargetTcpProxy
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#targetTcpProxy
        # for target TCP proxies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # This field only applies when the forwarding rule that references this
        # target proxy has a loadBalancingScheme set toINTERNAL_SELF_MANAGED.
        # When this field is set to true, Envoy proxies set up inbound
        # traffic interception and bind to the IP address and port specified in the
        # forwarding rule. This is generally useful when using Traffic Director to
        # configure Envoy as a gateway or middle proxy (in other words, not a
        # sidecar proxy). The Envoy proxy listens for inbound requests and handles
        # requests when it receives them.
        # The default is false.
        # Corresponds to the JSON property `proxyBind`
        # @return [Boolean]
        attr_accessor :proxy_bind
        alias_method :proxy_bind?, :proxy_bind
      
        # Specifies the type of proxy header to append before sending data to the
        # backend, either NONE or PROXY_V1. The default
        # is NONE.
        # Corresponds to the JSON property `proxyHeader`
        # @return [String]
        attr_accessor :proxy_header
      
        # Output only. [Output Only] URL of the region where the regional TCP proxy
        # resides.
        # This field is not applicable to global TCP proxy.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # URL to the BackendService resource.
        # 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)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @proxy_bind = args[:proxy_bind] if args.key?(:proxy_bind)
          @proxy_header = args[:proxy_header] if args.key?(:proxy_header)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @service = args[:service] if args.key?(:service)
        end
      end
      
      # 
      class TargetTcpProxyAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetTcpProxiesScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::TargetTcpProxiesScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # targetTcpProxyAggregatedList for lists of Target
        # TCP Proxies.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetTcpProxyAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetTcpProxyAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of TargetTcpProxy resources.
      class TargetTcpProxyList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetTcpProxy resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::TargetTcpProxy>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetTcpProxyList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetTcpProxyList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a Target VPN Gateway resource.
      # The target VPN gateway resource represents a Classic Cloud VPN gateway.
      # For more information, read thethe
      # Cloud VPN Overview.
      class TargetVpnGateway
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] A list of URLs to the ForwardingRule resources.
        # ForwardingRules are created usingcompute.forwardingRules.insert and associated
        # with a VPN
        # gateway.
        # Corresponds to the JSON property `forwardingRules`
        # @return [Array<String>]
        attr_accessor :forwarding_rules
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of resource. Alwayscompute#targetVpnGateway
        # for target VPN gateways.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this TargetVpnGateway, which
        # is essentially a hash of the labels set used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a TargetVpnGateway.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels for this resource. These can only be added or modified by thesetLabels
        # method. Each label key/value pair must comply withRFC1035.
        # Label values may be empty.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # URL of the network to which this VPN gateway is attached. Provided by the
        # client when the VPN gateway is created.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # [Output Only] URL of the region where the target VPN gateway resides.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] The status of the VPN gateway,
        # which can be one of the following: CREATING, READY, FAILED, or DELETING.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # [Output Only] A list of URLs to VpnTunnel resources. VpnTunnels are
        # created using the compute.vpntunnels.insert method and
        # associated with a VPN gateway.
        # Corresponds to the JSON property `tunnels`
        # @return [Array<String>]
        attr_accessor :tunnels
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @forwarding_rules = args[:forwarding_rules] if args.key?(:forwarding_rules)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @status = args[:status] if args.key?(:status)
          @tunnels = args[:tunnels] if args.key?(:tunnels)
        end
      end
      
      # 
      class TargetVpnGatewayAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetVpnGateway resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::TargetVpnGatewaysScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#targetVpnGateway
        # for target VPN gateways.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetVpnGatewayAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetVpnGatewayAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of TargetVpnGateway resources.
      class TargetVpnGatewayList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of TargetVpnGateway resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::TargetVpnGateway>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#targetVpnGateway
        # for target VPN gateways.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetVpnGatewayList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetVpnGatewayList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class TargetVpnGatewaysScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of target VPN gateways contained in this scope.
        # Corresponds to the JSON property `targetVpnGateways`
        # @return [Array<Google::Apis::ComputeV1::TargetVpnGateway>]
        attr_accessor :target_vpn_gateways
      
        # [Output Only] Informational warning which replaces the list of addresses
        # when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::TargetVpnGatewaysScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @target_vpn_gateways = args[:target_vpn_gateways] if args.key?(:target_vpn_gateways)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning which replaces the list of addresses
        # when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::TargetVpnGatewaysScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class TestFailure
        include Google::Apis::Core::Hashable
      
        # The actual output URL evaluated by a load balancer containing the scheme,
        # host, path and query parameters.
        # Corresponds to the JSON property `actualOutputUrl`
        # @return [String]
        attr_accessor :actual_output_url
      
        # Actual HTTP status code for rule with `urlRedirect`
        # calculated by load balancer
        # Corresponds to the JSON property `actualRedirectResponseCode`
        # @return [Fixnum]
        attr_accessor :actual_redirect_response_code
      
        # BackendService or BackendBucket returned by load
        # balancer.
        # Corresponds to the JSON property `actualService`
        # @return [String]
        attr_accessor :actual_service
      
        # The expected output URL evaluated by a load balancer containing the scheme,
        # host, path and query parameters.
        # Corresponds to the JSON property `expectedOutputUrl`
        # @return [String]
        attr_accessor :expected_output_url
      
        # Expected HTTP status code for rule with `urlRedirect`
        # calculated by load balancer
        # Corresponds to the JSON property `expectedRedirectResponseCode`
        # @return [Fixnum]
        attr_accessor :expected_redirect_response_code
      
        # Expected BackendService or BackendBucket resource
        # the given URL should be mapped to.
        # Corresponds to the JSON property `expectedService`
        # @return [String]
        attr_accessor :expected_service
      
        # HTTP headers of the request.
        # Corresponds to the JSON property `headers`
        # @return [Array<Google::Apis::ComputeV1::UrlMapTestHeader>]
        attr_accessor :headers
      
        # Host portion of the URL.
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # Path portion including query parameters in the URL.
        # Corresponds to the JSON property `path`
        # @return [String]
        attr_accessor :path
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @actual_output_url = args[:actual_output_url] if args.key?(:actual_output_url)
          @actual_redirect_response_code = args[:actual_redirect_response_code] if args.key?(:actual_redirect_response_code)
          @actual_service = args[:actual_service] if args.key?(:actual_service)
          @expected_output_url = args[:expected_output_url] if args.key?(:expected_output_url)
          @expected_redirect_response_code = args[:expected_redirect_response_code] if args.key?(:expected_redirect_response_code)
          @expected_service = args[:expected_service] if args.key?(:expected_service)
          @headers = args[:headers] if args.key?(:headers)
          @host = args[:host] if args.key?(:host)
          @path = args[:path] if args.key?(:path)
        end
      end
      
      # 
      class TestPermissionsRequest
        include Google::Apis::Core::Hashable
      
        # The set of permissions to check for the 'resource'. Permissions with
        # wildcards (such as '*' or 'storage.*') are not allowed.
        # Corresponds to the JSON property `permissions`
        # @return [Array<String>]
        attr_accessor :permissions
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @permissions = args[:permissions] if args.key?(:permissions)
        end
      end
      
      # 
      class TestPermissionsResponse
        include Google::Apis::Core::Hashable
      
        # A subset of `TestPermissionsRequest.permissions` that the caller is
        # allowed.
        # Corresponds to the JSON property `permissions`
        # @return [Array<String>]
        attr_accessor :permissions
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @permissions = args[:permissions] if args.key?(:permissions)
        end
      end
      
      # 
      class Uint128
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `high`
        # @return [Fixnum]
        attr_accessor :high
      
        # 
        # Corresponds to the JSON property `low`
        # @return [Fixnum]
        attr_accessor :low
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @high = args[:high] if args.key?(:high)
          @low = args[:low] if args.key?(:low)
        end
      end
      
      # Upcoming Maintenance notification information.
      class UpcomingMaintenance
        include Google::Apis::Core::Hashable
      
        # Indicates if the maintenance can be customer triggered.
        # Corresponds to the JSON property `canReschedule`
        # @return [Boolean]
        attr_accessor :can_reschedule
        alias_method :can_reschedule?, :can_reschedule
      
        # The latest time for the planned maintenance window to start.
        # This timestamp value is in RFC3339 text format.
        # Corresponds to the JSON property `latestWindowStartTime`
        # @return [String]
        attr_accessor :latest_window_start_time
      
        # Indicates whether the UpcomingMaintenance will be triggered on VM shutdown.
        # Corresponds to the JSON property `maintenanceOnShutdown`
        # @return [Boolean]
        attr_accessor :maintenance_on_shutdown
        alias_method :maintenance_on_shutdown?, :maintenance_on_shutdown
      
        # The reasons for the maintenance. Only valid for vms.
        # Corresponds to the JSON property `maintenanceReasons`
        # @return [Array<String>]
        attr_accessor :maintenance_reasons
      
        # 
        # Corresponds to the JSON property `maintenanceStatus`
        # @return [String]
        attr_accessor :maintenance_status
      
        # Defines the type of maintenance.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # The time by which the maintenance disruption will be completed.
        # This timestamp value is in RFC3339 text format.
        # Corresponds to the JSON property `windowEndTime`
        # @return [String]
        attr_accessor :window_end_time
      
        # The current start time of the maintenance window.
        # This timestamp value is in RFC3339 text format.
        # Corresponds to the JSON property `windowStartTime`
        # @return [String]
        attr_accessor :window_start_time
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @can_reschedule = args[:can_reschedule] if args.key?(:can_reschedule)
          @latest_window_start_time = args[:latest_window_start_time] if args.key?(:latest_window_start_time)
          @maintenance_on_shutdown = args[:maintenance_on_shutdown] if args.key?(:maintenance_on_shutdown)
          @maintenance_reasons = args[:maintenance_reasons] if args.key?(:maintenance_reasons)
          @maintenance_status = args[:maintenance_status] if args.key?(:maintenance_status)
          @type = args[:type] if args.key?(:type)
          @window_end_time = args[:window_end_time] if args.key?(:window_end_time)
          @window_start_time = args[:window_start_time] if args.key?(:window_start_time)
        end
      end
      
      # Represents a URL Map resource.
      # Compute Engine has two URL Map resources:
      # * [Global](/compute/docs/reference/rest/v1/urlMaps)
      # * [Regional](/compute/docs/reference/rest/v1/regionUrlMaps)
      # A URL map resource is a component of certain types of cloud load balancers
      # and Traffic Director:
      # * urlMaps are used by global external Application Load
      # Balancers, classic Application Load Balancers, and cross-region internal
      # Application Load Balancers.
      # * regionUrlMaps are used by internal Application Load Balancers,
      # regional external Application Load Balancers and regional internal
      # Application Load Balancers.
      # For a list of supported URL map features by the load balancer type, see the
      # Load balancing features: Routing and traffic management table.
      # For a list of supported URL map features for Traffic Director, see the
      # Traffic Director features: Routing and traffic management table.
      # This resource defines mappings from hostnames and URL paths to either a
      # backend service or a backend bucket.
      # To use the global urlMaps resource, the backend service must
      # have a loadBalancingScheme of either EXTERNAL,EXTERNAL_MANAGED, or
      # INTERNAL_SELF_MANAGED. To use
      # the regionUrlMaps resource, the backend service must have aloadBalancingScheme
      # of INTERNAL_MANAGED. For more
      # information, read URL
      # Map Concepts.
      class UrlMap
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Specifies the custom error response policy that must be applied when the
        # backend service or backend bucket responds with an error.
        # Corresponds to the JSON property `defaultCustomErrorResponsePolicy`
        # @return [Google::Apis::ComputeV1::CustomErrorResponsePolicy]
        attr_accessor :default_custom_error_response_policy
      
        # defaultRouteAction takes effect when none of the
        # hostRules match. The load balancer performs advanced routing
        # actions, such as URL rewrites and header transformations, before forwarding
        # the request to the selected backend.
        # Only one of defaultUrlRedirect, defaultService
        # or defaultRouteAction.weightedBackendService can be set.
        # URL maps for classic Application Load Balancers only support
        # the urlRewrite action within defaultRouteAction.
        # defaultRouteAction has no effect when the URL map is bound
        # to a target gRPC proxy that has the validateForProxyless field
        # set to true.
        # Corresponds to the JSON property `defaultRouteAction`
        # @return [Google::Apis::ComputeV1::HttpRouteAction]
        attr_accessor :default_route_action
      
        # The full or partial URL of the defaultService resource to
        # which traffic is directed if none of the hostRules match.
        # If defaultRouteAction is also specified, advanced
        # routing actions, such as URL rewrites, take effect before sending the
        # request to the backend.
        # Only one of defaultUrlRedirect, defaultService
        # or defaultRouteAction.weightedBackendService can be set.
        # defaultService has no effect when the URL map is bound
        # to a target gRPC proxy that has the validateForProxyless field
        # set to true.
        # Corresponds to the JSON property `defaultService`
        # @return [String]
        attr_accessor :default_service
      
        # Specifies settings for an HTTP redirect.
        # Corresponds to the JSON property `defaultUrlRedirect`
        # @return [Google::Apis::ComputeV1::HttpRedirectAction]
        attr_accessor :default_url_redirect
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # Fingerprint of this resource. A hash of the contents stored in this object.
        # This field is used in optimistic locking. This field is ignored when
        # inserting a UrlMap. An up-to-date fingerprint must be provided
        # in order to update the UrlMap, otherwise the request will
        # fail with error 412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a UrlMap.
        # Corresponds to the JSON property `fingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :fingerprint
      
        # The request and response header transformations that take effect before
        # the request is passed along to the selected backendService.
        # Corresponds to the JSON property `headerAction`
        # @return [Google::Apis::ComputeV1::HttpHeaderAction]
        attr_accessor :header_action
      
        # The list of host rules to use against the URL.
        # Corresponds to the JSON property `hostRules`
        # @return [Array<Google::Apis::ComputeV1::HostRule>]
        attr_accessor :host_rules
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Always compute#urlMaps for
        # url maps.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # The list of named PathMatchers to use against the URL.
        # Corresponds to the JSON property `pathMatchers`
        # @return [Array<Google::Apis::ComputeV1::PathMatcher>]
        attr_accessor :path_matchers
      
        # Output only. [Output Only] URL of the region where the regional URL map
        # resides.
        # This field is not applicable to global URL maps.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # The list of expected URL mapping tests. Request to update theUrlMap succeeds
        # only if all test cases pass. You can specify a
        # maximum of 100 tests per UrlMap.
        # Not supported when the URL map is bound to a target gRPC proxy that
        # has validateForProxyless field set to true.
        # Corresponds to the JSON property `tests`
        # @return [Array<Google::Apis::ComputeV1::UrlMapTest>]
        attr_accessor :tests
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @default_custom_error_response_policy = args[:default_custom_error_response_policy] if args.key?(:default_custom_error_response_policy)
          @default_route_action = args[:default_route_action] if args.key?(:default_route_action)
          @default_service = args[:default_service] if args.key?(:default_service)
          @default_url_redirect = args[:default_url_redirect] if args.key?(:default_url_redirect)
          @description = args[:description] if args.key?(:description)
          @fingerprint = args[:fingerprint] if args.key?(:fingerprint)
          @header_action = args[:header_action] if args.key?(:header_action)
          @host_rules = args[:host_rules] if args.key?(:host_rules)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @path_matchers = args[:path_matchers] if args.key?(:path_matchers)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @tests = args[:tests] if args.key?(:tests)
        end
      end
      
      # Contains a list of UrlMap resources.
      class UrlMapList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of UrlMap resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::UrlMap>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::UrlMapList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::UrlMapList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class UrlMapReference
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `urlMap`
        # @return [String]
        attr_accessor :url_map
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @url_map = args[:url_map] if args.key?(:url_map)
        end
      end
      
      # Message for the expected URL mappings.
      class UrlMapTest
        include Google::Apis::Core::Hashable
      
        # Description of this test case.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # The expected output URL evaluated by the load balancer
        # containing the scheme, host, path and query parameters.
        # For rules that forward requests to backends, the test passes only
        # whenexpectedOutputUrl matches the request forwarded by
        # the load balancer to backends. For rules with urlRewrite,
        # the test verifies that the forwarded request matcheshostRewrite and
        # pathPrefixRewrite in theurlRewrite action. When service is specified,
        # expectedOutputUrl`s scheme is ignored.
        # For rules with urlRedirect, the test passes only ifexpectedOutputUrl matches
        # the URL in the load balancer's
        # redirect response. If urlRedirect specifieshttps_redirect, the test passes
        # only if the scheme inexpectedOutputUrl is also set to HTTPS.
        # If urlRedirect specifies strip_query, the test
        # passes only if expectedOutputUrl does not contain any query
        # parameters.
        # expectedOutputUrl is optional whenservice is specified.
        # Corresponds to the JSON property `expectedOutputUrl`
        # @return [String]
        attr_accessor :expected_output_url
      
        # For rules with urlRedirect, the test passes only
        # ifexpectedRedirectResponseCode matches the HTTP status code in
        # load balancer's redirect response.
        # expectedRedirectResponseCode cannot be set whenservice is set.
        # Corresponds to the JSON property `expectedRedirectResponseCode`
        # @return [Fixnum]
        attr_accessor :expected_redirect_response_code
      
        # HTTP headers for this request. If headers contains
        # a host header, then host must also match the header value.
        # Corresponds to the JSON property `headers`
        # @return [Array<Google::Apis::ComputeV1::UrlMapTestHeader>]
        attr_accessor :headers
      
        # Host portion of the URL. If headers contains a host header,
        # then host must also match the header value.
        # Corresponds to the JSON property `host`
        # @return [String]
        attr_accessor :host
      
        # Path portion of the URL.
        # Corresponds to the JSON property `path`
        # @return [String]
        attr_accessor :path
      
        # Expected BackendService or BackendBucket resource
        # the given URL should be mapped to.
        # The service field cannot
        # be set if expectedRedirectResponseCode is set.
        # 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)
          @description = args[:description] if args.key?(:description)
          @expected_output_url = args[:expected_output_url] if args.key?(:expected_output_url)
          @expected_redirect_response_code = args[:expected_redirect_response_code] if args.key?(:expected_redirect_response_code)
          @headers = args[:headers] if args.key?(:headers)
          @host = args[:host] if args.key?(:host)
          @path = args[:path] if args.key?(:path)
          @service = args[:service] if args.key?(:service)
        end
      end
      
      # HTTP headers used in UrlMapTests.
      class UrlMapTestHeader
        include Google::Apis::Core::Hashable
      
        # Header name.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Header value.
        # Corresponds to the JSON property `value`
        # @return [String]
        attr_accessor :value
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @name = args[:name] if args.key?(:name)
          @value = args[:value] if args.key?(:value)
        end
      end
      
      # Message representing the validation result for a UrlMap.
      class UrlMapValidationResult
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `loadErrors`
        # @return [Array<String>]
        attr_accessor :load_errors
      
        # Whether the given UrlMap can be successfully loaded.
        # If false, 'loadErrors' indicates the reasons.
        # Corresponds to the JSON property `loadSucceeded`
        # @return [Boolean]
        attr_accessor :load_succeeded
        alias_method :load_succeeded?, :load_succeeded
      
        # 
        # Corresponds to the JSON property `testFailures`
        # @return [Array<Google::Apis::ComputeV1::TestFailure>]
        attr_accessor :test_failures
      
        # If successfully loaded, this field indicates whether the test passed.
        # If false, 'testFailures's indicate the reason of failure.
        # Corresponds to the JSON property `testPassed`
        # @return [Boolean]
        attr_accessor :test_passed
        alias_method :test_passed?, :test_passed
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @load_errors = args[:load_errors] if args.key?(:load_errors)
          @load_succeeded = args[:load_succeeded] if args.key?(:load_succeeded)
          @test_failures = args[:test_failures] if args.key?(:test_failures)
          @test_passed = args[:test_passed] if args.key?(:test_passed)
        end
      end
      
      # 
      class UrlMapsAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of UrlMapsScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::UrlMapsScopedList>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::UrlMapsAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::UrlMapsAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class UrlMapsScopedList
        include Google::Apis::Core::Hashable
      
        # A list of UrlMaps contained in this scope.
        # Corresponds to the JSON property `urlMaps`
        # @return [Array<Google::Apis::ComputeV1::UrlMap>]
        attr_accessor :url_maps
      
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::UrlMapsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @url_maps = args[:url_maps] if args.key?(:url_maps)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of
        # backend services when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::UrlMapsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class ValidateUrlMapsRequest
        include Google::Apis::Core::Hashable
      
        # Specifies the load balancer type(s) this validation request is for.
        # UseEXTERNAL_MANAGED for global external Application Load
        # Balancers and regional external Application Load Balancers.
        # Use EXTERNAL for classic Application Load Balancers.
        # Use INTERNAL_MANAGED for internal Application Load Balancers. For more
        # information, refer to Choosing
        # a load balancer.
        # If unspecified, the load balancing scheme will be inferred from the backend
        # service resources this URL map references. If that can not be inferred (for
        # example, this URL map only references backend buckets, or this Url map is
        # for rewrites and redirects only and doesn't reference any backends),EXTERNAL
        # will be used as the default type.
        # If specified, the scheme(s) must not conflict with the load balancing
        # scheme of the backend service resources this Url map references.
        # Corresponds to the JSON property `loadBalancingSchemes`
        # @return [Array<String>]
        attr_accessor :load_balancing_schemes
      
        # Represents a URL Map resource.
        # Compute Engine has two URL Map resources:
        # * [Global](/compute/docs/reference/rest/v1/urlMaps)
        # * [Regional](/compute/docs/reference/rest/v1/regionUrlMaps)
        # A URL map resource is a component of certain types of cloud load balancers
        # and Traffic Director:
        # * urlMaps are used by global external Application Load
        # Balancers, classic Application Load Balancers, and cross-region internal
        # Application Load Balancers.
        # * regionUrlMaps are used by internal Application Load Balancers,
        # regional external Application Load Balancers and regional internal
        # Application Load Balancers.
        # For a list of supported URL map features by the load balancer type, see the
        # Load balancing features: Routing and traffic management table.
        # For a list of supported URL map features for Traffic Director, see the
        # Traffic Director features: Routing and traffic management table.
        # This resource defines mappings from hostnames and URL paths to either a
        # backend service or a backend bucket.
        # To use the global urlMaps resource, the backend service must
        # have a loadBalancingScheme of either EXTERNAL,EXTERNAL_MANAGED, or
        # INTERNAL_SELF_MANAGED. To use
        # the regionUrlMaps resource, the backend service must have aloadBalancingScheme
        # of INTERNAL_MANAGED. For more
        # information, read URL
        # Map Concepts.
        # Corresponds to the JSON property `resource`
        # @return [Google::Apis::ComputeV1::UrlMap]
        attr_accessor :resource
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @load_balancing_schemes = args[:load_balancing_schemes] if args.key?(:load_balancing_schemes)
          @resource = args[:resource] if args.key?(:resource)
        end
      end
      
      # 
      class ValidateUrlMapsResponse
        include Google::Apis::Core::Hashable
      
        # Message representing the validation result for a UrlMap.
        # Corresponds to the JSON property `result`
        # @return [Google::Apis::ComputeV1::UrlMapValidationResult]
        attr_accessor :result
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @result = args[:result] if args.key?(:result)
        end
      end
      
      # The spec for modifying the path before sending the request to the matched
      # backend service.
      class UrlRewrite
        include Google::Apis::Core::Hashable
      
        # Before forwarding the request to the selected service, the request's
        # host header is replaced with contents of hostRewrite.
        # The value must be from 1 to 255 characters.
        # Corresponds to the JSON property `hostRewrite`
        # @return [String]
        attr_accessor :host_rewrite
      
        # Before forwarding the request to the selected backend service, the
        # matching portion of the request's path is replaced bypathPrefixRewrite.
        # The value must be from 1 to 1024 characters.
        # Corresponds to the JSON property `pathPrefixRewrite`
        # @return [String]
        attr_accessor :path_prefix_rewrite
      
        # If specified, the pattern rewrites the URL path (based on the :path
        # header) using the HTTP template syntax.
        # A corresponding
        # path_template_match must be specified. Any template variables must exist in
        # the path_template_match field.
        # 
        # 
        # - -At least one variable must be specified in the path_template_match
        # field
        # - You can omit variables from the rewritten URL
        # - The * and ** operators cannot be matched
        # unless they have a corresponding variable name - e.g.
        # `format=*` or `var=**`.
        # For example, a path_template_match of /static/`format=**`
        # could be rewritten as /static/content/`format` to prefix/content to the URL.
        # Variables can also be re-ordered in a
        # rewrite, so that /`country`/`format`/`suffix=**` can be
        # rewritten as /content/`format`/`country`/`suffix`.
        # At least
        # one non-empty routeRules[].matchRules[].path_template_match is
        # required.
        # Only one of path_prefix_rewrite orpath_template_rewrite may be specified.
        # Corresponds to the JSON property `pathTemplateRewrite`
        # @return [String]
        attr_accessor :path_template_rewrite
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @host_rewrite = args[:host_rewrite] if args.key?(:host_rewrite)
          @path_prefix_rewrite = args[:path_prefix_rewrite] if args.key?(:path_prefix_rewrite)
          @path_template_rewrite = args[:path_template_rewrite] if args.key?(:path_template_rewrite)
        end
      end
      
      # Subnetwork which the current user has compute.subnetworks.use permission on.
      class UsableSubnetwork
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] The external IPv6 address range that is assigned to
        # this
        # subnetwork.
        # Corresponds to the JSON property `externalIpv6Prefix`
        # @return [String]
        attr_accessor :external_ipv6_prefix
      
        # Output only. [Output Only] The internal IPv6 address range that is assigned to
        # this
        # subnetwork.
        # Corresponds to the JSON property `internalIpv6Prefix`
        # @return [String]
        attr_accessor :internal_ipv6_prefix
      
        # The range of internal addresses that are owned by this subnetwork.
        # Corresponds to the JSON property `ipCidrRange`
        # @return [String]
        attr_accessor :ip_cidr_range
      
        # The access type of IPv6 address this subnet holds. It's immutable and can
        # only be specified during creation or the first time the subnet is updated
        # into IPV4_IPV6 dual stack.
        # Corresponds to the JSON property `ipv6AccessType`
        # @return [String]
        attr_accessor :ipv6_access_type
      
        # Network URL.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # 
        # Corresponds to the JSON property `purpose`
        # @return [String]
        attr_accessor :purpose
      
        # The role of subnetwork. Currently, this field is only used when
        # purpose is set to GLOBAL_MANAGED_PROXY orREGIONAL_MANAGED_PROXY. The value can
        # be set toACTIVE or BACKUP. An ACTIVE
        # subnetwork is one that is currently being used for Envoy-based load
        # balancers in a region. A BACKUP subnetwork is one that is
        # ready to be promoted to ACTIVE or is currently draining.
        # This field can be updated with a patch request.
        # Corresponds to the JSON property `role`
        # @return [String]
        attr_accessor :role
      
        # Secondary IP ranges.
        # Corresponds to the JSON property `secondaryIpRanges`
        # @return [Array<Google::Apis::ComputeV1::UsableSubnetworkSecondaryRange>]
        attr_accessor :secondary_ip_ranges
      
        # The stack type for the subnet. If set to IPV4_ONLY, new VMs
        # in the subnet are assigned IPv4 addresses only. If set toIPV4_IPV6, new VMs in
        # the subnet can be assigned both IPv4 and
        # IPv6 addresses. If not specified, IPV4_ONLY is used.
        # This field can be both set at resource creation time and updated usingpatch.
        # Corresponds to the JSON property `stackType`
        # @return [String]
        attr_accessor :stack_type
      
        # Subnetwork URL.
        # Corresponds to the JSON property `subnetwork`
        # @return [String]
        attr_accessor :subnetwork
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @external_ipv6_prefix = args[:external_ipv6_prefix] if args.key?(:external_ipv6_prefix)
          @internal_ipv6_prefix = args[:internal_ipv6_prefix] if args.key?(:internal_ipv6_prefix)
          @ip_cidr_range = args[:ip_cidr_range] if args.key?(:ip_cidr_range)
          @ipv6_access_type = args[:ipv6_access_type] if args.key?(:ipv6_access_type)
          @network = args[:network] if args.key?(:network)
          @purpose = args[:purpose] if args.key?(:purpose)
          @role = args[:role] if args.key?(:role)
          @secondary_ip_ranges = args[:secondary_ip_ranges] if args.key?(:secondary_ip_ranges)
          @stack_type = args[:stack_type] if args.key?(:stack_type)
          @subnetwork = args[:subnetwork] if args.key?(:subnetwork)
        end
      end
      
      # Secondary IP range of a usable subnetwork.
      class UsableSubnetworkSecondaryRange
        include Google::Apis::Core::Hashable
      
        # The range of IP addresses belonging to this subnetwork secondary range.
        # Can be Ipv4 or Ipv6 range.
        # Corresponds to the JSON property `ipCidrRange`
        # @return [String]
        attr_accessor :ip_cidr_range
      
        # The name associated with this subnetwork secondary range, used when adding
        # an alias IP range to a VM instance.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # The name must be unique within the subnetwork.
        # Corresponds to the JSON property `rangeName`
        # @return [String]
        attr_accessor :range_name
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @ip_cidr_range = args[:ip_cidr_range] if args.key?(:ip_cidr_range)
          @range_name = args[:range_name] if args.key?(:range_name)
        end
      end
      
      # 
      class UsableSubnetworksAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # [Output] A list of usable subnetwork URLs.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::UsableSubnetwork>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # usableSubnetworksAggregatedList for aggregated lists
        # of usable subnetworks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # In special cases listUsable may return 0 subnetworks andnextPageToken which
        # still should be used to get the
        # next page of results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Informational warning messages for failures
        # encountered from
        # scopes.
        # Corresponds to the JSON property `scopedWarnings`
        # @return [Array<Google::Apis::ComputeV1::SubnetworksScopedWarning>]
        attr_accessor :scoped_warnings
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::UsableSubnetworksAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @scoped_warnings = args[:scoped_warnings] if args.key?(:scoped_warnings)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::UsableSubnetworksAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # The location in Cloud Storage and naming method of the daily usage
      # report. Contains bucket_name and report_name prefix.
      class UsageExportLocation
        include Google::Apis::Core::Hashable
      
        # The name of an existing bucket in Cloud Storage where the usage report
        # object is stored. The Google Service Account is granted write access to
        # this bucket. This can either be the bucket name by itself, such asexample-
        # bucket, or the bucket name with gs://
        # or https://storage.googleapis.com/ in front of it, such
        # as gs://example-bucket.
        # Corresponds to the JSON property `bucketName`
        # @return [String]
        attr_accessor :bucket_name
      
        # An optional prefix for the name of the usage report object stored inbucketName.
        # If not supplied, defaults tousage_gce. The report is stored as a CSV file
        # namedreport_name_prefix_gce_YYYYMMDD.csv whereYYYYMMDD is the day of the usage
        # according to Pacific Time.
        # If you supply a prefix, it should conform to Cloud Storageobject naming
        # conventions.
        # Corresponds to the JSON property `reportNamePrefix`
        # @return [String]
        attr_accessor :report_name_prefix
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bucket_name = args[:bucket_name] if args.key?(:bucket_name)
          @report_name_prefix = args[:report_name_prefix] if args.key?(:report_name_prefix)
        end
      end
      
      # Contain information of Nat mapping for a VM endpoint (i.e., NIC).
      class VmEndpointNatMappings
        include Google::Apis::Core::Hashable
      
        # Output only. Name of the VM instance which the endpoint belongs to
        # Corresponds to the JSON property `instanceName`
        # @return [String]
        attr_accessor :instance_name
      
        # 
        # Corresponds to the JSON property `interfaceNatMappings`
        # @return [Array<Google::Apis::ComputeV1::VmEndpointNatMappingsInterfaceNatMappings>]
        attr_accessor :interface_nat_mappings
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @instance_name = args[:instance_name] if args.key?(:instance_name)
          @interface_nat_mappings = args[:interface_nat_mappings] if args.key?(:interface_nat_mappings)
        end
      end
      
      # Contain information of Nat mapping for an interface of this endpoint.
      class VmEndpointNatMappingsInterfaceNatMappings
        include Google::Apis::Core::Hashable
      
        # Output only. List of all drain IP:port-range mappings assigned to this
        # interface.
        # These ranges are inclusive, that is, both the first and the last
        # ports can be used for NAT. Example: ["2.2.2.2:12345-12355",
        # "1.1.1.1:2234-2234"].
        # Corresponds to the JSON property `drainNatIpPortRanges`
        # @return [Array<String>]
        attr_accessor :drain_nat_ip_port_ranges
      
        # Output only. A list of all IP:port-range mappings assigned to this interface.
        # These ranges are inclusive, that is, both the first and the last
        # ports can be used for NAT. Example: ["2.2.2.2:12345-12355",
        # "1.1.1.1:2234-2234"].
        # Corresponds to the JSON property `natIpPortRanges`
        # @return [Array<String>]
        attr_accessor :nat_ip_port_ranges
      
        # Output only. Total number of drain ports across all NAT IPs allocated to this
        # interface. It equals to the aggregated port number in the field
        # drain_nat_ip_port_ranges.
        # Corresponds to the JSON property `numTotalDrainNatPorts`
        # @return [Fixnum]
        attr_accessor :num_total_drain_nat_ports
      
        # Output only. Total number of ports across all NAT IPs allocated to this
        # interface.
        # It equals to the aggregated port number in the field nat_ip_port_ranges.
        # Corresponds to the JSON property `numTotalNatPorts`
        # @return [Fixnum]
        attr_accessor :num_total_nat_ports
      
        # Output only. Information about mappings provided by rules in this NAT.
        # Corresponds to the JSON property `ruleMappings`
        # @return [Array<Google::Apis::ComputeV1::VmEndpointNatMappingsInterfaceNatMappingsNatRuleMappings>]
        attr_accessor :rule_mappings
      
        # Output only. Alias IP range for this interface endpoint.
        # It will be a private (RFC 1918) IP range.
        # Examples: "10.33.4.55/32", or "192.168.5.0/24".
        # Corresponds to the JSON property `sourceAliasIpRange`
        # @return [String]
        attr_accessor :source_alias_ip_range
      
        # Output only. Primary IP of the VM for this NIC.
        # Corresponds to the JSON property `sourceVirtualIp`
        # @return [String]
        attr_accessor :source_virtual_ip
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @drain_nat_ip_port_ranges = args[:drain_nat_ip_port_ranges] if args.key?(:drain_nat_ip_port_ranges)
          @nat_ip_port_ranges = args[:nat_ip_port_ranges] if args.key?(:nat_ip_port_ranges)
          @num_total_drain_nat_ports = args[:num_total_drain_nat_ports] if args.key?(:num_total_drain_nat_ports)
          @num_total_nat_ports = args[:num_total_nat_ports] if args.key?(:num_total_nat_ports)
          @rule_mappings = args[:rule_mappings] if args.key?(:rule_mappings)
          @source_alias_ip_range = args[:source_alias_ip_range] if args.key?(:source_alias_ip_range)
          @source_virtual_ip = args[:source_virtual_ip] if args.key?(:source_virtual_ip)
        end
      end
      
      # Contains information of NAT Mappings provided by a NAT Rule.
      class VmEndpointNatMappingsInterfaceNatMappingsNatRuleMappings
        include Google::Apis::Core::Hashable
      
        # Output only. List of all drain IP:port-range mappings assigned to this
        # interface
        # by this rule.
        # These ranges are inclusive, that is, both the first and the last
        # ports can be used for NAT. Example: ["2.2.2.2:12345-12355",
        # "1.1.1.1:2234-2234"].
        # Corresponds to the JSON property `drainNatIpPortRanges`
        # @return [Array<String>]
        attr_accessor :drain_nat_ip_port_ranges
      
        # Output only. A list of all IP:port-range mappings assigned to this interface
        # by this
        # rule.
        # These ranges are inclusive, that is, both the first and the last
        # ports can be used for NAT. Example: ["2.2.2.2:12345-12355",
        # "1.1.1.1:2234-2234"].
        # Corresponds to the JSON property `natIpPortRanges`
        # @return [Array<String>]
        attr_accessor :nat_ip_port_ranges
      
        # Output only. Total number of drain ports across all NAT IPs allocated to this
        # interface by this rule.
        # It equals the aggregated port number in the field
        # drain_nat_ip_port_ranges.
        # Corresponds to the JSON property `numTotalDrainNatPorts`
        # @return [Fixnum]
        attr_accessor :num_total_drain_nat_ports
      
        # Output only. Total number of ports across all NAT IPs allocated to this
        # interface
        # by this rule.
        # It equals the aggregated port number in the field nat_ip_port_ranges.
        # Corresponds to the JSON property `numTotalNatPorts`
        # @return [Fixnum]
        attr_accessor :num_total_nat_ports
      
        # Output only. Rule number of the NAT Rule.
        # Corresponds to the JSON property `ruleNumber`
        # @return [Fixnum]
        attr_accessor :rule_number
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @drain_nat_ip_port_ranges = args[:drain_nat_ip_port_ranges] if args.key?(:drain_nat_ip_port_ranges)
          @nat_ip_port_ranges = args[:nat_ip_port_ranges] if args.key?(:nat_ip_port_ranges)
          @num_total_drain_nat_ports = args[:num_total_drain_nat_ports] if args.key?(:num_total_drain_nat_ports)
          @num_total_nat_ports = args[:num_total_nat_ports] if args.key?(:num_total_nat_ports)
          @rule_number = args[:rule_number] if args.key?(:rule_number)
        end
      end
      
      # Contains a list of VmEndpointNatMappings.
      class VmEndpointNatMappingsList
        include Google::Apis::Core::Hashable
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # Output only. [Output Only] Type of resource. Alwayscompute#
        # vmEndpointNatMappingsList for lists of Nat mappings of
        # VM endpoints.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] A list of Nat mapping information of VM endpoints.
        # Corresponds to the JSON property `result`
        # @return [Array<Google::Apis::ComputeV1::VmEndpointNatMappings>]
        attr_accessor :result
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::VmEndpointNatMappingsList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @result = args[:result] if args.key?(:result)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::VmEndpointNatMappingsList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a HA VPN gateway.
      # HA VPN is a high-availability (HA) Cloud VPN solution that lets you securely
      # connect your on-premises network to your Google Cloud Virtual Private Cloud
      # network through an IPsec VPN connection in a single region.
      # For more information about Cloud HA VPN solutions, see
      # Cloud VPN topologies .
      class VpnGateway
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # The IP family of the gateway IPs for the HA-VPN gateway interfaces. If not
        # specified, IPV4 will be used.
        # Corresponds to the JSON property `gatewayIpVersion`
        # @return [String]
        attr_accessor :gateway_ip_version
      
        # Output only. [Output Only] The unique identifier for the resource. This
        # identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of resource. Always compute#vpnGateway for
        # VPN gateways.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this VpnGateway, which
        # is essentially a hash of the labels set used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a VpnGateway.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels for this resource. These can only be added or modified by thesetLabels
        # method. Each label key/value pair must comply withRFC1035.
        # Label values may be empty.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # URL of the network to which this VPN gateway is attached. Provided by the
        # client when the VPN gateway is created.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # Output only. [Output Only] URL of the region where the VPN gateway resides.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # The stack type for this VPN gateway to identify the IP protocols that are
        # enabled. Possible values are: IPV4_ONLY,IPV4_IPV6, IPV6_ONLY. If not specified,
        # IPV4_ONLY is used if the gateway IP version isIPV4, or IPV4_IPV6 if the
        # gateway IP version isIPV6.
        # Corresponds to the JSON property `stackType`
        # @return [String]
        attr_accessor :stack_type
      
        # The list of VPN interfaces associated with this VPN gateway.
        # Corresponds to the JSON property `vpnInterfaces`
        # @return [Array<Google::Apis::ComputeV1::VpnGatewayVpnGatewayInterface>]
        attr_accessor :vpn_interfaces
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @gateway_ip_version = args[:gateway_ip_version] if args.key?(:gateway_ip_version)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @name = args[:name] if args.key?(:name)
          @network = args[:network] if args.key?(:network)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @stack_type = args[:stack_type] if args.key?(:stack_type)
          @vpn_interfaces = args[:vpn_interfaces] if args.key?(:vpn_interfaces)
        end
      end
      
      # 
      class VpnGatewayAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of VpnGateway resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::VpnGatewaysScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#vpnGateway for
        # VPN gateways.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::VpnGatewayAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::VpnGatewayAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Contains a list of VpnGateway resources.
      class VpnGatewayList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of VpnGateway resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::VpnGateway>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#vpnGateway for
        # VPN gateways.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::VpnGatewayList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::VpnGatewayList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class VpnGatewayStatus
        include Google::Apis::Core::Hashable
      
        # Output only. List of VPN connection for this VpnGateway.
        # Corresponds to the JSON property `vpnConnections`
        # @return [Array<Google::Apis::ComputeV1::VpnGatewayStatusVpnConnection>]
        attr_accessor :vpn_connections
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @vpn_connections = args[:vpn_connections] if args.key?(:vpn_connections)
        end
      end
      
      # Describes the high availability requirement state for the VPN connection
      # between this Cloud VPN gateway and a peer gateway.
      class VpnGatewayStatusHighAvailabilityRequirementState
        include Google::Apis::Core::Hashable
      
        # Indicates the high availability requirement state for the VPN connection.
        # Valid values are CONNECTION_REDUNDANCY_MET,CONNECTION_REDUNDANCY_NOT_MET.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # Indicates the reason why the VPN connection does not meet the high
        # availability redundancy criteria/requirement.
        # Valid values is INCOMPLETE_TUNNELS_COVERAGE.
        # Corresponds to the JSON property `unsatisfiedReason`
        # @return [String]
        attr_accessor :unsatisfied_reason
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @state = args[:state] if args.key?(:state)
          @unsatisfied_reason = args[:unsatisfied_reason] if args.key?(:unsatisfied_reason)
        end
      end
      
      # Contains some information about a VPN tunnel.
      class VpnGatewayStatusTunnel
        include Google::Apis::Core::Hashable
      
        # Output only. The VPN gateway interface this VPN tunnel is associated with.
        # Corresponds to the JSON property `localGatewayInterface`
        # @return [Fixnum]
        attr_accessor :local_gateway_interface
      
        # Output only. The peer gateway interface this VPN tunnel is connected to, the
        # peer
        # gateway could either be an external VPN gateway or a Google Cloud
        # VPN gateway.
        # Corresponds to the JSON property `peerGatewayInterface`
        # @return [Fixnum]
        attr_accessor :peer_gateway_interface
      
        # Output only. URL reference to the VPN tunnel.
        # Corresponds to the JSON property `tunnelUrl`
        # @return [String]
        attr_accessor :tunnel_url
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @local_gateway_interface = args[:local_gateway_interface] if args.key?(:local_gateway_interface)
          @peer_gateway_interface = args[:peer_gateway_interface] if args.key?(:peer_gateway_interface)
          @tunnel_url = args[:tunnel_url] if args.key?(:tunnel_url)
        end
      end
      
      # A VPN connection contains all VPN tunnels connected from this VpnGateway
      # to the same peer gateway. The peer gateway could either be an external VPN
      # gateway or a Google Cloud VPN gateway.
      class VpnGatewayStatusVpnConnection
        include Google::Apis::Core::Hashable
      
        # Output only. URL reference to the peer external VPN gateways to which the VPN
        # tunnels
        # in this VPN connection are connected.
        # This field is mutually exclusive with peer_gcp_gateway.
        # Corresponds to the JSON property `peerExternalGateway`
        # @return [String]
        attr_accessor :peer_external_gateway
      
        # Output only. URL reference to the peer side VPN gateways to which the VPN
        # tunnels in
        # this VPN connection are connected.
        # This field is mutually exclusive with peer_gcp_gateway.
        # Corresponds to the JSON property `peerGcpGateway`
        # @return [String]
        attr_accessor :peer_gcp_gateway
      
        # Describes the high availability requirement state for the VPN connection
        # between this Cloud VPN gateway and a peer gateway.
        # Corresponds to the JSON property `state`
        # @return [Google::Apis::ComputeV1::VpnGatewayStatusHighAvailabilityRequirementState]
        attr_accessor :state
      
        # List of VPN tunnels that are in this VPN connection.
        # Corresponds to the JSON property `tunnels`
        # @return [Array<Google::Apis::ComputeV1::VpnGatewayStatusTunnel>]
        attr_accessor :tunnels
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @peer_external_gateway = args[:peer_external_gateway] if args.key?(:peer_external_gateway)
          @peer_gcp_gateway = args[:peer_gcp_gateway] if args.key?(:peer_gcp_gateway)
          @state = args[:state] if args.key?(:state)
          @tunnels = args[:tunnels] if args.key?(:tunnels)
        end
      end
      
      # A VPN gateway interface.
      class VpnGatewayVpnGatewayInterface
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Numeric identifier for this VPN interface
        # associated with
        # the VPN gateway.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # URL of the VLAN attachment (interconnectAttachment) resource for this
        # VPN gateway interface. When the value of this field is present, the VPN
        # gateway is used for HA VPN over Cloud Interconnect; all egress
        # or ingress traffic for this VPN gateway interface goes through the
        # specified VLAN attachment resource.
        # Corresponds to the JSON property `interconnectAttachment`
        # @return [String]
        attr_accessor :interconnect_attachment
      
        # Output only. [Output Only] IP address for this VPN interface associated with
        # the VPN
        # gateway.
        # The IP address could be either a regional external IP address or
        # a regional internal IP address. The two IP addresses for a VPN gateway
        # must be all regional external or regional internal IP addresses. There
        # cannot be a mix of regional external IP addresses and regional internal
        # IP addresses. For HA VPN over Cloud Interconnect, the IP addresses
        # for both interfaces could either be regional internal IP addresses or
        # regional external IP addresses. For regular (non HA VPN over Cloud
        # Interconnect) HA VPN tunnels, the IP address must be a regional external
        # IP address.
        # Corresponds to the JSON property `ipAddress`
        # @return [String]
        attr_accessor :ip_address
      
        # Output only. [Output Only] IPv6 address for this VPN interface associated with
        # the VPN
        # gateway.
        # The IPv6 address must be a regional external IPv6 address. The format is
        # RFC 5952 format (e.g. 2001:db8::2d9:51:0:0).
        # Corresponds to the JSON property `ipv6Address`
        # @return [String]
        attr_accessor :ipv6_address
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @interconnect_attachment = args[:interconnect_attachment] if args.key?(:interconnect_attachment)
          @ip_address = args[:ip_address] if args.key?(:ip_address)
          @ipv6_address = args[:ipv6_address] if args.key?(:ipv6_address)
        end
      end
      
      # 
      class VpnGatewaysGetStatusResponse
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `result`
        # @return [Google::Apis::ComputeV1::VpnGatewayStatus]
        attr_accessor :result
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @result = args[:result] if args.key?(:result)
        end
      end
      
      # 
      class VpnGatewaysScopedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] A list of VPN gateways contained in this scope.
        # Corresponds to the JSON property `vpnGateways`
        # @return [Array<Google::Apis::ComputeV1::VpnGateway>]
        attr_accessor :vpn_gateways
      
        # [Output Only] Informational warning which replaces the list of addresses
        # when the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::VpnGatewaysScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @vpn_gateways = args[:vpn_gateways] if args.key?(:vpn_gateways)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning which replaces the list of addresses
        # when the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::VpnGatewaysScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Represents a Cloud VPN Tunnel resource.
      # For more information about VPN, read the
      # the Cloud VPN Overview.
      class VpnTunnel
        include Google::Apis::Core::Hashable
      
        # User specified list of ciphers to use for the phase 1 and phase 2 of the
        # IKE protocol.
        # Corresponds to the JSON property `cipherSuite`
        # @return [Google::Apis::ComputeV1::VpnTunnelCipherSuite]
        attr_accessor :cipher_suite
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of this resource. Provide this property when you
        # create the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] Detailed status message for the VPN tunnel.
        # Corresponds to the JSON property `detailedStatus`
        # @return [String]
        attr_accessor :detailed_status
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # IKE protocol version to use when establishing the VPN tunnel with the peer
        # VPN gateway. Acceptable IKE versions are 1 or 2.
        # The default version is 2.
        # Corresponds to the JSON property `ikeVersion`
        # @return [Fixnum]
        attr_accessor :ike_version
      
        # Output only. [Output Only] Type of resource. Always compute#vpnTunnel for
        # VPN tunnels.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # A fingerprint for the labels being applied to this VpnTunnel, which is
        # essentially a hash of the labels set used for optimistic locking. The
        # fingerprint is initially generated by Compute Engine and changes after
        # every request to modify or update labels. You must always provide an
        # up-to-date fingerprint hash in order to update or change labels,
        # otherwise the request will fail with error412 conditionNotMet.
        # To see the latest fingerprint, make a get() request to
        # retrieve a VpnTunnel.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # Labels for this resource. These can only be added or modified by thesetLabels
        # method. Each label key/value pair must comply withRFC1035.
        # Label values may be empty.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        # Local traffic selector to use when establishing the VPN tunnel with the
        # peer VPN gateway. The value should be a CIDR formatted string, for
        # example: 192.168.0.0/16. The ranges must be disjoint.
        # Only IPv4 is supported for Classic VPN tunnels. This field is output only
        # for HA VPN tunnels.
        # Corresponds to the JSON property `localTrafficSelector`
        # @return [Array<String>]
        attr_accessor :local_traffic_selector
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # URL of the peer side external VPN gateway to which this VPN tunnel is
        # connected.
        # Provided by the client when the VPN tunnel is created.
        # This field is exclusive with the field peerGcpGateway.
        # Corresponds to the JSON property `peerExternalGateway`
        # @return [String]
        attr_accessor :peer_external_gateway
      
        # The interface ID of the external VPN gateway to which this VPN tunnel is
        # connected. Provided by the client when the VPN tunnel is created.
        # Possible values are: `0`, `1`, `2`, `3`. The number of IDs in use
        # depends on the external VPN gateway redundancy type.
        # Corresponds to the JSON property `peerExternalGatewayInterface`
        # @return [Fixnum]
        attr_accessor :peer_external_gateway_interface
      
        # URL of the peer side HA VPN gateway to which this VPN tunnel
        # is connected. Provided by the client when the VPN tunnel is created.
        # This field can be used when creating highly available VPN from VPC network
        # to VPC network, the field is exclusive with the field peerExternalGateway.
        # If provided, the VPN tunnel will automatically use the same
        # vpnGatewayInterface ID in the peer Google Cloud VPN gateway.
        # Corresponds to the JSON property `peerGcpGateway`
        # @return [String]
        attr_accessor :peer_gcp_gateway
      
        # IP address of the peer VPN gateway. Only IPv4 is supported. This field can
        # be set only for Classic VPN tunnels.
        # Corresponds to the JSON property `peerIp`
        # @return [String]
        attr_accessor :peer_ip
      
        # [Output Only] URL of the region where the VPN tunnel resides.
        # You must specify this field as part of the HTTP request URL. It is
        # not settable as a field in the request body.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # Remote traffic selectors to use when establishing the VPN tunnel with
        # the peer VPN gateway. The value should be a CIDR formatted string,
        # for example: 192.168.0.0/16. The ranges should be disjoint. Only IPv4 is
        # supported for Classic VPN tunnels. This field is output only for HA VPN
        # tunnels.
        # Corresponds to the JSON property `remoteTrafficSelector`
        # @return [Array<String>]
        attr_accessor :remote_traffic_selector
      
        # URL of the router resource to be used for dynamic routing.
        # Corresponds to the JSON property `router`
        # @return [String]
        attr_accessor :router
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Shared secret used to set the secure session between the Cloud VPN gateway
        # and the peer VPN gateway.
        # Corresponds to the JSON property `sharedSecret`
        # @return [String]
        attr_accessor :shared_secret
      
        # Hash of the shared secret.
        # Corresponds to the JSON property `sharedSecretHash`
        # @return [String]
        attr_accessor :shared_secret_hash
      
        # [Output Only] The status of the VPN tunnel, which can be one of the
        # following:
        # 
        # - PROVISIONING: Resource is being allocated for the VPN tunnel.
        # - WAITING_FOR_FULL_CONFIG: Waiting to receive all VPN-related configs
        # from
        # the user. Network, TargetVpnGateway, VpnTunnel, ForwardingRule, and Route
        # resources are needed to setup the VPN tunnel.
        # - FIRST_HANDSHAKE: Successful first handshake with the peer VPN.
        # - ESTABLISHED: Secure session is successfully established with the peer
        # VPN.
        # - NETWORK_ERROR: Deprecated, replaced by
        # NO_INCOMING_PACKETS
        # - AUTHORIZATION_ERROR: Auth error (for example,
        # bad shared secret).
        # - NEGOTIATION_FAILURE: Handshake failed.
        # - DEPROVISIONING: Resources are being deallocated for the VPN
        # tunnel.
        # - FAILED: Tunnel creation has failed and the tunnel is not
        # ready to be used.
        # - NO_INCOMING_PACKETS: No incoming packets from
        # peer.
        # - REJECTED: Tunnel configuration was rejected, can be result
        # of being denied access.
        # - ALLOCATING_RESOURCES: Cloud VPN is in the
        # process of allocating all required resources.
        # - STOPPED: Tunnel is stopped due to its Forwarding Rules being deleted
        # for Classic VPN tunnels or the project is in frozen state.
        # - PEER_IDENTITY_MISMATCH: Peer identity does not match peer IP,
        # probably behind NAT.
        # - TS_NARROWING_NOT_ALLOWED: Traffic selector
        # narrowing not allowed for an HA-VPN tunnel.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # URL of the Target VPN gateway with which this VPN tunnel is associated.
        # Provided by the client when the VPN tunnel is created.
        # This field can be set only for Classic VPN tunnels.
        # Corresponds to the JSON property `targetVpnGateway`
        # @return [String]
        attr_accessor :target_vpn_gateway
      
        # URL of the VPN gateway with which this VPN tunnel is associated.
        # Provided by the client when the VPN tunnel is created. This must be
        # used (instead of target_vpn_gateway) if a High Availability VPN gateway
        # resource is created.
        # Corresponds to the JSON property `vpnGateway`
        # @return [String]
        attr_accessor :vpn_gateway
      
        # The interface ID of the VPN gateway with which this VPN tunnel is
        # associated.
        # Possible values are: `0`, `1`.
        # Corresponds to the JSON property `vpnGatewayInterface`
        # @return [Fixnum]
        attr_accessor :vpn_gateway_interface
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @cipher_suite = args[:cipher_suite] if args.key?(:cipher_suite)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @detailed_status = args[:detailed_status] if args.key?(:detailed_status)
          @id = args[:id] if args.key?(:id)
          @ike_version = args[:ike_version] if args.key?(:ike_version)
          @kind = args[:kind] if args.key?(:kind)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
          @local_traffic_selector = args[:local_traffic_selector] if args.key?(:local_traffic_selector)
          @name = args[:name] if args.key?(:name)
          @peer_external_gateway = args[:peer_external_gateway] if args.key?(:peer_external_gateway)
          @peer_external_gateway_interface = args[:peer_external_gateway_interface] if args.key?(:peer_external_gateway_interface)
          @peer_gcp_gateway = args[:peer_gcp_gateway] if args.key?(:peer_gcp_gateway)
          @peer_ip = args[:peer_ip] if args.key?(:peer_ip)
          @region = args[:region] if args.key?(:region)
          @remote_traffic_selector = args[:remote_traffic_selector] if args.key?(:remote_traffic_selector)
          @router = args[:router] if args.key?(:router)
          @self_link = args[:self_link] if args.key?(:self_link)
          @shared_secret = args[:shared_secret] if args.key?(:shared_secret)
          @shared_secret_hash = args[:shared_secret_hash] if args.key?(:shared_secret_hash)
          @status = args[:status] if args.key?(:status)
          @target_vpn_gateway = args[:target_vpn_gateway] if args.key?(:target_vpn_gateway)
          @vpn_gateway = args[:vpn_gateway] if args.key?(:vpn_gateway)
          @vpn_gateway_interface = args[:vpn_gateway_interface] if args.key?(:vpn_gateway_interface)
        end
      end
      
      # 
      class VpnTunnelAggregatedList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of VpnTunnelsScopedList resources.
        # Corresponds to the JSON property `items`
        # @return [Hash<String,Google::Apis::ComputeV1::VpnTunnelsScopedList>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#vpnTunnel for
        # VPN tunnels.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::VpnTunnelAggregatedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::VpnTunnelAggregatedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class VpnTunnelCipherSuite
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `phase1`
        # @return [Google::Apis::ComputeV1::VpnTunnelPhase1Algorithms]
        attr_accessor :phase1
      
        # 
        # Corresponds to the JSON property `phase2`
        # @return [Google::Apis::ComputeV1::VpnTunnelPhase2Algorithms]
        attr_accessor :phase2
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @phase1 = args[:phase1] if args.key?(:phase1)
          @phase2 = args[:phase2] if args.key?(:phase2)
        end
      end
      
      # Contains a list of VpnTunnel resources.
      class VpnTunnelList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of VpnTunnel resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::VpnTunnel>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#vpnTunnel for
        # VPN tunnels.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::VpnTunnelList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::VpnTunnelList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class VpnTunnelPhase1Algorithms
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `dh`
        # @return [Array<String>]
        attr_accessor :dh
      
        # 
        # Corresponds to the JSON property `encryption`
        # @return [Array<String>]
        attr_accessor :encryption
      
        # 
        # Corresponds to the JSON property `integrity`
        # @return [Array<String>]
        attr_accessor :integrity
      
        # 
        # Corresponds to the JSON property `prf`
        # @return [Array<String>]
        attr_accessor :prf
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @dh = args[:dh] if args.key?(:dh)
          @encryption = args[:encryption] if args.key?(:encryption)
          @integrity = args[:integrity] if args.key?(:integrity)
          @prf = args[:prf] if args.key?(:prf)
        end
      end
      
      # 
      class VpnTunnelPhase2Algorithms
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `encryption`
        # @return [Array<String>]
        attr_accessor :encryption
      
        # 
        # Corresponds to the JSON property `integrity`
        # @return [Array<String>]
        attr_accessor :integrity
      
        # 
        # Corresponds to the JSON property `pfs`
        # @return [Array<String>]
        attr_accessor :pfs
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @encryption = args[:encryption] if args.key?(:encryption)
          @integrity = args[:integrity] if args.key?(:integrity)
          @pfs = args[:pfs] if args.key?(:pfs)
        end
      end
      
      # 
      class VpnTunnelsScopedList
        include Google::Apis::Core::Hashable
      
        # A list of VPN tunnels contained in this scope.
        # Corresponds to the JSON property `vpnTunnels`
        # @return [Array<Google::Apis::ComputeV1::VpnTunnel>]
        attr_accessor :vpn_tunnels
      
        # Informational warning which replaces the list of addresses when
        # the list is empty.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::VpnTunnelsScopedList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @vpn_tunnels = args[:vpn_tunnels] if args.key?(:vpn_tunnels)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # Informational warning which replaces the list of addresses when
        # the list is empty.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::VpnTunnelsScopedList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class WafExpressionSet
        include Google::Apis::Core::Hashable
      
        # A list of alternate IDs. The format should be:
        # - E.g. XSS-stable
        # Generic suffix like "stable" is particularly useful if a policy
        # likes to avail newer set of expressions without having to change
        # the policy.
        # A given alias name can't be used for more than one entity set.
        # Corresponds to the JSON property `aliases`
        # @return [Array<String>]
        attr_accessor :aliases
      
        # List of available expressions.
        # Corresponds to the JSON property `expressions`
        # @return [Array<Google::Apis::ComputeV1::WafExpressionSetExpression>]
        attr_accessor :expressions
      
        # Google specified expression set ID. The format should be:
        # - E.g. XSS-20170329
        # required
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @aliases = args[:aliases] if args.key?(:aliases)
          @expressions = args[:expressions] if args.key?(:expressions)
          @id = args[:id] if args.key?(:id)
        end
      end
      
      # 
      class WafExpressionSetExpression
        include Google::Apis::Core::Hashable
      
        # Expression ID should uniquely identify the origin of the expression.
        # E.g. owasp-crs-v020901-id973337 identifies Owasp core rule set
        # version 2.9.1 rule id 973337.
        # The ID could be used to determine the individual attack definition
        # that has been detected. It could also be used to exclude it from
        # the policy in case of false positive.
        # required
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # The sensitivity value associated with the WAF rule ID. This corresponds
        # to the ModSecurity paranoia level, ranging from 1 to 4. 0 is reserved for
        # opt-in only rules.
        # Corresponds to the JSON property `sensitivity`
        # @return [Fixnum]
        attr_accessor :sensitivity
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @sensitivity = args[:sensitivity] if args.key?(:sensitivity)
        end
      end
      
      # In contrast to a single BackendService in
      # HttpRouteAction to which all matching traffic is directed to,
      # WeightedBackendService allows traffic to be split across
      # multiple backend services. The volume of traffic for each
      # backend service is proportional to the weight specified
      # in each WeightedBackendService
      class WeightedBackendService
        include Google::Apis::Core::Hashable
      
        # The full or partial URL to the default BackendService
        # resource. Before
        # forwarding the request to backendService, the load balancer
        # applies any relevant headerActions specified as part of
        # thisbackendServiceWeight.
        # Corresponds to the JSON property `backendService`
        # @return [String]
        attr_accessor :backend_service
      
        # The request and response header transformations that take effect before
        # the request is passed along to the selected backendService.
        # Corresponds to the JSON property `headerAction`
        # @return [Google::Apis::ComputeV1::HttpHeaderAction]
        attr_accessor :header_action
      
        # Specifies the fraction of traffic sent to a backend service,
        # computed asweight / (sum of all weightedBackendService weights in routeAction).
        # The selection of a backend service is determined only for new traffic.
        # Once a user's request has been directed to a backend service,
        # subsequent requests are sent to the same backend service as
        # determined by the backend service's session affinity policy.
        # Don't configure session affinity if you're using weighted traffic
        # splitting. If you do, the weighted traffic splitting configuration takes
        # precedence.
        # The value must be from 0 to 1000.
        # Corresponds to the JSON property `weight`
        # @return [Fixnum]
        attr_accessor :weight
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @backend_service = args[:backend_service] if args.key?(:backend_service)
          @header_action = args[:header_action] if args.key?(:header_action)
          @weight = args[:weight] if args.key?(:weight)
        end
      end
      
      # A pseudowire that connects two Interconnect connections.
      class Wire
        include Google::Apis::Core::Hashable
      
        # Output only. [Output Only] Indicates whether the wire is enabled.
        # When false, the wire is disabled. When true and when the wire group of
        # the wire is also enabled, the wire is enabled. Defaults to true.
        # Corresponds to the JSON property `adminEnabled`
        # @return [Boolean]
        attr_accessor :admin_enabled
        alias_method :admin_enabled?, :admin_enabled
      
        # Output only. Wire endpoints are specific Interconnect connections.
        # Corresponds to the JSON property `endpoints`
        # @return [Array<Google::Apis::ComputeV1::WireEndpoint>]
        attr_accessor :endpoints
      
        # Output only. [Output Only] A label that identifies the wire. The format of
        # this label
        # combines the existing labels of the wire group endpoints and Interconnect
        # connections used by this wire in alphabetical order as follows:
        # `ENDPOINT_A+CONNECTION_A1,ENDPOINT_B+CONNECTION_B1`, where:
        # 
        # - ENDPOINT_A and ENDPOINT_B: are the labels
        # that you entered as map keys when you specified the wire group endpoint
        # objects.
        # - CONNECTION_A1 and CONNECTION_B1: are the
        # labels that you entered as map keys when you specified the wire group
        # Interconnect objects.
        # Corresponds to the JSON property `label`
        # @return [String]
        attr_accessor :label
      
        # The properties of a wire.
        # Corresponds to the JSON property `wireProperties`
        # @return [Google::Apis::ComputeV1::WireProperties]
        attr_accessor :wire_properties
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @admin_enabled = args[:admin_enabled] if args.key?(:admin_enabled)
          @endpoints = args[:endpoints] if args.key?(:endpoints)
          @label = args[:label] if args.key?(:label)
          @wire_properties = args[:wire_properties] if args.key?(:wire_properties)
        end
      end
      
      # Wire endpoints are specific Interconnect connections.
      class WireEndpoint
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `interconnect`
        # @return [String]
        attr_accessor :interconnect
      
        # 
        # Corresponds to the JSON property `vlanTag`
        # @return [Fixnum]
        attr_accessor :vlan_tag
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @interconnect = args[:interconnect] if args.key?(:interconnect)
          @vlan_tag = args[:vlan_tag] if args.key?(:vlan_tag)
        end
      end
      
      # A resource that represents a group of redundant wires.
      class WireGroup
        include Google::Apis::Core::Hashable
      
        # Indicates whether the wires in the wire group are enabled. When false, the
        # wires in the wire group are disabled. When true and when
        # there is simultaneously no wire-specific override of `adminEnabled` to
        # false, a given wire is enabled. Defaults to true.
        # Corresponds to the JSON property `adminEnabled`
        # @return [Boolean]
        attr_accessor :admin_enabled
        alias_method :admin_enabled?, :admin_enabled
      
        # Output only. [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # An optional description of the wire group.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # A map that contains the logical endpoints of the wire group. Specify
        # key-value pairs for the map as follows:
        # 
        # - Key: an RFC1035 user-specified label.
        # - Value: an Endpoint object.
        # Corresponds to the JSON property `endpoints`
        # @return [Hash<String,Google::Apis::ComputeV1::WireGroupEndpoint>]
        attr_accessor :endpoints
      
        # Output only. [Output Only] The unique identifier for the resource type. The
        # server
        # generates this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#wireGroups for
        # wire groups.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # Name of the resource. Provided by the client when the resource is created.
        # The name must be 1-63 characters long, and comply withRFC1035.
        # Specifically, the name must be 1-63 characters long and match the regular
        # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
        # character must be a lowercase letter, and all following characters must
        # be a dash, lowercase letter, or digit, except the last character, which
        # cannot be a dash.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Output only. [Output Only] Indicates whether there are wire changes yet to be
        # processed.
        # Corresponds to the JSON property `reconciling`
        # @return [Boolean]
        attr_accessor :reconciling
        alias_method :reconciling?, :reconciling
      
        # Output only. [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Topology details for the wire group.
        # Corresponds to the JSON property `topology`
        # @return [Google::Apis::ComputeV1::WireGroupTopology]
        attr_accessor :topology
      
        # The properties of a wire.
        # Corresponds to the JSON property `wireProperties`
        # @return [Google::Apis::ComputeV1::WireProperties]
        attr_accessor :wire_properties
      
        # Output only. The single/redundant wire(s) managed by the wire group.
        # Corresponds to the JSON property `wires`
        # @return [Array<Google::Apis::ComputeV1::Wire>]
        attr_accessor :wires
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @admin_enabled = args[:admin_enabled] if args.key?(:admin_enabled)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @description = args[:description] if args.key?(:description)
          @endpoints = args[:endpoints] if args.key?(:endpoints)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @reconciling = args[:reconciling] if args.key?(:reconciling)
          @self_link = args[:self_link] if args.key?(:self_link)
          @topology = args[:topology] if args.key?(:topology)
          @wire_properties = args[:wire_properties] if args.key?(:wire_properties)
          @wires = args[:wires] if args.key?(:wires)
        end
      end
      
      # A logical endpoint for the wire group. An endpoint represents a metro that
      # contains redundant Interconnect connections. A wire group is created
      # between two endpoints.
      class WireGroupEndpoint
        include Google::Apis::Core::Hashable
      
        # A map that contains the redundant Interconnect connections. Specify
        # key-value pairs for the map as follows:
        # 
        # - Key: an RFC1035 user-specified label.
        # - Value: an Interconnect object.
        # Corresponds to the JSON property `interconnects`
        # @return [Hash<String,Google::Apis::ComputeV1::WireGroupEndpointInterconnect>]
        attr_accessor :interconnects
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @interconnects = args[:interconnects] if args.key?(:interconnects)
        end
      end
      
      # The redundant Interconnect connections for this endpoint.
      class WireGroupEndpointInterconnect
        include Google::Apis::Core::Hashable
      
        # Required. An Interconnect connection. You can specify the connection as
        # a partial or full URL. If the connection is in a different project from
        # the cross-site network, use a format that specifies the project. See
        # the following examples of partial and full URLs:
        # 
        # 
        # 
        # global/interconnects/NAME
        # 
        # 
        # projects/PROJECT_ID/global/interconnects/NAME
        # 
        # -
        # https://compute.googleapis.com/compute/projects/PROJECT_ID/global/
        # interconnects/NAME
        # Corresponds to the JSON property `interconnect`
        # @return [String]
        attr_accessor :interconnect
      
        # Required. To configure the wire group for VLAN mode, enter a VLAN tag,
        # which is a number from `2` to `4093`. You can autoallocate a tag by
        # entering `0`. To configure the wire group for port mode, enter `-1`.
        # Review the following guidelines:
        # 
        # - A VLAN tag must be unique for an Interconnect connection across all
        # attachments and wire groups.
        # - Both endpoints of a wire must use the same VLAN tag value.
        # - Single wire and redundant type wire groups must have only one
        # VLAN tag.
        # - Port mode pseudowires must have a single VLAN tag with a value of
        # `-1` for both endpoints.
        # - Box and cross type wire groups must have two VLAN tags. The first
        # is for the same-zone pseudowire, and the second is for the cross-zone
        # pseudowire.
        # Corresponds to the JSON property `vlanTags`
        # @return [Array<Fixnum>]
        attr_accessor :vlan_tags
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @interconnect = args[:interconnect] if args.key?(:interconnect)
          @vlan_tags = args[:vlan_tags] if args.key?(:vlan_tags)
        end
      end
      
      # Response for the list request.
      class WireGroupList
        include Google::Apis::Core::Hashable
      
        # 
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of wire group resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::WireGroup>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of the resource. Alwayscompute#wireGroups for
        # wire groups.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Output only. [Output Only] Unreachable resources.
        # end_interface: MixerListResponseWithEtagBuilder
        # Corresponds to the JSON property `unreachables`
        # @return [Array<String>]
        attr_accessor :unreachables
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::WireGroupList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @etag = args[:etag] if args.key?(:etag)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @unreachables = args[:unreachables] if args.key?(:unreachables)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::WireGroupList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Topology details for the wire group.
      class WireGroupTopology
        include Google::Apis::Core::Hashable
      
        # Output only. Topology details for all endpoints in the wire group.
        # Corresponds to the JSON property `endpoints`
        # @return [Array<Google::Apis::ComputeV1::WireGroupTopologyEndpoint>]
        attr_accessor :endpoints
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @endpoints = args[:endpoints] if args.key?(:endpoints)
        end
      end
      
      # Topology details for a single wire group endpoint.
      class WireGroupTopologyEndpoint
        include Google::Apis::Core::Hashable
      
        # Output only. The InterconnectLocation.city (metropolitan area designator) that
        # all
        # interconnects are located in.
        # Corresponds to the JSON property `city`
        # @return [String]
        attr_accessor :city
      
        # Output only. Endpoint label from the wire group.
        # Corresponds to the JSON property `label`
        # @return [String]
        attr_accessor :label
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @city = args[:city] if args.key?(:city)
          @label = args[:label] if args.key?(:label)
        end
      end
      
      # The properties of a wire.
      class WireProperties
        include Google::Apis::Core::Hashable
      
        # The configuration of the bandwidth allocation, one of the following:
        # 
        # - ALLOCATE_PER_WIRE: configures a separate unmetered bandwidth allocation
        # (and associated charges) for each wire in the group.
        # - SHARED_WITH_WIRE_GROUP: this is the default behavior, which configures
        # one unmetered bandwidth allocation for the wire group. The unmetered
        # bandwidth is divided equally across each wire in the group, but dynamic
        # throttling reallocates unused unmetered bandwidth from unused or underused
        # wires to other wires in the group.
        # Corresponds to the JSON property `bandwidthAllocation`
        # @return [String]
        attr_accessor :bandwidth_allocation
      
        # The unmetered bandwidth in Gigabits per second, using decimal units. `10`
        # is 10 Gbps, `100` is 100 Gbps. The bandwidth must be greater than 0.
        # Corresponds to the JSON property `bandwidthUnmetered`
        # @return [Fixnum]
        attr_accessor :bandwidth_unmetered
      
        # Response when a fault is detected in a pseudowire:
        # 
        # - NONE: default.
        # - DISABLE_PORT: set the port line protocol down when inline probes
        # detect a fault. This setting is only permitted on port mode
        # pseudowires.
        # Corresponds to the JSON property `faultResponse`
        # @return [String]
        attr_accessor :fault_response
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bandwidth_allocation = args[:bandwidth_allocation] if args.key?(:bandwidth_allocation)
          @bandwidth_unmetered = args[:bandwidth_unmetered] if args.key?(:bandwidth_unmetered)
          @fault_response = args[:fault_response] if args.key?(:fault_response)
        end
      end
      
      # 
      class XpnHostList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # [Output Only] A list of shared VPC host project URLs.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Project>]
        attr_accessor :items
      
        # Output only. [Output Only] Type of resource. Always compute#xpnHostList for
        # lists of shared VPC hosts.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::XpnHostList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::XpnHostList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # Service resource (a.k.a service project) ID.
      class XpnResourceId
        include Google::Apis::Core::Hashable
      
        # The ID of the service resource. In the case of projects, this field
        # supports project id (e.g., my-project-123) and project number
        # (e.g. 12345678).
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # The type of the service resource.
        # 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)
          @id = args[:id] if args.key?(:id)
          @type = args[:type] if args.key?(:type)
        end
      end
      
      # Represents a Zone resource.
      # A zone is a deployment area. These deployment areas are subsets of a region.
      # For example the zone us-east1-b is located in theus-east1 region. For more
      # information, readRegions and
      # Zones.
      class Zone
        include Google::Apis::Core::Hashable
      
        # [Output Only] Available cpu/platform selections for the zone.
        # Corresponds to the JSON property `availableCpuPlatforms`
        # @return [Array<String>]
        attr_accessor :available_cpu_platforms
      
        # [Output Only] Creation timestamp inRFC3339
        # text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # Deprecation status for a public resource.
        # Corresponds to the JSON property `deprecated`
        # @return [Google::Apis::ComputeV1::DeprecationStatus]
        attr_accessor :deprecated
      
        # [Output Only] Textual description of the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] The unique identifier for the resource. This identifier is
        # defined by the server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # Output only. [Output Only] Type of the resource. Always compute#zone for
        # zones.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] Name of the resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # [Output Only] Full URL reference to the region which hosts the zone.
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Status of the zone, either UP orDOWN.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # Output only. [Output Only] Reserved for future use.
        # Corresponds to the JSON property `supportsPzs`
        # @return [Boolean]
        attr_accessor :supports_pzs
        alias_method :supports_pzs?, :supports_pzs
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @available_cpu_platforms = args[:available_cpu_platforms] if args.key?(:available_cpu_platforms)
          @creation_timestamp = args[:creation_timestamp] if args.key?(:creation_timestamp)
          @deprecated = args[:deprecated] if args.key?(:deprecated)
          @description = args[:description] if args.key?(:description)
          @id = args[:id] if args.key?(:id)
          @kind = args[:kind] if args.key?(:kind)
          @name = args[:name] if args.key?(:name)
          @region = args[:region] if args.key?(:region)
          @self_link = args[:self_link] if args.key?(:self_link)
          @status = args[:status] if args.key?(:status)
          @supports_pzs = args[:supports_pzs] if args.key?(:supports_pzs)
        end
      end
      
      # Contains a list of zone resources.
      class ZoneList
        include Google::Apis::Core::Hashable
      
        # [Output Only] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of Zone resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::Zone>]
        attr_accessor :items
      
        # Output only. Type of resource.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [Output Only] This token allows you to get the next page of results for
        # list requests. If the number of results is larger thanmaxResults, use the
        # nextPageToken as a value for
        # the query parameter pageToken in the next list request.
        # Subsequent list requests will have their own nextPageToken to
        # continue paging through the results.
        # Corresponds to the JSON property `nextPageToken`
        # @return [String]
        attr_accessor :next_page_token
      
        # Output only. [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Informational warning message.
        # Corresponds to the JSON property `warning`
        # @return [Google::Apis::ComputeV1::ZoneList::Warning]
        attr_accessor :warning
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @id = args[:id] if args.key?(:id)
          @items = args[:items] if args.key?(:items)
          @kind = args[:kind] if args.key?(:kind)
          @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
          @self_link = args[:self_link] if args.key?(:self_link)
          @warning = args[:warning] if args.key?(:warning)
        end
        
        # [Output Only] Informational warning message.
        class Warning
          include Google::Apis::Core::Hashable
        
          # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
          # Corresponds to the JSON property `code`
          # @return [String]
          attr_accessor :code
        
          # [Output Only] Metadata about this warning in key:
          # value format. For example:
          # "data": [
          # `
          # "key": "scope",
          # "value": "zones/us-east1-d"
          # `
          # Corresponds to the JSON property `data`
          # @return [Array<Google::Apis::ComputeV1::ZoneList::Warning::Datum>]
          attr_accessor :data
        
          # [Output Only] A human-readable description of the warning code.
          # 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)
            @data = args[:data] if args.key?(:data)
            @message = args[:message] if args.key?(:message)
          end
          
          # 
          class Datum
            include Google::Apis::Core::Hashable
          
            # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
            # Corresponds to the JSON property `key`
            # @return [String]
            attr_accessor :key
          
            # [Output Only] A warning data value corresponding to the key.
            # Corresponds to the JSON property `value`
            # @return [String]
            attr_accessor :value
          
            def initialize(**args)
               update!(**args)
            end
          
            # Update properties of this object
            def update!(**args)
              @key = args[:key] if args.key?(:key)
              @value = args[:value] if args.key?(:value)
            end
          end
        end
      end
      
      # 
      class ZoneSetLabelsRequest
        include Google::Apis::Core::Hashable
      
        # The fingerprint of the previous set of labels for this resource,
        # used to detect conflicts. The fingerprint is initially generated by Compute
        # Engine and changes after every request to modify or update labels. You must
        # always provide an up-to-date fingerprint hash in order to update or change
        # labels. Make a get() request to the resource to get the latest
        # fingerprint.
        # Corresponds to the JSON property `labelFingerprint`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :label_fingerprint
      
        # The labels to set for this resource.
        # Corresponds to the JSON property `labels`
        # @return [Hash<String,String>]
        attr_accessor :labels
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @label_fingerprint = args[:label_fingerprint] if args.key?(:label_fingerprint)
          @labels = args[:labels] if args.key?(:labels)
        end
      end
      
      # 
      class ZoneSetNestedPolicyRequest
        include Google::Apis::Core::Hashable
      
        # Flatten Policy to create a backwacd compatible wire-format.
        # Deprecated. Use 'policy' to specify bindings.
        # Corresponds to the JSON property `bindings`
        # @return [Array<Google::Apis::ComputeV1::Binding>]
        attr_accessor :bindings
      
        # Flatten Policy to create a backward compatible wire-format.
        # Deprecated. Use 'policy' to specify the etag.
        # Corresponds to the JSON property `etag`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :etag
      
        # An Identity and Access Management (IAM) policy, which specifies access
        # controls for Google Cloud resources.
        # A `Policy` is a collection of `bindings`. A `binding` binds one or more
        # `members`, or principals, to a single `role`. Principals can be user
        # accounts, service accounts, Google groups, and domains (such as G Suite). A
        # `role` is a named list of permissions; each `role` can be an IAM predefined
        # role or a user-created custom role.
        # For some types of Google Cloud resources, a `binding` can also specify a
        # `condition`, which is a logical expression that allows access to a resource
        # only if the expression evaluates to `true`. A condition can add constraints
        # based on attributes of the request, the resource, or both. To learn which
        # resources support conditions in their IAM policies, see the
        # [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-
        # policies).
        # **JSON example:**
        # ```
        # `
        # "bindings": [
        # `
        # "role": "roles/resourcemanager.organizationAdmin",
        # "members": [
        # "user:mike@example.com",
        # "group:admins@example.com",
        # "domain:google.com",
        # "serviceAccount:my-project-id@appspot.gserviceaccount.com"
        # ]
        # `,
        # `
        # "role": "roles/resourcemanager.organizationViewer",
        # "members": [
        # "user:eve@example.com"
        # ],
        # "condition": `
        # "title": "expirable access",
        # "description": "Does not grant access after Sep 2020",
        # "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')
        # ",
        # `
        # `
        # ],
        # "etag": "BwWWja0YfJA=",
        # "version": 3
        # `
        # ```
        # **YAML example:**
        # ```
        # bindings:
        # - members:
        # - user:mike@example.com
        # - group:admins@example.com
        # - domain:google.com
        # - serviceAccount:my-project-id@appspot.gserviceaccount.com
        # role: roles/resourcemanager.organizationAdmin
        # - members:
        # - user:eve@example.com
        # role: roles/resourcemanager.organizationViewer
        # condition:
        # title: expirable access
        # description: Does not grant access after Sep 2020
        # expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
        # etag: BwWWja0YfJA=
        # version: 3
        # ```
        # For a description of IAM and its features, see the
        # [IAM documentation](https://cloud.google.com/iam/docs/).
        # Corresponds to the JSON property `policy`
        # @return [Google::Apis::ComputeV1::Policy]
        attr_accessor :policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bindings = args[:bindings] if args.key?(:bindings)
          @etag = args[:etag] if args.key?(:etag)
          @policy = args[:policy] if args.key?(:policy)
        end
      end
      
      # 
      class ZoneSetPolicyRequest
        include Google::Apis::Core::Hashable
      
        # Flatten Policy to create a backwacd compatible wire-format.
        # Deprecated. Use 'policy' to specify bindings.
        # Corresponds to the JSON property `bindings`
        # @return [Array<Google::Apis::ComputeV1::Binding>]
        attr_accessor :bindings
      
        # Flatten Policy to create a backward compatible wire-format.
        # Deprecated. Use 'policy' to specify the etag.
        # Corresponds to the JSON property `etag`
        # NOTE: Values are automatically base64 encoded/decoded in the client library.
        # @return [String]
        attr_accessor :etag
      
        # An Identity and Access Management (IAM) policy, which specifies access
        # controls for Google Cloud resources.
        # A `Policy` is a collection of `bindings`. A `binding` binds one or more
        # `members`, or principals, to a single `role`. Principals can be user
        # accounts, service accounts, Google groups, and domains (such as G Suite). A
        # `role` is a named list of permissions; each `role` can be an IAM predefined
        # role or a user-created custom role.
        # For some types of Google Cloud resources, a `binding` can also specify a
        # `condition`, which is a logical expression that allows access to a resource
        # only if the expression evaluates to `true`. A condition can add constraints
        # based on attributes of the request, the resource, or both. To learn which
        # resources support conditions in their IAM policies, see the
        # [IAM documentation](https://cloud.google.com/iam/help/conditions/resource-
        # policies).
        # **JSON example:**
        # ```
        # `
        # "bindings": [
        # `
        # "role": "roles/resourcemanager.organizationAdmin",
        # "members": [
        # "user:mike@example.com",
        # "group:admins@example.com",
        # "domain:google.com",
        # "serviceAccount:my-project-id@appspot.gserviceaccount.com"
        # ]
        # `,
        # `
        # "role": "roles/resourcemanager.organizationViewer",
        # "members": [
        # "user:eve@example.com"
        # ],
        # "condition": `
        # "title": "expirable access",
        # "description": "Does not grant access after Sep 2020",
        # "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')
        # ",
        # `
        # `
        # ],
        # "etag": "BwWWja0YfJA=",
        # "version": 3
        # `
        # ```
        # **YAML example:**
        # ```
        # bindings:
        # - members:
        # - user:mike@example.com
        # - group:admins@example.com
        # - domain:google.com
        # - serviceAccount:my-project-id@appspot.gserviceaccount.com
        # role: roles/resourcemanager.organizationAdmin
        # - members:
        # - user:eve@example.com
        # role: roles/resourcemanager.organizationViewer
        # condition:
        # title: expirable access
        # description: Does not grant access after Sep 2020
        # expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
        # etag: BwWWja0YfJA=
        # version: 3
        # ```
        # For a description of IAM and its features, see the
        # [IAM documentation](https://cloud.google.com/iam/docs/).
        # Corresponds to the JSON property `policy`
        # @return [Google::Apis::ComputeV1::Policy]
        attr_accessor :policy
      
        def initialize(**args)
           update!(**args)
        end
      
        # Update properties of this object
        def update!(**args)
          @bindings = args[:bindings] if args.key?(:bindings)
          @etag = args[:etag] if args.key?(:etag)
          @policy = args[:policy] if args.key?(:policy)
        end
      end
    end
  end
end
