# 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
      
      # 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, read GPUs on Compute Engine.
      class AcceleratorType
        include Google::Apis::Core::Hashable
      
        # [Output Only] Creation timestamp in RFC3339 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] The type of the resource. Always compute#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] 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] Type of resource. Always compute#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 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] 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] Type of resource. Always compute#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 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::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 in
        # externalIpv6PrefixLength 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] Type of the resource. Always compute#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 or Network 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. An external 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 in accessConfig. If this field is
        # unspecified in ipv6AccessConfig, 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. In ipv6AccessConfigs, the default and only option is
        # DIRECT_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 or EXTERNAL. If unspecified,
        # defaults to EXTERNAL.
        # Corresponds to the JSON property `addressType`
        # @return [String]
        attr_accessor :address_type
      
        # [Output Only] Creation timestamp in RFC3339 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] 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 IP version that will be used by this address. Valid options are IPV4 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] 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 error 412 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 the setLabels
        # method. Each label key/value pair must comply with RFC1035. 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 with RFC1035. 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 the VPC_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 or STANDARD. 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] 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] The status of the address, which can be one of RESERVING,
        # 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 a GCE_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_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] Type of resource. Always compute#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 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] 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] 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 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::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 an Image (e.g., whether or not the OS in the Image 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 as 10.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] 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 is SCSI. For performance characteristics of SCSI
        # over NVMe, see Local 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] 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] 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] 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 a customer-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 store customer-supplied encryption
        # keys, so you cannot use your own keys to encrypt disks in a managed 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] 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, see About persistent disks.
        # Corresponds to the JSON property `interface`
        # @return [String]
        attr_accessor :interface
      
        # [Output Only] Type of the resource. Always compute#attachedDisk for attached
        # disks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [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 or READ_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
      
        # 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 of initializeParams.sourceImage or
        # initializeParams.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 or PERSISTENT. If not specified,
        # the default is PERSISTENT.
        # 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, see Persistent 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 the disks.
        # 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 the Extreme 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 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 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 or initializeParams.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, specify
        # family/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
      
        # The customer-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 store customer-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 or initializeParams.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
      
        # The customer-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 the
      # regionAutoscalers 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] Creation timestamp in RFC3339 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] 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 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
      
        # [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] URL of the region where the instance group resides (for
        # autoscalers living in regional scope).
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [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 for Commonly 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] URL of the zone 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] Type of resource. Always compute#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 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] 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] 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 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::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 is 0.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 Monitoring filter string for
        # TimeSeries.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 or DOUBLE.
        # 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 example pubsub.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 is https://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 on balancingMode). 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 than 0.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 a balancingMode. 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 an instance 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
        # with https://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, see Connection balancing mode and Utilization balancing mode. Not
        # available if the backend's balancingMode 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, see Connection balancing mode and Utilization balancing mode. Not
        # available if the backend's balancingMode is RATE.
        # 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, see Connection balancing mode and Utilization balancing mode. Not
        # available if the backend's balancingMode is RATE.
        # 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, see Rate balancing mode and Utilization balancing mode. Not
        # available if the backend's balancingMode is CONNECTION.
        # Corresponds to the JSON property `maxRate`
        # @return [Fixnum]
        attr_accessor :max_rate
      
        # Defines a maximum target for requests per second (RPS). For usage guidelines,
        # see Rate balancing mode and Utilization balancing mode. Not available if the
        # backend's balancingMode is CONNECTION.
        # 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,
        # see Rate balancing mode and Utilization balancing mode. Not available if the
        # backend's balancingMode is CONNECTION.
        # Corresponds to the JSON property `maxRatePerInstance`
        # @return [Float]
        attr_accessor :max_rate_per_instance
      
        # Optional parameter to define a target capacity for the UTILIZATION balancing
        # mode. The valid range is [0.0, 1.0]. For usage guidelines, see Utilization
        # 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, read
      # Backend 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 in RFC3339 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
      
        # 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 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
      
        # 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] 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 are 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
      
        # 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 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::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] 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, see Backend 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] Creation timestamp in RFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # List of custom metrics that are used for the WEIGHTED_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] 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 to
        # Choosing 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, see Define 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 the customMetrics 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 is MAGLEV. 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 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
      
        # 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 to INTERNAL, or when the load balancing scheme is set
        # to EXTERNAL and haPolicy fastIpMove is enabled.
        # Corresponds to the JSON property `network`
        # @return [String]
        attr_accessor :network
      
        # 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] 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] 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)
          @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
      
        # 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 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] 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 are 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 is PER_CONNECTION (
        # default tracking mode) or the Session Affinity is configured for 5-tuple. They
        # do not persist for UDP. 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 is TCP. 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] Type of resource. Always compute#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] 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] Type of resource. Always compute#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 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::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] Type of resource. Always compute#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 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::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, see Use 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
      
      # 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] 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 of RFC5880
        # 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 of RFC5880
        # 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 of RFC5880
        # 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 of RFC5880
        # 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 of RFC5880
        # 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 of RFC5880
        # 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 of RFC5880
        # 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 of RFC5880
        # 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 of RFC5880
        # 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 of RFC5880
        # 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 of
        # RFC5880
        # 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
        # of RFC5880
        # 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 of RFC5880
        # 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 of RFC5880
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # The version number of the BFD protocol, as specified in section 4.1 of RFC5880.
        # 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 of RFC5880
        # 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 of RFC5880
        # 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 of RFC5880
        # 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] AS-PATH for the route
        # Corresponds to the JSON property `asPaths`
        # @return [Array<Google::Apis::ComputeV1::BgpRouteAsPath>]
        attr_accessor :as_paths
      
        # [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] BGP multi-exit discriminator
        # Corresponds to the JSON property `med`
        # @return [Fixnum]
        attr_accessor :med
      
        # [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] 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] 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)
          @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
      
        # 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. If min_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 as inst-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 name inst-0050, then instance
        # names generated using the pattern inst-#### 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 with instanceProperties 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_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
      
        # 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 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
      
      # 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 as VCPU 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] Creation timestamp in RFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # [Input Only] Optional, specifies the requested commitment end time in RFC3339
        # 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] Commitment end time in RFC3339 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] 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. 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 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
      
        # 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),
        # and THIRTY_SIX_MONTH (3 years).
        # Corresponds to the JSON property `plan`
        # @return [String]
        attr_accessor :plan
      
        # [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 the existingReservations 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] 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] Commitment start time in RFC3339 text format.
        # Corresponds to the JSON property `startTimestamp`
        # @return [String]
        attr_accessor :start_timestamp
      
        # [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, or EXPIRED.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # [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, 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] Type of resource. Always compute#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 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] 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] 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 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::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] 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 in Enabling
        # 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 to HEADER_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 in allowOrigins or an item in allowOriginRegexes.
        # 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 in allowOrigins or an item in
        # allowOriginRegexes.
        # 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
      
      # 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 a
        # 401, then the rule for 401 will be applied. However if the backend service
        # returns a 403, the rule for 4xx 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 like pathMatcher, pathRule
        # and routeRule, an errorService specified at a higher level in the UrlMap will
        # be used. If UrlMap.defaultCustomErrorResponsePolicy contains one or more
        # errorResponseRules[], it must specify errorService. If load balancer cannot
        # reach the backendBucket, a simple Not Found Error will be returned, with the
        # original response code (or overrideResponseCode if configured). errorService
        # is not supported for internal or regional HTTP/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 all errorResponseRules of
        # CustomErrorResponsePolicy.
        # 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 simple Not 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 the rsaEncryptedKey. 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 the rsaEncryptedKey. 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] The RFC 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 a customer-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 use ACTIVE. Operations which create a new resource using a
        # DEPRECATED resource will return successfully, but with a warning indicating
        # the deprecated resource and recommending its replacement. Operations which use
        # OBSOLETE or DELETED 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, read Zonal 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] 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] Creation timestamp in RFC3339 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, the diskEncryptionKey.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] 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. 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
        # error 412 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] Last attach timestamp in RFC3339 text format.
        # Corresponds to the JSON property `lastAttachTimestamp`
        # @return [String]
        attr_accessor :last_attach_timestamp
      
        # [Output Only] Last detach timestamp in RFC3339 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 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
      
        # 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 the Extreme 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] 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] 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] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # [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 the sourceImage, sourceSnapshot, or sourceDisk
        # parameter, or specify it alone to create an empty persistent disk. If you
        # specify this field along with a source, the value of sizeGb 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] 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] 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] 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, specify
        # family/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
      
        # 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] 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] 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
      
        # 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] 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] 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] 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] 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] Type of resource. Always compute#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 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] 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] 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] 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] 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] 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 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::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 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
      
        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, read Storage
      # options. The diskTypes resource represents disk types for a zonal persistent
      # disk. For more information, read Zonal 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 in RFC3339 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] 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] Type of resource. Always compute#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 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] 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] 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 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::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 in updatePolicy.
        # 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 the zone. 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] Type of resource. Always compute#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 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::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] Creation timestamp in RFC3339 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 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] Type of the resource. Always compute#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 error 412 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 the setLabels
        # method. Each label key/value pair must comply with RFC1035. 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 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
      
        # 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] 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] 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 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::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, read
      # Firewall 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] Creation timestamp in RFC3339 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 in CIDR 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] 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. 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 with RFC1035. 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 in
        # CIDR 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 the sourceTags 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 as
        # sourceServiceAccounts. 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 in sourceServiceAccount. The
        # connection does not need to match both fields for the firewall to apply.
        # sourceServiceAccounts cannot be used at the same time as sourceTags 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 in allowed[].
        # targetServiceAccounts cannot be used at the same time as targetTags 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] 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 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::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] Type of firewallPolicy associations. Always compute#
        # 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] Creation timestamp in RFC3339 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 error 412 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] Type of the resource. Always compute#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] 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
      
        # [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] 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] 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)
          @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] 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] 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] Type of resource. Always compute#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 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] 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] Type of the resource. Returns compute#firewallPolicyRule for
        # firewall rules and compute#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] 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 as
        # targetServiceAccounts. If neither targetServiceAccounts nor targetSecureTag
        # 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 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 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_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_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] 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] 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
      
      # 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 and validateForProxyless is set to true,
        # the IPAddress 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 in https://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 and L3_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 requires allPorts 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] 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] Creation timestamp in RFC3339 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 in https://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 a PacketMirroring rule
        # applies to them. This can only be set to true for load balancers that have
        # their loadBalancingScheme 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] Type of the resource. Always compute#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 error 412 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 the setLabels
        # method. Each label key/value pair must comply with RFC1035. 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 its
        # filterMatchCriteria is set to MATCH_ANY, at least one of the filterLabels 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
        # metadataFilters 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 this ForwardingRule references.
        # metadataFilters only applies to Loadbalancers that have their
        # loadBalancingScheme set to INTERNAL_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 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. 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 and STANDARD. For
        # GlobalForwardingRule, the valid value is PREMIUM. 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 overlapping portRanges. 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] 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] 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 with RFC1035. 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 is
        # EXTERNAL. 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] Type of resource. Always compute#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 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] 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
      
        # 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 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::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 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 the
        # port 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 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 error 412 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] Type of the resource. Always compute#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] 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] 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 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 the
        # port 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 with RFC3986.
        # 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 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 the
        # port 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 with RFC3986.
        # 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 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 the
        # port 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 with RFC3986.
        # 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, see Health 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] Creation timestamp in 3339 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
      
        # 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
      
        # 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 with RFC1035. 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] 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 match type 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)
          @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
      
        # 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 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::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] Creation timestamp in RFC3339 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 regional HealthCheckService, and not
        # more than 1 for global HealthCheckService. HealthCheck resources must have
        # portSpecification=USE_SERVING_PORT or portSpecification=USE_FIXED_PORT. For
        # regional HealthCheckService, the HealthCheck must be regional and in the same
        # region. For global HealthCheckService, HealthCheck must be global. Mix of
        # regional and global HealthChecks is not supported. Multiple regional
        # HealthChecks must belong to the same region. Regional HealthChecks must belong
        # to the same region as zones of NetworkEndpointGroups. For global
        # HealthCheckService using global INTERNET_IP_PORT NetworkEndpointGroups, the
        # global HealthChecks must specify sourceRegions, and HealthChecks that specify
        # sourceRegions can only be used with global INTERNET_IP_PORT
        # NetworkEndpointGroups.
        # 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 reports
        # UNHEALTHY, then UNHEALTHY is the HealthState of the endpoint. If all health
        # checks report HEALTHY, the HealthState of the endpoint is HEALTHY. . This is
        # only allowed with regional HealthCheckService.
        # Corresponds to the JSON property `healthStatusAggregationPolicy`
        # @return [String]
        attr_accessor :health_status_aggregation_policy
      
        # [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. Always compute#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 regional HealthCheckService, NEGs must be in zones in the region of
        # the HealthCheckService. For global HealthCheckServices, 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 regional HealthCheckService, 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] 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] 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] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of HealthCheckService resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::HealthCheckService>]
        attr_accessor :items
      
        # [Output Only] Type of the resource. Always compute#healthCheckServicesList for
        # lists of HealthCheckServices.
        # 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::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
      
        # 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 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] 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 named
      # PathMatcher 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 the
        # backendService.
        # 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 of prefixMatch. 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 in
        # regexMatch. 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.
        # Corresponds to the JSON property `regexMatch`
        # @return [String]
        attr_accessor :regex_match
      
        # The value of the header must end with the contents of suffixMatch. 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, see Health checks overview .
      class HttpHealthCheck
        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 in RFC3339 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] Type of the resource. Always compute#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 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
      
        # The TCP port number for the HTTP health check request. The default value is 80.
        # 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 with RFC3986.
        # 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 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
      
        # 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 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::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, or
        # regexMatch 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, or regexMatch 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 by regexMatch. For more information about regular
        # expression syntax, see Syntax. Only one of presentMatch, exactMatch, or
        # regexMatch must be set. Regular expressions can only be used when the
        # loadBalancingScheme is set to INTERNAL_SELF_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 in
        # TargetHttpProxys. Setting this true for TargetHttpsProxy 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 with
        # prefixRedirect. 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 with pathRedirect. 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 or 504. - 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 to deadline-
        # exceeded. - internal: a retry is attempted if the gRPC status code in the
        # response header is set to internal. - resource-exhausted: a retry is attempted
        # if the gRPC status code in the response header is set to resource-exhausted. -
        # unavailable: a retry is attempted if the gRPC status code in the response
        # header is set to unavailable. 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 one weightedBackendService 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 this routeRule.
        # This list has OR semantics: the request matches this routeRule when any of the
        # matchRules 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 interprets routeRules. 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 or routeAction.weightedBackendService can be set. URL maps for classic
        # Application Load Balancers only support the urlRewrite action within a route
        # rule's routeAction.
        # 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 or routeAction.
        # 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 in fullPathMatch 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 or regexMatch 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 its filterMatchCriteria is set to
        # MATCH_ANY, at least one of the filterLabels 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 the UrlMap this
        # HttpRouteRuleMatch belongs to. metadataFilters only applies to load balancers
        # that have loadBalancingScheme set to INTERNAL_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, the route is a pattern match expression that must match the :
        # path header once the query string is removed. A pattern match allows you to
        # match - The value must be between 1 and 1024 characters - The pattern must
        # start with a leading slash ("/") - There may be no more than 5 operators in
        # pattern Precisely one of prefix_match, full_path_match, regex_match or
        # path_template_match 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. Only one of prefixMatch, fullPathMatch or regexMatch
        # must be specified.
        # 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 in regexMatch 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 or regexMatch must be specified. Regular expressions can only be
        # used when the loadBalancingScheme is set to INTERNAL_SELF_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, see Health 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 in RFC3339 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
      
        # 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 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
      
        # 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 with RFC3986.
        # 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
      
        # 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 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::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] Creation timestamp in RFC3339 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
      
        # 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 the
        # guestOSfeatures[].type parameter.
        # Corresponds to the JSON property `guestOsFeatures`
        # @return [Array<Google::Apis::ComputeV1::GuestOsFeature>]
        attr_accessor :guest_os_features
      
        # [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 a customer-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] 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 error 412
        # 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 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
      
        # 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] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # [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
      
        # 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
      
        # [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] 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] 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] 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,
        # or READY.
        # 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 be TAR.
          # 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
      
        # 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 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::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 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
      
        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, read Virtual 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 an Image (e.g., whether or not the OS in the Image 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, see Enabling 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] The CPU platform used by this instance.
        # Corresponds to the JSON property `cpuPlatform`
        # @return [String]
        attr_accessor :cpu_platform
      
        # [Output Only] Creation timestamp in RFC3339 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] 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 a customer-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] 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] Last start timestamp in RFC3339 text format.
        # Corresponds to the JSON property `lastStartTimestamp`
        # @return [String]
        attr_accessor :last_start_timestamp
      
        # [Output Only] Last stop timestamp in RFC3339 text format.
        # Corresponds to the JSON property `lastStopTimestamp`
        # @return [String]
        attr_accessor :last_stop_timestamp
      
        # [Output Only] Last suspended timestamp in RFC3339 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 a custom 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 the
        # Specifications 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 a minimum 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 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
      
        # 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] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzi`
        # @return [Boolean]
        attr_accessor :satisfies_pzi
        alias_method :satisfies_pzi?, :satisfies_pzi
      
        # [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] 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. See Service
        # 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] 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] The status of the instance. One of the following values:
        # PROVISIONING, STAGING, RUNNING, STOPPING, SUSPENDING, SUSPENDED, REPAIRING,
        # and TERMINATED. 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] 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] 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] Type of resource. Always compute#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 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] 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
      
        # Resources consumed by the instance.
        # Corresponds to the JSON property `consumptionInfo`
        # @return [Google::Apis::ComputeV1::InstanceConsumptionInfo]
        attr_accessor :consumption_info
      
        # 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
      
        # The number of virtual CPUs that are available to the instance.
        # Corresponds to the JSON property `guestCpus`
        # @return [Fixnum]
        attr_accessor :guest_cpus
      
        # 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
      
        # The amount of physical memory available to the instance, defined in MiB.
        # Corresponds to the JSON property `memoryMb`
        # @return [Fixnum]
        attr_accessor :memory_mb
      
        # 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
      
      # Represents an Instance Group resource. Instance Groups can be used to
      # configure a target for load balancing. Instance groups can either be managed
      # or unmanaged. To create managed instance groups, use the instanceGroupManager
      # or regionInstanceGroupManager resource instead. Use zonal unmanaged instance
      # groups if you need to apply load 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, read Instance groups.
      class InstanceGroup
        include Google::Apis::Core::Hashable
      
        # [Output Only] The creation timestamp for this instance group in RFC3339 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 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] A unique identifier for this instance group, generated by the
        # server.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # [Output Only] The resource type, which is always compute#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 with RFC1035.
        # 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] The URL of the region where the instance group is located (for
        # regional resources).
        # Corresponds to the JSON property `region`
        # @return [String]
        attr_accessor :region
      
        # [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] The total number of instances in the instance group.
        # Corresponds to the JSON property `size`
        # @return [Fixnum]
        attr_accessor :size
      
        # [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] The URL of the zone 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] 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] The resource type, which is always compute#
        # instanceGroupAggregatedList for aggregated lists of instance 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 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] 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::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] 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] 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, which is always compute#instanceGroupList for
        # instance 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 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::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] 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, read Instance groups. For zonal Managed Instance Group, use the
      # instanceGroupManagers resource. For regional Managed Instance Group, use the
      # regionInstanceGroupManagers 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] The creation timestamp for this managed instance group in
        # RFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # [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 error 412 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] 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] 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, run applyUpdatesToInstances, or set
        # the group's updatePolicy.type to PROACTIVE.
        # Corresponds to the JSON property `instanceTemplate`
        # @return [String]
        attr_accessor :instance_template
      
        # [Output Only] The resource type, which is always compute#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 with RFC1035.
        # 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] The URL of the region 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] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzi`
        # @return [Boolean]
        attr_accessor :satisfies_pzi
        alias_method :satisfies_pzi?, :satisfies_pzi
      
        # [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] 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] 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 the instanceGroup
        # 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 a name. Every
        # version can appear at most once per instance group. This field overrides the
        # top-level instanceTemplate field. Read more about the relationships between
        # these fields. Exactly one version must leave the targetSize field unset. That
        # version will be applied to all remaining instances. For more information, read
        # about canary updates.
        # Corresponds to the JSON property `versions`
        # @return [Array<Google::Apis::ComputeV1::InstanceGroupManagerVersion>]
        attr_accessor :versions
      
        # [Output Only] The URL of a zone 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] 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] 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] 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] 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] 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] 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] 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] 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] 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] 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] 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] 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] 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] 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] The resource type, which is always compute#
        # instanceGroupManagerAggregatedList for an aggregated list of managed instance
        # 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 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] 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::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] 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] 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] 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] 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::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] 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] The creation timestamp for this resize request in RFC3339 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] 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] The resource type, which is always compute#
        # 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 with RFC1035.
        # 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] 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] 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] Current state of the request.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # [Output only] Status of the request.
        # Corresponds to the JSON property `status`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerResizeRequestStatus]
        attr_accessor :status
      
        # [Output Only] The URL of a zone 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] 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] 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] 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
      
        # 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
        
        # 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] 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] Type of the resource. Always compute#
        # instanceGroupManagerResizeRequestList for a list of resize requests.
        # 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::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] 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] 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] The URL of the Autoscaler that targets this instance group
        # manager.
        # Corresponds to the JSON property `autoscaler`
        # @return [String]
        attr_accessor :autoscaler
      
        # [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] Stateful status of the given Instance Group Manager.
        # Corresponds to the JSON property `stateful`
        # @return [Google::Apis::ComputeV1::InstanceGroupManagerStatusStateful]
        attr_accessor :stateful
      
        # [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] 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] 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] 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] 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
      
        # 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] 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 by version 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
        # to REFRESH. 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 or OPPORTUNISTIC 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, run applyUpdatesToInstances, or set the group's
        # updatePolicy.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 as zones/[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] 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] 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
      
        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] 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] 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
      
        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] The list of PerInstanceConfig.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::PerInstanceConfig>]
        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 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] 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] 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] 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] 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] 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, run applyUpdatesToInstances, or set
        # the group's updatePolicy.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 the instanceGroupManagers.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] 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, which is always compute#
        # instanceGroupsListInstances for the list of instances in the specified
        # instance 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 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::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] 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] The list of instance 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] 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] 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 the
        # instanceGroups.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
        # error 412 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] 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 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::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] Type of resource. Always compute#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 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::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] Contents of the error.
        # Corresponds to the JSON property `error`
        # @return [Google::Apis::ComputeV1::InstanceManagedByIgmErrorManagedInstanceError]
        attr_accessor :error
      
        # [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] 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] 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] 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] 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] Error code.
        # Corresponds to the JSON property `code`
        # @return [String]
        attr_accessor :code
      
        # [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 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
      
        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 an Image (e.g., whether or not the OS in the Image 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 to false. See the Enable 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 as minCpuPlatform: "Intel Haswell" or minCpuPlatform: "
        # 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] Type of the resource. Always compute#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] 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] 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, read Instance Templates.
      class InstanceTemplate
        include Google::Apis::Core::Hashable
      
        # [Output Only] The creation timestamp for this instance template in RFC3339
        # 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 unique identifier for this instance template. The server
        # defines this identifier.
        # Corresponds to the JSON property `id`
        # @return [Fixnum]
        attr_accessor :id
      
        # [Output Only] The resource type, which is always compute#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 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
      
        # The instance properties for this instance template.
        # Corresponds to the JSON property `properties`
        # @return [Google::Apis::ComputeV1::InstanceProperties]
        attr_accessor :properties
      
        # [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] 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
      
        # 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 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::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] The resource type, which is always compute#
        # 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 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::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] The URL of the instance.
        # Corresponds to the JSON property `instance`
        # @return [String]
        attr_accessor :instance
      
        # [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] 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] 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] The name of the firewall policy.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # [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] 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] The short name of the firewall policy.
        # Corresponds to the JSON property `shortName`
        # @return [String]
        attr_accessor :short_name
      
        # [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 a
        # customer-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] 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] Creation timestamp in RFC3339 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] Size of the source disk, specified in GB.
        # Corresponds to the JSON property `diskSizeGb`
        # @return [Fixnum]
        attr_accessor :disk_size_gb
      
        # [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. Always compute#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 error 412 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 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
      
        # [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] 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] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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] 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] The status of the instantSnapshot. This can be CREATING,
        # DELETING, FAILED, or READY.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # [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] Type of resource. Always compute#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 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] 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
      
        # 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 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::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 and MACsec isn't supported and enabling MACsec fails.
        # Corresponds to the JSON property `availableFeatures`
        # @return [Array<String>]
        attr_accessor :available_features
      
        # [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] Creation timestamp in RFC3339 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] 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] 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] 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] 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] 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] 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] Type of the resource. Always compute#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 error 412 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 the setLabels
        # method. Each label key/value pair must comply with RFC1035. 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 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
      
        # 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] 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
      
        # [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] 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. 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, the
        # default value is false, which allocates non-MACsec capable ports first if
        # available. This parameter can be provided only with Interconnect INSERT. It
        # isn't valid for Interconnect PATCH.
        # 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] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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
      
        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)
          @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)
        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] 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
        # Corresponds to the JSON property `bandwidth`
        # @return [String]
        attr_accessor :bandwidth
      
        # 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] 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] 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] 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] Creation timestamp in RFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # [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] 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] 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] 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] 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] Type of the resource. Always compute#interconnectAttachment for
        # interconnect attachments.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # 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 error 412 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 the setLabels
        # method. Each label key/value pair must comply with RFC1035. 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 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
      
        # [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
      
        # 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] 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] 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] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # [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] 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.
        # 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_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)
          @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)
          @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] Type of resource. Always compute#
        # 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 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] 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] 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] 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] Creation timestamp in RFC3339 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] 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] 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 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
      
        # [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] 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] 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] 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] 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] 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] 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] 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] 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] 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] 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] 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 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] 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
      
        # 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
      
        # 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
      
        # The URL of the Attachment being described.
        # Corresponds to the JSON property `attachment`
        # @return [String]
        attr_accessor :attachment
      
        # 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
      
        # 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
      
      # 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] Type of resource. Always compute#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 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::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
      
      # 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] Creation timestamp in RFC3339 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 API 154.
        # Corresponds to the JSON property `etag`
        # @return [String]
        attr_accessor :etag
      
        # [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] 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 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
      
        # [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] 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] 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] 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] 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] Interconnects used to explain this blocker in more detail.
        # Corresponds to the JSON property `interconnects`
        # @return [Array<String>]
        attr_accessor :interconnects
      
        # [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] 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] 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] 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] 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] 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, the
        # default value is false, which allocates non-MACsec capable ports first if
        # available. This parameter can be provided only with Interconnect INSERT. It
        # isn't valid for Interconnect PATCH.
        # 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 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] 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
      
        # 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
      
        # 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
      
        # The URL of the Interconnect being described.
        # Corresponds to the JSON property `interconnect`
        # @return [String]
        attr_accessor :interconnect
      
        # 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] Type of resource. Always compute#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 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::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] 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
        # 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] Creation timestamp in RFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # [Output Only] An optional description of the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [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] 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] 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. Always compute#interconnectLocation for
        # interconnect locations.
        # 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] 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] 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] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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] 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)
          @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
      
      # 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] Type of resource. Always compute#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 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::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
      
        # 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
      
        # Identifies the network presence of this location.
        # Corresponds to the JSON property `locationPresence`
        # @return [String]
        attr_accessor :location_presence
      
        # 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)
          @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 a should-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 a must-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 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 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
      
      # 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] 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] 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] 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] 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] 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] Creation timestamp in RFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # [Output Only] An optional description of the resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [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] 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] 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. Always compute#interconnectRemoteLocation
        # for interconnect remote locations.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [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] 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] 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] 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] Name of the resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # [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] Permitted connections.
        # Corresponds to the JSON property `permittedConnections`
        # @return [Array<Google::Apis::ComputeV1::InterconnectRemoteLocationPermittedConnections>]
        attr_accessor :permitted_connections
      
        # [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] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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] 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] 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] [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] Type of resource. Always compute#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 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::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] 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 for public and marketplace images. *Caution* This resource is
      # intended for use only by third-party partners who are creating Cloud
      # 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] Creation timestamp in RFC3339 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] 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 with
        # RFC1035.
        # 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
      
        # 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] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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] Last update timestamp in RFC3339 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)
          @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 a license resource. *Caution* This resource is intended for use
      # only by third-party partners who are creating Cloud Marketplace images.
      class LicenseCode
        include Google::Apis::Core::Hashable
      
        # [Output Only] Creation timestamp in RFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # [Output Only] Description of this License Code.
        # 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] 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] 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] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [Output Only] Current state of this License Code.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # [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] Description of this License Code.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [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
      
      # 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 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::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 or DENY.
        # 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, see Machine images.
      class MachineImage
        include Google::Apis::Core::Hashable
      
        # [Output Only] The creation timestamp for this machine image in RFC3339 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] 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] The resource type, which is always compute#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 a customer-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 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
      
        # 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] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # 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] 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] The customer-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] 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 the machine
        # image is stored.
        # Corresponds to the JSON property `storageLocations`
        # @return [Array<String>]
        attr_accessor :storage_locations
      
        # [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)
          @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] The resource type, which is always compute#
        # 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 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::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
      
      # Represents a Machine Type resource. You can use specific machine types for
      # your VM instances based on performance and pricing requirements. For more
      # information, read Machine 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] Creation timestamp in RFC3339 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. See Shared-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] The type of the resource. Always compute#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)
          @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] Type of resource. Always compute#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 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] 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] 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 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::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] 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's targetSize 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] 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] 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] 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] 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] 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] 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] 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] 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] The current detailed instance health state.
        # Corresponds to the JSON property `detailedHealthState`
        # @return [String]
        attr_accessor :detailed_health_state
      
        # [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] 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] 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
      
        # 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] 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] 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 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
      
        # 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] 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 its filterMatchCriteria is set to MATCH_ANY,
      # at least one of the filterLabels 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 in metadataFilters
      # 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 with RFC1035.
        # 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
      
        # 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
      
        # 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
      
        # Specifies whether NAT IP is auto or manual.
        # Corresponds to the JSON property `mode`
        # @return [String]
        attr_accessor :mode
      
        # NAT IP address. For example: 203.0.113.11.
        # Corresponds to the JSON property `natIp`
        # @return [String]
        attr_accessor :nat_ip
      
        # 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, read Virtual 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 a CIDR 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
        # in Auto mode VPC network IP ranges. For custom mode VPC networks, you can add
        # subnets using the subnetworks insert method.
        # Corresponds to the JSON property `autoCreateSubnetworks`
        # @return [Boolean]
        attr_accessor :auto_create_subnetworks
        alias_method :auto_create_subnetworks?, :auto_create_subnetworks
      
        # [Output Only] Creation timestamp in RFC3339 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] 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] 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] 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 with RFC1035. 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] 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] 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] 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] Creation timestamp in RFC3339 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] 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] 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 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
      
        # [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] 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] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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 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::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] 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 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::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] Creation timestamp in RFC3339 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 error 412 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] 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. Always compute#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 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
      
        # [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] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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] Type of resource. Always compute#
        # 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 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] 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 with GCE_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 is NON_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 and GCE_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 with RFC1035 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
        # type GCE_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 type GCE_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, see Network 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] Creation timestamp in RFC3339 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] 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. Always compute#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 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
      
        # 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 of
        # GCE_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 is
        # PRIVATE_SERVICE_CONNECT.
        # Corresponds to the JSON property `pscTargetService`
        # @return [String]
        attr_accessor :psc_target_service
      
        # [Output Only] The URL of the region where the network endpoint group is
        # located.
        # 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] 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] The URL of the zone 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] The resource type, which is always compute#
        # 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 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] 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 URLs
        # foo1-dot-appname.appspot.com/v1 and foo1-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
        # and mydomain.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 with RFC1035. 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 with RFC1035. 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 and foo1.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] The resource type, which is always compute#
        # 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 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::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] 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] 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] 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] The resource type, which is always compute#
        # 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 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] 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] The list of network 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] 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] 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] 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] Type of resource. Always compute#
        # 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 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] 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 no accessConfigs 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 the NetworkInterface. The
        # request will fail with error 400 Bad Request if the fingerprint is not
        # provided, or 412 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
      
        # 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] 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] Type of the resource. Always compute#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 and 7. 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, use IPV4_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 in legacy 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)
          @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] 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 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::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 the exchange_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 is ACTIVE.
        # 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 is ACTIVE.
        # 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 with RFC1035. 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] 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] State for the peering, either `ACTIVE` or `INACTIVE`. The
        # peering is `ACTIVE` when there's a matching configuration in the peer network.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # [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 is CONSENSUS 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 is CONSENSUS 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] Creation timestamp in RFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # [Output Only] An optional description of this resource.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [Output Only] Features supported by the network.
        # Corresponds to the JSON property `features`
        # @return [Google::Apis::ComputeV1::NetworkProfileNetworkFeatures]
        attr_accessor :features
      
        # [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. Always compute#networkProfile for network
        # profiles.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [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] Name of the resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # [Output Only] Type of the network profile.
        # Corresponds to the JSON property `profileType`
        # @return [Google::Apis::ComputeV1::NetworkProfileProfileType]
        attr_accessor :profile_type
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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 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 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 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 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
      
        # 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 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
      
        # Specifies which subnetwork purposes are supported.
        # Corresponds to the JSON property `subnetworkPurposes`
        # @return [Array<String>]
        attr_accessor :subnetwork_purposes
      
        # 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_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_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_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_vpc_peering = args[:allow_vpc_peering] if args.key?(:allow_vpc_peering)
          @allow_vpn = args[:allow_vpn] if args.key?(:allow_vpn)
          @interface_types = args[:interface_types] if args.key?(:interface_types)
          @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 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] Type of resource. Always compute#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 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] 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 or ADD_COST_TO_MED.
        # Corresponds to the JSON property `bgpInterRegionCost`
        # @return [String]
        attr_accessor :bgp_inter_region_cost
      
        # [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] 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 to GLOBAL, 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. Use exchange_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 is ACTIVE.
        # 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. Use
        # regionNetworkFirewallPolicies.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] 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] The name of the firewall policy.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # [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] 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] The short name of the firewall policy.
        # Corresponds to the JSON property `shortName`
        # @return [String]
        attr_accessor :short_name
      
        # [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, read Sole-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] Creation timestamp in RFC3339 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] 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] The type of the resource. Always compute#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 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
      
        # 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] 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] 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] 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] Type of resource.Always compute#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 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] 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] 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 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::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
      
        # 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
      
        # 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] 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
      
        # 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] 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] The resource type, which is always compute.nodeGroupsListNodes
        # for the list of nodes in the specified node 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 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::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] 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, read
      # Creating 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] Creation timestamp in RFC3339 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] 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] The type of the resource. Always compute#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 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
      
        # 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] 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] 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] 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] 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] Type of resource.Always compute#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 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] 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] 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 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::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 read Node 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 in RFC3339 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] The type of the resource. Always compute#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] 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] 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 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] Type of resource.Always compute#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 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] 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] 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 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::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] Creation timestamp in RFC3339 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] 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] Type of the resource. Always compute#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 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
      
        # [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] 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] Type of the resource. Always compute#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 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::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, read Handling 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 in
        # RFC3339 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 in
        # RFC3339 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] 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] 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] 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 in RFC3339 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] 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] 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] 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] Type of securityPolicy associations. Always compute#
        # 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, see Using Packet Mirroring.
      class PacketMirroring
        include Google::Apis::Core::Hashable
      
        # The Forwarding Rule resource of type loadBalancingScheme=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] Creation timestamp in RFC3339 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] 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. Always compute#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 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
      
        # 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] 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
      
        # 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 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] 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] 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] 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 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::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] 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] 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] 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's
        # defaultRouteAction.
        # 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 or routeRules 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 the HostRule.
        # 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. 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 of pathRules 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 of pathRules 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 of pathRules 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 specified
      # BackendService 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 or
        # routeAction.weightedBackendService can be set. URL maps for classic
        # Application Load Balancers only support the urlRewrite action within a path
        # rule's routeAction.
        # 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 or routeAction.
        # 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 or READ_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] Creation timestamp in RFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # [Output Only] Description of the feature.
        # 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] 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] 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 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] 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] The description of the feature.
        # Corresponds to the JSON property `description`
        # @return [String]
        attr_accessor :description
      
        # [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] 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] 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 be CA_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 in RFC3339 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] 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] 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] Type of resource. Always compute#projectsGetXpnResources for
        # lists of service resources (a.k.a service projects)
        # 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
      
        # 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] The version of BYOIP API.
        # Corresponds to the JSON property `byoipApiVersion`
        # @return [String]
        attr_accessor :byoip_api_version
      
        # [Output Only] Creation timestamp in RFC3339 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 the PublicAdvertisedPrefix, 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] 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
      
        # [Output Only] Type of the resource. Always compute#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 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
      
        # 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] 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] 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)
          @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] Type of the resource. Always compute#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 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::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] The version of BYOIP API.
        # Corresponds to the JSON property `byoipApiVersion`
        # @return [String]
        attr_accessor :byoip_api_version
      
        # [Output Only] Creation timestamp in RFC3339 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 new PublicDelegatedPrefix. An up-to-date fingerprint must be
        # provided in order to update the PublicDelegatedPrefix, 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] 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
      
        # 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] Type of the resource. Always compute#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 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
      
        # 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] 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] 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.
        # 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)
          @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)
          @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] Type of the resource. Always compute#
        # 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 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] 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] Type of the resource. Always compute#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 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::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
      
        # 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
      
        # 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] 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] 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)
          @ip_cidr_range = args[:ip_cidr_range] if args.key?(:ip_cidr_range)
          @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] 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, read Regions and Zones.
      class Region
        include Google::Apis::Core::Hashable
      
        # [Output Only] Creation timestamp in RFC3339 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] 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] 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 or DOWN.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # [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] 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
      
        # 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 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::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] Type of resource. Always compute#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 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::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] 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
      
        # The resource type.
        # 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::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] 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] 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] 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] 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::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] 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 as zones/[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] 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
      
        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] The list of PerInstanceConfig.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::PerInstanceConfig>]
        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 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] 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] 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] 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
      
        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 the instanceGroup
        # 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] 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
      
        # The resource type.
        # 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::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] 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 the
        # instanceGroups.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] 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 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::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] 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] The display name of the firewall policy.
        # Corresponds to the JSON property `displayName`
        # @return [String]
        attr_accessor :display_name
      
        # [Output Only] The name of the firewall policy.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # [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] 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] 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 a loadBalancingScheme 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] 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] Creation timestamp in RFC3339 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 in RFC3339 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] 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. Always compute#reservations for
        # reservations.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [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 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
      
        # 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] 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] 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] 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)
          @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 a
        # SPECIFIC_RESERVATION by name, specify googleapis.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
      
        # 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 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] 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] The number of resources that are allocated in this reservation
        # block.
        # Corresponds to the JSON property `count`
        # @return [Fixnum]
        attr_accessor :count
      
        # [Output Only] Creation timestamp in RFC3339 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] 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] 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] Type of the resource. Always compute#reservationBlock for
        # reservation blocks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [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] 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] 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] 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] Server-defined fully-qualified URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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] Status of the reservation block.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # [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)
          @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
      
        # 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. Always compute#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 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
      
        # 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] 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 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::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 subBlock resource.
      class ReservationSubBlock
        include Google::Apis::Core::Hashable
      
        # [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] Creation timestamp in RFC3339 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] 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] 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] Type of the resource. Always compute#reservationSubBlock for
        # reservation subBlocks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [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] 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] Server-defined fully-qualified URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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] Status of the reservation subBlock.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # [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)
          @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)
          @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. Always compute#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 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
      
        # 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 to schedule persistent disk snapshots.
      class ResourcePolicy
        include Google::Apis::Core::Hashable
      
        # [Output Only] Creation timestamp in RFC3339 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] 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] Type of the resource. Always compute#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 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
      
        # 
        # 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] 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] 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
      
        # 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 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] 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] 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
      
        # 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)
          @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] 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] Type of resource.Always compute#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 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::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] 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] 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] 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] 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] 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
      
        # 
        # 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)
          @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
      
      # 
      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 the Routes overview.
      class Route
        include Google::Apis::Core::Hashable
      
        # [Output Only] AS path.
        # Corresponds to the JSON property `asPaths`
        # @return [Array<Google::Apis::ComputeV1::RouteAsPath>]
        attr_accessor :as_paths
      
        # [Output Only] Creation timestamp in RFC3339 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] 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 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 with RFC1035. 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] 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 type loadBalancingScheme=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] 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
      
        # 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] 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] 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] 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.
        # Corresponds to the JSON property `routeStatus`
        # @return [String]
        attr_accessor :route_status
      
        # [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] 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_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
      
        # 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 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::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 the Cloud 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 to RFC4273.
        # Corresponds to the JSON property `bgpPeers`
        # @return [Array<Google::Apis::ComputeV1::RouterBgpPeer>]
        attr_accessor :bgp_peers
      
        # [Output Only] Creation timestamp in RFC3339 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] 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 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 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
      
        # 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 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] 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 an RFC6996 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] 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 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
      
        # 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 the RFC3927 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] 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 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
      
        # 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 with RFC1035. 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] 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 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::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 with 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)
          @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 with RFC1035.
        # 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
      
        # 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
      
        # IP address of the local BGP interface.
        # Corresponds to the JSON property `ipAddress`
        # @return [String]
        attr_accessor :ip_address
      
        # IPv4 address of the local BGP interface.
        # Corresponds to the JSON property `ipv4NexthopAddress`
        # @return [String]
        attr_accessor :ipv4_nexthop_address
      
        # IPv6 address of the local BGP interface.
        # Corresponds to the JSON property `ipv6NexthopAddress`
        # @return [String]
        attr_accessor :ipv6_nexthop_address
      
        # 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
      
        # Name of this BGP peer. Unique within the Routers resource.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # Number of routes learned from the remote BGP Peer.
        # Corresponds to the JSON property `numLearnedRoutes`
        # @return [Fixnum]
        attr_accessor :num_learned_routes
      
        # IP address of the remote BGP interface.
        # Corresponds to the JSON property `peerIpAddress`
        # @return [String]
        attr_accessor :peer_ip_address
      
        # IPv4 address of the remote BGP interface.
        # Corresponds to the JSON property `peerIpv4NexthopAddress`
        # @return [String]
        attr_accessor :peer_ipv4_nexthop_address
      
        # IPv6 address of the remote BGP interface.
        # Corresponds to the JSON property `peerIpv6NexthopAddress`
        # @return [String]
        attr_accessor :peer_ipv6_nexthop_address
      
        # [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
      
        # The state of the BGP session. For a list of possible values for this field,
        # see BGP session states.
        # Corresponds to the JSON property `state`
        # @return [String]
        attr_accessor :state
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # Unique name of this NAT.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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] Type of resource. Always compute#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 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] A list of bgp routes.
        # Corresponds to the JSON property `result`
        # @return [Array<Google::Apis::ComputeV1::BgpRoute>]
        attr_accessor :result
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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] Type of resource. Always compute#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 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] A list of route policies.
        # Corresponds to the JSON property `result`
        # @return [Array<Google::Apis::ComputeV1::RoutePolicy>]
        attr_accessor :result
      
        # [Output Only] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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 the Cloud 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 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 the
        # port 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] 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
      
        # 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] Type of the resource. Always compute#attachedDisk for attached
        # disks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # [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, either
        # READ_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] 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] 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 or PERSISTENT.
        # 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] The architecture of the attached disk.
        # Corresponds to the JSON property `architecture`
        # @return [String]
        attr_accessor :architecture
      
        # [Output Only] Type of the resource. Always compute#savedDisk for attached
        # disks.
        # Corresponds to the JSON property `kind`
        # @return [String]
        attr_accessor :kind
      
        # 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] 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] 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 to Configuring
        # 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. For preemptible 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_action STOP.
        # 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 is stopped and therefore, in a `
        # TERMINATED` state. See Instance 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, in RFC3339 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 are IN 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_action STOP.
      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] 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] Type of resource. Always compute#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 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] 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] Creation timestamp in RFC3339 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 error 412 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] 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. Always compute#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 the setLabels
        # method. Each label key/value pair must comply with RFC1035. 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 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
      
        # 
        # Corresponds to the JSON property `recaptchaOptionsConfig`
        # @return [Google::Apis::ComputeV1::SecurityPolicyRecaptchaOptionsConfig]
        attr_accessor :recaptcha_options_config
      
        # [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] 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)
          @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 with RFC1035. 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
      
        # 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)
          @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] 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] The security policy ID of the association.
        # Corresponds to the JSON property `securityPolicyId`
        # @return [String]
        attr_accessor :security_policy_id
      
        # [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] Type of resource. Always compute#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 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] 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] Type of the resource. Always compute#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 to ALL. - 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 to ALL. - 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 to IP. - 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 to ALL. - 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 to ALL. - 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 to IP. - 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 global BackendService 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 this BackendService.
        # When the server presents its X.509 certificate to the client, the client
        # inspects the certificate's subjectAltName 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 with
        # loadBalancingScheme set to INTERNAL_SELF_MANAGED. Only applies when
        # BackendService has an attached clientTlsPolicy 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] Type of the resource. Always compute#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] 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] 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] Creation timestamp in RFC3339 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] 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] Type of the resource. Always compute#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 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
      
        # 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] 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] 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] 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
      
        # 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 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] 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] Type of the resource. Always compute#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 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::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 `encryptionKey`
        # @return [Google::Apis::ComputeV1::ShieldedInstanceIdentityEntry]
        attr_accessor :encryption_key
      
        # [Output Only] Type of the resource. Always compute#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)
          @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 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 `keyName`
        # @return [String]
        attr_accessor :key_name
      
        # 128-bit key value used for signing the URL. The key value must be a valid RFC
        # 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] 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] 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] Size in bytes of the snapshot at creation time.
        # Corresponds to the JSON property `creationSizeBytes`
        # @return [Fixnum]
        attr_accessor :creation_size_bytes
      
        # [Output Only] Creation timestamp in RFC3339 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] Size of the source disk, specified in GB.
        # Corresponds to the JSON property `diskSizeGb`
        # @return [Fixnum]
        attr_accessor :disk_size_gb
      
        # [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
      
        # 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] 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] 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. 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 error 412 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] 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] 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 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
      
        # 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] Reserved for future use.
        # Corresponds to the JSON property `satisfiesPzs`
        # @return [Boolean]
        attr_accessor :satisfies_pzs
        alias_method :satisfies_pzs?, :satisfies_pzs
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # Encrypts the snapshot using a customer-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] 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] 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] 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] 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] The status of the snapshot. This can be CREATING, DELETING,
        # FAILED, READY, or UPLOADING.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # [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] 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
      
        # 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 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::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 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
      
        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
      
        # 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 `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 to false. See the Enable 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" or minCpuPlatform: "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
      
        # 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)
          @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 in RFC3339 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] 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] Type of the resource. Always compute#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 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 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] 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] 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 fields
        # certificate 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] Type of resource. Always compute#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 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] 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
      
        # 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 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::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] 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] 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] Type of resource. Always compute#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 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] 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] Unique identifier for the resource; defined by the server.
        # Corresponds to the JSON property `id`
        # @return [String]
        attr_accessor :id
      
        # A list of SslPolicy resources.
        # Corresponds to the JSON property `items`
        # @return [Array<Google::Apis::ComputeV1::SslPolicy>]
        attr_accessor :items
      
        # [Output Only] Type of the resource. Always compute#sslPoliciesList for lists
        # of sslPolicies.
        # 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::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] Creation timestamp in RFC3339 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 not CUSTOM.
        # 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] 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] 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. Always compute#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 of TLS_1_0,
        # TLS_1_1, TLS_1_2.
        # 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 of COMPATIBLE,
        # MODERN, RESTRICTED, or CUSTOM. 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] 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] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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 in READ_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] Creation timestamp in RFC3339 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] 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 error 412 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 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
      
        # 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] Server-defined fully-qualified URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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] 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] 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)
          @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)
          @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] Type of resource. Always compute#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 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] 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] Instances this disk is attached to.
        # Corresponds to the JSON property `attachedInstances`
        # @return [Array<String>]
        attr_accessor :attached_instances
      
        # [Output Only] Creation timestamp in RFC3339 text format.
        # Corresponds to the JSON property `creationTimestamp`
        # @return [String]
        attr_accessor :creation_timestamp
      
        # [Output Only] The URL of the disk.
        # Corresponds to the JSON property `disk`
        # @return [String]
        attr_accessor :disk
      
        # [Output Only] The name of the disk.
        # Corresponds to the JSON property `name`
        # @return [String]
        attr_accessor :name
      
        # [Output Only] The number of IOPS provisioned for the disk.
        # Corresponds to the JSON property `provisionedIops`
        # @return [Fixnum]
        attr_accessor :provisioned_iops
      
        # [Output Only] The throughput provisioned for the disk.
        # Corresponds to the JSON property `provisionedThroughput`
        # @return [Fixnum]
        attr_accessor :provisioned_throughput
      
        # [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] The disk size, in GB.
        # Corresponds to the JSON property `sizeGb`
        # @return [Fixnum]
        attr_accessor :size_gb
      
        # [Output Only] The disk status.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # [Output Only] The disk type.
        # Corresponds to the JSON property `type`
        # @return [String]
        attr_accessor :type
      
        # [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
      
      # 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] 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 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] 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] 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] Type of resource. Always compute#storagePoolListDisks for lists
        # of disks in a storagePool.
        # 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] 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::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] 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
      
      # [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] Timestamp of the last successful resize in RFC3339 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)
          @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 in RFC3339 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] Type of the resource. Always compute#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] 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] Type of resource. Always compute#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 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::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] Type of resource. Always compute#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 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::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
      
        # [Output Only] Creation timestamp in RFC3339 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 to REGIONAL_MANAGED_PROXY.
        # 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] 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] 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 the Valid ranges list. The range can be expanded after
        # creation using expandIpCidrRange.
        # 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 mode. Use one
        # of the following formats to specify a sub-PDP when creating a dual stack
        # subnetwork with external access using BYOIP: - Full resource URL, as in https:/
        # /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] This field is for internal use.
        # Corresponds to the JSON property `ipv6CidrRange`
        # @return [String]
        attr_accessor :ipv6_cidr_range
      
        # [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] 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 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
      
        # 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 using patch.
        # 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
      
        # The role of subnetwork. Currently, this field is only used when purpose is set
        # to GLOBAL_MANAGED_PROXY or REGIONAL_MANAGED_PROXY. The value can be set to
        # ACTIVE 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 a patch request.
        # 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 to IPV4_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 using patch.
        # Corresponds to the JSON property `stackType`
        # @return [String]
        attr_accessor :stack_type
      
        # [Output Only] The state of the subnetwork, which can be one of the following
        # values: READY: Subnetwork is created and ready to use DRAINING: 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 of READY
        # 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)
          @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)
          @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] Type of resource. Always compute#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 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] 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] 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 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::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 is EXCLUDE_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.
        # Only IPv4 is supported. The range can be any range listed in the Valid ranges
        # list.
        # 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 with RFC1035. 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.
        # 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 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 the
        # port 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] Creation timestamp in RFC3339 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] 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] Type of the resource. Always compute#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 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
      
        # [Output Only] Server-defined URL for the resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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] Type of the resource. Always compute#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 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::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, read Using Target Proxies and Forwarding rule concepts.
      class TargetHttpProxy
        include Google::Apis::Core::Hashable
      
        # [Output Only] Creation timestamp in RFC3339 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] 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 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
      
        # This field only applies when the forwarding rule that references this target
        # proxy has a loadBalancingScheme set to INTERNAL_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] 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] Type of resource. Always compute#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 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] 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
      
        # 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 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::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, read Using 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 global TargetHttpsProxy attached to globalForwardingRules with
        # the loadBalancingScheme 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] Creation timestamp in RFC3339 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] Type of resource. Always compute#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 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
      
        # This field only applies when the forwarding rule that references this target
        # proxy has a loadBalancingScheme set to INTERNAL_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, or DISABLE. - 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] 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 global TargetHttpsProxy attached to globalForwardingRules
        # with the loadBalancingScheme set to INTERNAL_SELF_MANAGED or EXTERNAL or
        # EXTERNAL_MANAGED or INTERNAL_MANAGED. It also applies to a regional
        # TargetHttpsProxy attached to regional forwardingRules with the
        # loadBalancingScheme set to EXTERNAL_MANAGED or INTERNAL_MANAGED. For details
        # which ServerTlsPolicy resources are accepted with INTERNAL_SELF_MANAGED and
        # which with EXTERNAL, INTERNAL_MANAGED, EXTERNAL_MANAGED loadBalancingScheme
        # 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] Type of resource. Always compute#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 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] 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
      
        # 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 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::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, read Target instances.
      class TargetInstance
        include Google::Apis::Core::Hashable
      
        # [Output Only] Creation timestamp in RFC3339 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] The type of the resource. Always compute#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 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
      
        # 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] 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
      
        # 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 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] 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
      
        # 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 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::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, read Using 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 below failoverRatio, 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] Creation timestamp in RFC3339 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] 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 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
      
        # [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] Type of resource. Always compute#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 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] 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] Type of resource. Always compute#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] 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 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::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, read Proxy 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] Creation timestamp in RFC3339 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] Type of the resource. Always compute#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 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
      
        # 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
      
        # 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 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::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, read Proxy Network Load Balancer overview.
      class TargetTcpProxy
        include Google::Apis::Core::Hashable
      
        # [Output Only] Creation timestamp in RFC3339 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] Type of the resource. Always compute#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 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
      
        # This field only applies when the forwarding rule that references this target
        # proxy has a loadBalancingScheme set to INTERNAL_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] 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] Type of resource. Always compute#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 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] 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
      
        # 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 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::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 the the
      # Cloud VPN Overview.
      class TargetVpnGateway
        include Google::Apis::Core::Hashable
      
        # [Output Only] Creation timestamp in RFC3339 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 using compute.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] Type of resource. Always compute#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 error 412 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 the setLabels
        # method. Each label key/value pair must comply with RFC1035. 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 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
      
        # 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] Type of resource. Always compute#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 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] 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] Type of resource. Always compute#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 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::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 a loadBalancingScheme of
      # INTERNAL_MANAGED. For more information, read URL Map Concepts.
      class UrlMap
        include Google::Apis::Core::Hashable
      
        # [Output Only] Creation timestamp in RFC3339 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] 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 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
      
        # 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] 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 the UrlMap 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
      
        # 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 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::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 when expectedOutputUrl matches the request forwarded by
        # the load balancer to backends. For rules with urlRewrite, the test verifies
        # that the forwarded request matches hostRewrite and pathPrefixRewrite in the
        # urlRewrite action. When service is specified, expectedOutputUrl`s scheme is
        # ignored. For rules with urlRedirect, the test passes only if expectedOutputUrl
        # matches the URL in the load balancer's redirect response. If urlRedirect
        # specifies https_redirect, the test passes only if the scheme in
        # expectedOutputUrl 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 when service is specified.
        # Corresponds to the JSON property `expectedOutputUrl`
        # @return [String]
        attr_accessor :expected_output_url
      
        # For rules with urlRedirect, the test passes only if
        # expectedRedirectResponseCode matches the HTTP status code in load balancer's
        # redirect response. expectedRedirectResponseCode cannot be set when service 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
      
        # 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 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] 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. Use
        # EXTERNAL_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 a loadBalancingScheme 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 by pathPrefixRewrite. 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 or path_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] 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] 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 or REGIONAL_MANAGED_PROXY. The value can be set to
        # ACTIVE 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 to IPV4_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 using patch.
        # 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.
        # 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 with RFC1035. 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] Type of resource. Always compute#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 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. In special cases listUsable may return 0
        # subnetworks and nextPageToken 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] 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] Server-defined URL for this resource.
        # Corresponds to the JSON property `selfLink`
        # @return [String]
        attr_accessor :self_link
      
        # [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 as example-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 in
        # bucketName. If not supplied, defaults to usage_gce. The report is stored as a
        # CSV file named report_name_prefix_gce_YYYYMMDD.csv where YYYYMMDD is the day
        # of the usage according to Pacific Time. If you supply a prefix, it should
        # conform to Cloud Storage object 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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
      
        # 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] Type of resource. Always compute#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 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] 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] 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] Creation timestamp in RFC3339 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] 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 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 error 412 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 the setLabels
        # method. Each label key/value pair must comply with RFC1035. 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 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
      
        # 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 VPN gateway resides.
        # 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 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 is IPV4, or IPV4_IPV6
        # if the gateway IP version is IPV6.
        # 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] 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 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] 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] 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 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::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
      
        # 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
      
        # The VPN gateway interface this VPN tunnel is associated with.
        # Corresponds to the JSON property `localGatewayInterface`
        # @return [Fixnum]
        attr_accessor :local_gateway_interface
      
        # 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
      
        # 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
      
        # 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
      
        # 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] 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] 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] 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] Creation timestamp in RFC3339 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] 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 error 412 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 the setLabels
        # method. Each label key/value pair must comply with RFC1035. 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 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
      
        # 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] 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 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] 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] 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 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::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 this backendServiceWeight.
        # 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 as
        # weight / (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
      
      # 
      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] 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 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::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
      # the us-east1 region. For more information, read Regions 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 in RFC3339 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] 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 or DOWN.
        # Corresponds to the JSON property `status`
        # @return [String]
        attr_accessor :status
      
        # [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
      
        # 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 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::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 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
