<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="compute_alpha.html">Compute Engine API</a> . <a href="compute_alpha.autoscalers.html">autoscalers</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#aggregatedList">aggregatedList(project, orderBy=None, maxResults=None, pageToken=None, filter=None)</a></code></p>
<p class="firstline">Retrieves an aggregated list of autoscalers.</p>
<p class="toc_element">
  <code><a href="#aggregatedList_next">aggregatedList_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#delete">delete(project, zone, autoscaler, requestId=None)</a></code></p>
<p class="firstline">Deletes the specified autoscaler.</p>
<p class="toc_element">
  <code><a href="#get">get(project, zone, autoscaler)</a></code></p>
<p class="firstline">Returns the specified autoscaler resource. Gets a list of available autoscalers by making a list() request.</p>
<p class="toc_element">
  <code><a href="#insert">insert(project, zone, body, requestId=None)</a></code></p>
<p class="firstline">Creates an autoscaler in the specified project using the data included in the request.</p>
<p class="toc_element">
  <code><a href="#list">list(project, zone, orderBy=None, maxResults=None, pageToken=None, filter=None)</a></code></p>
<p class="firstline">Retrieves a list of autoscalers contained within the specified zone.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(project, zone, body, requestId=None, autoscaler=None)</a></code></p>
<p class="firstline">Updates an autoscaler in the specified project using the data included in the request. This method supports PATCH semantics and uses the JSON merge patch format and processing rules.</p>
<p class="toc_element">
  <code><a href="#testIamPermissions">testIamPermissions(project, zone, resource, body)</a></code></p>
<p class="firstline">Returns permissions that a caller has on the specified resource.</p>
<p class="toc_element">
  <code><a href="#update">update(project, zone, body, requestId=None, autoscaler=None)</a></code></p>
<p class="firstline">Updates an autoscaler in the specified project using the data included in the request.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="aggregatedList">aggregatedList(project, orderBy=None, maxResults=None, pageToken=None, filter=None)</code>
  <pre>Retrieves an aggregated list of autoscalers.

Args:
  project: string, Project ID for this request. (required)
  orderBy: string, Sorts list results by a certain order. By default, results are returned in alphanumerical order based on the resource name.

You can also sort results in descending order based on the creation timestamp using orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.

Currently, only sorting by name or creationTimestamp desc is supported.
  maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests. Acceptable values are 0 to 500, inclusive. (Default: 500)
  pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
  filter: string, A filter expression that filters resources listed in the response. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The comparison operator must be either =, !=, >, or <.

For example, if you are filtering Compute Engine instances, you can exclude instances named example-instance by specifying name != example-instance.

You can also filter nested fields. For example, you could specify scheduling.automaticRestart = false to include instances only if they are not scheduled for automatic restarts. You can use filtering on nested fields to filter based on resource labels.

To filter on multiple expressions, provide each separate expression within parentheses. For example, (scheduling.automaticRestart = true) (cpuPlatform = "Intel Skylake"). By default, each expression is an AND expression. However, you can include AND and OR expressions explicitly. For example, (cpuPlatform = "Intel Skylake") OR (cpuPlatform = "Intel Broadwell") AND (scheduling.automaticRestart = true).

Returns:
  An object of the form:

    {
    "nextPageToken": "A String", # [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.
    "kind": "compute#autoscalerAggregatedList", # [Output Only] Type of resource. Always compute#autoscalerAggregatedList for aggregated lists of autoscalers.
    "items": { # A list of AutoscalersScopedList resources.
      "a_key": { # [Output Only] Name of the scope containing this set of autoscalers.
        "warning": { # [Output Only] Informational warning which replaces the list of autoscalers when the list is empty.
          "message": "A String", # [Output Only] A human-readable description of the warning code.
          "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
          "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
              # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
            {
              "value": "A String", # [Output Only] A warning data value corresponding to the key.
              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
            },
          ],
        },
        "autoscalers": [ # [Output Only] A list of autoscalers contained in this scope.
          { # Represents an Autoscaler resource.
                #
                #
                #
                # 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. (== resource_for beta.autoscalers ==) (== resource_for v1.autoscalers ==) (== resource_for beta.regionAutoscalers ==) (== resource_for v1.regionAutoscalers ==)
              "status": "A String", # [Output Only] The status of the autoscaler configuration.
              "recommendedSize": 42, # [Output Only] Target recommended MIG size (number of instances) computed by autoscaler. Autoscaler calculates recommended MIG size even when autoscaling policy mode is different from ON. This field is empty when autoscaler is not connected to the existing managed instance group or autoscaler did not generate its prediction.
              "kind": "compute#autoscaler", # [Output Only] Type of the resource. Always compute#autoscaler for autoscalers.
              "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
              "zone": "A String", # [Output Only] URL of the zone where the instance group resides (for autoscalers living in zonal scope).
              "region": "A String", # [Output Only] URL of the region where the instance group resides (for autoscalers living in regional scope).
              "autoscalingPolicy": { # Cloud Autoscaler policy. # The configuration parameters for the autoscaling algorithm. You can define one or more of the policies for an autoscaler: cpuUtilization, customMetricUtilizations, and loadBalancingUtilization.
                  #
                  # If none of these are specified, the default will be to autoscale based on cpuUtilization to 0.6 or 60%.
                "maxNumReplicas": 42, # The maximum number of instances that the autoscaler can scale up to. This is required when creating or updating an autoscaler. The maximum number of replicas should not be lower than minimal number of replicas.
                "coolDownPeriodSec": 42, # The number of seconds that the autoscaler should wait before it starts collecting information from a new instance. This prevents the autoscaler from collecting information when the instance is initializing, during which the collected usage would not be reliable. The default time autoscaler waits is 60 seconds.
                    #
                    # Virtual machine initialization times might vary because of numerous factors. We recommend that you test how long an instance may take to initialize. To do this, create an instance and time the startup process.
                "loadBalancingUtilization": { # Configuration parameters of autoscaling based on load balancing. # Configuration parameters of autoscaling based on load balancer.
                  "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP(S) load balancing configuration) that autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8.
                },
                "queueBasedScaling": { # Configuration parameters of autoscaling based on queuing system. # Configuration parameters of autoscaling based on queuing system.
                  "acceptableBacklogPerInstance": 3.14, # Scaling based on the average number of tasks in the queue per each active instance. The autoscaler keeps the average number of tasks per instance below this number, based on data collected in the last couple of minutes. The autoscaler will also take into account incoming tasks when calculating when to scale.
                  "singleWorkerThroughputPerSec": 3.14, # The scaling algorithm will also calculate throughput estimates on its own; if you explicitly provide this value, the autoscaler will take into account your value as well as automatic estimates when deciding how to scale.
                  "cloudPubSub": { # Configuration parameters for scaling based on Cloud Pub/Sub subscription queue. # Configuration for Cloud Pub/Sub subscription queue.
                    "topic": "A String", # Cloud Pub/Sub topic used for scaling. Provide the partial URL or partial URL (starting with projects/) or just the topic name. The topic must belong to the same project as the Autoscaler resource.
                    "subscription": "A String", # Cloud Pub/Sub subscription used for scaling. Provide the partial URL (starting with projects/) or just the subscription name. The subscription must be assigned to the topic specified in topicName and must be in a pull configuration. The subscription must belong to the same project as the Autoscaler.
                  },
                },
                "customMetricUtilizations": [ # Configuration parameters of autoscaling based on a custom metric.
                  { # Custom utilization metric policy.
                    "filter": "A String", # 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.
                        #
                        # You should 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.
                    "metric": "A String", # 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.
                    "singleInstanceAssignment": 3.14, # 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 will keep the number of instances proportional to the value of this metric, the metric itself should 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.
                    "utilizationTarget": 3.14, # The target value of the metric that autoscaler should maintain. 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 compute.googleapis.com/instance/network/received_bytes_count. The autoscaler will work to keep this value constant for each of the instances.
                    "utilizationTargetType": "A String", # Defines how target utilization value is expressed for a Stackdriver Monitoring metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE.
                  },
                ],
                "mode": "A String", # Defines operating mode for this policy.
                "cpuUtilization": { # CPU utilization policy. # Defines the CPU utilization policy that allows the autoscaler to scale based on the average CPU utilization of a managed instance group.
                  "utilizationTarget": 3.14, # The target CPU utilization that the autoscaler should maintain. 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 down 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 up until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.
                },
                "minNumReplicas": 42, # The minimum number of replicas that the autoscaler can scale down to. This cannot be less than 0. If not provided, autoscaler will choose a default value depending on maximum number of instances allowed.
                "scaleDownControl": { # Configuration that allows for slower scale down so that even if Autoscaler recommends an abrupt scale down of a MIG, it will be throttled as specified by the parameters below.
                  "maxScaledDownReplicas": { # Encapsulates numeric value that can be either absolute or relative. # Maximum allowed number (or %) of VMs that can be deducted from the peak recommendation during the window autoscaler looks at when computing recommendations. Possibly all these VMs can be deleted at once so user service needs to be prepared to lose that many VMs in one step.
                    "calculated": 42, # [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 up.
                    "fixed": 42, # Specifies a fixed number of VM instances. This must be a positive integer.
                    "percent": 42, # Specifies a percentage of instances between 0 to 100%, inclusive. For example, specify 80 for 80%.
                  },
                  "timeWindowSec": 42, # How long back autoscaling should look when computing recommendations to include directives regarding slower scale down, as described above.
                },
              },
              "target": "A String", # URL of the managed instance group that this autoscaler will scale.
              "statusDetails": [ # [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.
                {
                  "message": "A String", # The status message.
                  "type": "A String", # The type of error returned.
                },
              ],
              "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
              "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
              "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
              "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
              "name": "A String", # 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.
            },
        ],
      },
    },
    "warning": { # [Output Only] Informational warning message.
      "message": "A String", # [Output Only] A human-readable description of the warning code.
      "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
      "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
          # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
        {
          "value": "A String", # [Output Only] A warning data value corresponding to the key.
          "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
        },
      ],
    },
    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
    "selfLink": "A String", # [Output Only] Server-defined URL for this resource.
  }</pre>
</div>

<div class="method">
    <code class="details" id="aggregatedList_next">aggregatedList_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(project, zone, autoscaler, requestId=None)</code>
  <pre>Deletes the specified autoscaler.

Args:
  project: string, Project ID for this request. (required)
  zone: string, Name of the zone for this request. (required)
  autoscaler: string, Name of the autoscaler to delete. (required)
  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # 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 zonalOperations resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for v1.globalOperations ==) (== resource_for beta.globalOperations ==) (== resource_for v1.regionOperations ==) (== resource_for beta.regionOperations ==) (== resource_for v1.zoneOperations ==) (== resource_for beta.zoneOperations ==)
    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    "clientOperationId": "A String", # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    "creationTimestamp": "A String", # [Deprecated] This field is deprecated.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
    "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
    "progress": 42, # [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.
    "httpErrorStatusCode": 42, # [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.
    "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
    "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        "message": "A String", # [Output Only] A human-readable description of the warning code.
        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
          {
            "value": "A String", # [Output Only] A warning data value corresponding to the key.
            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
          },
        ],
      },
    ],
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    "kind": "compute#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
    "name": "A String", # [Output Only] Name of the resource.
    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      "errors": [ # [Output Only] The array of errors encountered while processing this operation.
        {
          "message": "A String", # [Output Only] An optional, human-readable error message.
          "code": "A String", # [Output Only] The error type identifier for this error.
          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        },
      ],
    },
    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies. For operations related to creating a snapshot, this points to the persistent disk that the snapshot was created from.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(project, zone, autoscaler)</code>
  <pre>Returns the specified autoscaler resource. Gets a list of available autoscalers by making a list() request.

Args:
  project: string, Project ID for this request. (required)
  zone: string, Name of the zone for this request. (required)
  autoscaler: string, Name of the autoscaler to return. (required)

Returns:
  An object of the form:

    { # Represents an Autoscaler resource.
        #
        #
        #
        # 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. (== resource_for beta.autoscalers ==) (== resource_for v1.autoscalers ==) (== resource_for beta.regionAutoscalers ==) (== resource_for v1.regionAutoscalers ==)
      "status": "A String", # [Output Only] The status of the autoscaler configuration.
      "recommendedSize": 42, # [Output Only] Target recommended MIG size (number of instances) computed by autoscaler. Autoscaler calculates recommended MIG size even when autoscaling policy mode is different from ON. This field is empty when autoscaler is not connected to the existing managed instance group or autoscaler did not generate its prediction.
      "kind": "compute#autoscaler", # [Output Only] Type of the resource. Always compute#autoscaler for autoscalers.
      "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
      "zone": "A String", # [Output Only] URL of the zone where the instance group resides (for autoscalers living in zonal scope).
      "region": "A String", # [Output Only] URL of the region where the instance group resides (for autoscalers living in regional scope).
      "autoscalingPolicy": { # Cloud Autoscaler policy. # The configuration parameters for the autoscaling algorithm. You can define one or more of the policies for an autoscaler: cpuUtilization, customMetricUtilizations, and loadBalancingUtilization.
          #
          # If none of these are specified, the default will be to autoscale based on cpuUtilization to 0.6 or 60%.
        "maxNumReplicas": 42, # The maximum number of instances that the autoscaler can scale up to. This is required when creating or updating an autoscaler. The maximum number of replicas should not be lower than minimal number of replicas.
        "coolDownPeriodSec": 42, # The number of seconds that the autoscaler should wait before it starts collecting information from a new instance. This prevents the autoscaler from collecting information when the instance is initializing, during which the collected usage would not be reliable. The default time autoscaler waits is 60 seconds.
            #
            # Virtual machine initialization times might vary because of numerous factors. We recommend that you test how long an instance may take to initialize. To do this, create an instance and time the startup process.
        "loadBalancingUtilization": { # Configuration parameters of autoscaling based on load balancing. # Configuration parameters of autoscaling based on load balancer.
          "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP(S) load balancing configuration) that autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8.
        },
        "queueBasedScaling": { # Configuration parameters of autoscaling based on queuing system. # Configuration parameters of autoscaling based on queuing system.
          "acceptableBacklogPerInstance": 3.14, # Scaling based on the average number of tasks in the queue per each active instance. The autoscaler keeps the average number of tasks per instance below this number, based on data collected in the last couple of minutes. The autoscaler will also take into account incoming tasks when calculating when to scale.
          "singleWorkerThroughputPerSec": 3.14, # The scaling algorithm will also calculate throughput estimates on its own; if you explicitly provide this value, the autoscaler will take into account your value as well as automatic estimates when deciding how to scale.
          "cloudPubSub": { # Configuration parameters for scaling based on Cloud Pub/Sub subscription queue. # Configuration for Cloud Pub/Sub subscription queue.
            "topic": "A String", # Cloud Pub/Sub topic used for scaling. Provide the partial URL or partial URL (starting with projects/) or just the topic name. The topic must belong to the same project as the Autoscaler resource.
            "subscription": "A String", # Cloud Pub/Sub subscription used for scaling. Provide the partial URL (starting with projects/) or just the subscription name. The subscription must be assigned to the topic specified in topicName and must be in a pull configuration. The subscription must belong to the same project as the Autoscaler.
          },
        },
        "customMetricUtilizations": [ # Configuration parameters of autoscaling based on a custom metric.
          { # Custom utilization metric policy.
            "filter": "A String", # 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.
                #
                # You should 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.
            "metric": "A String", # 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.
            "singleInstanceAssignment": 3.14, # 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 will keep the number of instances proportional to the value of this metric, the metric itself should 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.
            "utilizationTarget": 3.14, # The target value of the metric that autoscaler should maintain. 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 compute.googleapis.com/instance/network/received_bytes_count. The autoscaler will work to keep this value constant for each of the instances.
            "utilizationTargetType": "A String", # Defines how target utilization value is expressed for a Stackdriver Monitoring metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE.
          },
        ],
        "mode": "A String", # Defines operating mode for this policy.
        "cpuUtilization": { # CPU utilization policy. # Defines the CPU utilization policy that allows the autoscaler to scale based on the average CPU utilization of a managed instance group.
          "utilizationTarget": 3.14, # The target CPU utilization that the autoscaler should maintain. 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 down 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 up until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.
        },
        "minNumReplicas": 42, # The minimum number of replicas that the autoscaler can scale down to. This cannot be less than 0. If not provided, autoscaler will choose a default value depending on maximum number of instances allowed.
        "scaleDownControl": { # Configuration that allows for slower scale down so that even if Autoscaler recommends an abrupt scale down of a MIG, it will be throttled as specified by the parameters below.
          "maxScaledDownReplicas": { # Encapsulates numeric value that can be either absolute or relative. # Maximum allowed number (or %) of VMs that can be deducted from the peak recommendation during the window autoscaler looks at when computing recommendations. Possibly all these VMs can be deleted at once so user service needs to be prepared to lose that many VMs in one step.
            "calculated": 42, # [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 up.
            "fixed": 42, # Specifies a fixed number of VM instances. This must be a positive integer.
            "percent": 42, # Specifies a percentage of instances between 0 to 100%, inclusive. For example, specify 80 for 80%.
          },
          "timeWindowSec": 42, # How long back autoscaling should look when computing recommendations to include directives regarding slower scale down, as described above.
        },
      },
      "target": "A String", # URL of the managed instance group that this autoscaler will scale.
      "statusDetails": [ # [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.
        {
          "message": "A String", # The status message.
          "type": "A String", # The type of error returned.
        },
      ],
      "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
      "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
      "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
      "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
      "name": "A String", # 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.
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(project, zone, body, requestId=None)</code>
  <pre>Creates an autoscaler in the specified project using the data included in the request.

Args:
  project: string, Project ID for this request. (required)
  zone: string, Name of the zone for this request. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Represents an Autoscaler resource.
      # 
      # 
      # 
      # 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. (== resource_for beta.autoscalers ==) (== resource_for v1.autoscalers ==) (== resource_for beta.regionAutoscalers ==) (== resource_for v1.regionAutoscalers ==)
    "status": "A String", # [Output Only] The status of the autoscaler configuration.
    "recommendedSize": 42, # [Output Only] Target recommended MIG size (number of instances) computed by autoscaler. Autoscaler calculates recommended MIG size even when autoscaling policy mode is different from ON. This field is empty when autoscaler is not connected to the existing managed instance group or autoscaler did not generate its prediction.
    "kind": "compute#autoscaler", # [Output Only] Type of the resource. Always compute#autoscaler for autoscalers.
    "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
    "zone": "A String", # [Output Only] URL of the zone where the instance group resides (for autoscalers living in zonal scope).
    "region": "A String", # [Output Only] URL of the region where the instance group resides (for autoscalers living in regional scope).
    "autoscalingPolicy": { # Cloud Autoscaler policy. # The configuration parameters for the autoscaling algorithm. You can define one or more of the policies for an autoscaler: cpuUtilization, customMetricUtilizations, and loadBalancingUtilization.
        # 
        # If none of these are specified, the default will be to autoscale based on cpuUtilization to 0.6 or 60%.
      "maxNumReplicas": 42, # The maximum number of instances that the autoscaler can scale up to. This is required when creating or updating an autoscaler. The maximum number of replicas should not be lower than minimal number of replicas.
      "coolDownPeriodSec": 42, # The number of seconds that the autoscaler should wait before it starts collecting information from a new instance. This prevents the autoscaler from collecting information when the instance is initializing, during which the collected usage would not be reliable. The default time autoscaler waits is 60 seconds.
          #
          # Virtual machine initialization times might vary because of numerous factors. We recommend that you test how long an instance may take to initialize. To do this, create an instance and time the startup process.
      "loadBalancingUtilization": { # Configuration parameters of autoscaling based on load balancing. # Configuration parameters of autoscaling based on load balancer.
        "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP(S) load balancing configuration) that autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8.
      },
      "queueBasedScaling": { # Configuration parameters of autoscaling based on queuing system. # Configuration parameters of autoscaling based on queuing system.
        "acceptableBacklogPerInstance": 3.14, # Scaling based on the average number of tasks in the queue per each active instance. The autoscaler keeps the average number of tasks per instance below this number, based on data collected in the last couple of minutes. The autoscaler will also take into account incoming tasks when calculating when to scale.
        "singleWorkerThroughputPerSec": 3.14, # The scaling algorithm will also calculate throughput estimates on its own; if you explicitly provide this value, the autoscaler will take into account your value as well as automatic estimates when deciding how to scale.
        "cloudPubSub": { # Configuration parameters for scaling based on Cloud Pub/Sub subscription queue. # Configuration for Cloud Pub/Sub subscription queue.
          "topic": "A String", # Cloud Pub/Sub topic used for scaling. Provide the partial URL or partial URL (starting with projects/) or just the topic name. The topic must belong to the same project as the Autoscaler resource.
          "subscription": "A String", # Cloud Pub/Sub subscription used for scaling. Provide the partial URL (starting with projects/) or just the subscription name. The subscription must be assigned to the topic specified in topicName and must be in a pull configuration. The subscription must belong to the same project as the Autoscaler.
        },
      },
      "customMetricUtilizations": [ # Configuration parameters of autoscaling based on a custom metric.
        { # Custom utilization metric policy.
          "filter": "A String", # 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.
              #
              # You should 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.
          "metric": "A String", # 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.
          "singleInstanceAssignment": 3.14, # 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 will keep the number of instances proportional to the value of this metric, the metric itself should 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.
          "utilizationTarget": 3.14, # The target value of the metric that autoscaler should maintain. 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 compute.googleapis.com/instance/network/received_bytes_count. The autoscaler will work to keep this value constant for each of the instances.
          "utilizationTargetType": "A String", # Defines how target utilization value is expressed for a Stackdriver Monitoring metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE.
        },
      ],
      "mode": "A String", # Defines operating mode for this policy.
      "cpuUtilization": { # CPU utilization policy. # Defines the CPU utilization policy that allows the autoscaler to scale based on the average CPU utilization of a managed instance group.
        "utilizationTarget": 3.14, # The target CPU utilization that the autoscaler should maintain. 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 down 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 up until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.
      },
      "minNumReplicas": 42, # The minimum number of replicas that the autoscaler can scale down to. This cannot be less than 0. If not provided, autoscaler will choose a default value depending on maximum number of instances allowed.
      "scaleDownControl": { # Configuration that allows for slower scale down so that even if Autoscaler recommends an abrupt scale down of a MIG, it will be throttled as specified by the parameters below.
        "maxScaledDownReplicas": { # Encapsulates numeric value that can be either absolute or relative. # Maximum allowed number (or %) of VMs that can be deducted from the peak recommendation during the window autoscaler looks at when computing recommendations. Possibly all these VMs can be deleted at once so user service needs to be prepared to lose that many VMs in one step.
          "calculated": 42, # [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 up.
          "fixed": 42, # Specifies a fixed number of VM instances. This must be a positive integer.
          "percent": 42, # Specifies a percentage of instances between 0 to 100%, inclusive. For example, specify 80 for 80%.
        },
        "timeWindowSec": 42, # How long back autoscaling should look when computing recommendations to include directives regarding slower scale down, as described above.
      },
    },
    "target": "A String", # URL of the managed instance group that this autoscaler will scale.
    "statusDetails": [ # [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.
      {
        "message": "A String", # The status message.
        "type": "A String", # The type of error returned.
      },
    ],
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "name": "A String", # 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.
  }

  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # 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 zonalOperations resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for v1.globalOperations ==) (== resource_for beta.globalOperations ==) (== resource_for v1.regionOperations ==) (== resource_for beta.regionOperations ==) (== resource_for v1.zoneOperations ==) (== resource_for beta.zoneOperations ==)
    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    "clientOperationId": "A String", # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    "creationTimestamp": "A String", # [Deprecated] This field is deprecated.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
    "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
    "progress": 42, # [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.
    "httpErrorStatusCode": 42, # [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.
    "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
    "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        "message": "A String", # [Output Only] A human-readable description of the warning code.
        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
          {
            "value": "A String", # [Output Only] A warning data value corresponding to the key.
            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
          },
        ],
      },
    ],
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    "kind": "compute#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
    "name": "A String", # [Output Only] Name of the resource.
    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      "errors": [ # [Output Only] The array of errors encountered while processing this operation.
        {
          "message": "A String", # [Output Only] An optional, human-readable error message.
          "code": "A String", # [Output Only] The error type identifier for this error.
          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        },
      ],
    },
    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies. For operations related to creating a snapshot, this points to the persistent disk that the snapshot was created from.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(project, zone, orderBy=None, maxResults=None, pageToken=None, filter=None)</code>
  <pre>Retrieves a list of autoscalers contained within the specified zone.

Args:
  project: string, Project ID for this request. (required)
  zone: string, Name of the zone for this request. (required)
  orderBy: string, Sorts list results by a certain order. By default, results are returned in alphanumerical order based on the resource name.

You can also sort results in descending order based on the creation timestamp using orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.

Currently, only sorting by name or creationTimestamp desc is supported.
  maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests. Acceptable values are 0 to 500, inclusive. (Default: 500)
  pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
  filter: string, A filter expression that filters resources listed in the response. The expression must specify the field name, a comparison operator, and the value that you want to use for filtering. The value must be a string, a number, or a boolean. The comparison operator must be either =, !=, >, or <.

For example, if you are filtering Compute Engine instances, you can exclude instances named example-instance by specifying name != example-instance.

You can also filter nested fields. For example, you could specify scheduling.automaticRestart = false to include instances only if they are not scheduled for automatic restarts. You can use filtering on nested fields to filter based on resource labels.

To filter on multiple expressions, provide each separate expression within parentheses. For example, (scheduling.automaticRestart = true) (cpuPlatform = "Intel Skylake"). By default, each expression is an AND expression. However, you can include AND and OR expressions explicitly. For example, (cpuPlatform = "Intel Skylake") OR (cpuPlatform = "Intel Broadwell") AND (scheduling.automaticRestart = true).

Returns:
  An object of the form:

    { # Contains a list of Autoscaler resources.
    "nextPageToken": "A String", # [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.
    "kind": "compute#autoscalerList", # [Output Only] Type of resource. Always compute#autoscalerList for lists of autoscalers.
    "items": [ # A list of Autoscaler resources.
      { # Represents an Autoscaler resource.
            #
            #
            #
            # 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. (== resource_for beta.autoscalers ==) (== resource_for v1.autoscalers ==) (== resource_for beta.regionAutoscalers ==) (== resource_for v1.regionAutoscalers ==)
          "status": "A String", # [Output Only] The status of the autoscaler configuration.
          "recommendedSize": 42, # [Output Only] Target recommended MIG size (number of instances) computed by autoscaler. Autoscaler calculates recommended MIG size even when autoscaling policy mode is different from ON. This field is empty when autoscaler is not connected to the existing managed instance group or autoscaler did not generate its prediction.
          "kind": "compute#autoscaler", # [Output Only] Type of the resource. Always compute#autoscaler for autoscalers.
          "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
          "zone": "A String", # [Output Only] URL of the zone where the instance group resides (for autoscalers living in zonal scope).
          "region": "A String", # [Output Only] URL of the region where the instance group resides (for autoscalers living in regional scope).
          "autoscalingPolicy": { # Cloud Autoscaler policy. # The configuration parameters for the autoscaling algorithm. You can define one or more of the policies for an autoscaler: cpuUtilization, customMetricUtilizations, and loadBalancingUtilization.
              #
              # If none of these are specified, the default will be to autoscale based on cpuUtilization to 0.6 or 60%.
            "maxNumReplicas": 42, # The maximum number of instances that the autoscaler can scale up to. This is required when creating or updating an autoscaler. The maximum number of replicas should not be lower than minimal number of replicas.
            "coolDownPeriodSec": 42, # The number of seconds that the autoscaler should wait before it starts collecting information from a new instance. This prevents the autoscaler from collecting information when the instance is initializing, during which the collected usage would not be reliable. The default time autoscaler waits is 60 seconds.
                #
                # Virtual machine initialization times might vary because of numerous factors. We recommend that you test how long an instance may take to initialize. To do this, create an instance and time the startup process.
            "loadBalancingUtilization": { # Configuration parameters of autoscaling based on load balancing. # Configuration parameters of autoscaling based on load balancer.
              "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP(S) load balancing configuration) that autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8.
            },
            "queueBasedScaling": { # Configuration parameters of autoscaling based on queuing system. # Configuration parameters of autoscaling based on queuing system.
              "acceptableBacklogPerInstance": 3.14, # Scaling based on the average number of tasks in the queue per each active instance. The autoscaler keeps the average number of tasks per instance below this number, based on data collected in the last couple of minutes. The autoscaler will also take into account incoming tasks when calculating when to scale.
              "singleWorkerThroughputPerSec": 3.14, # The scaling algorithm will also calculate throughput estimates on its own; if you explicitly provide this value, the autoscaler will take into account your value as well as automatic estimates when deciding how to scale.
              "cloudPubSub": { # Configuration parameters for scaling based on Cloud Pub/Sub subscription queue. # Configuration for Cloud Pub/Sub subscription queue.
                "topic": "A String", # Cloud Pub/Sub topic used for scaling. Provide the partial URL or partial URL (starting with projects/) or just the topic name. The topic must belong to the same project as the Autoscaler resource.
                "subscription": "A String", # Cloud Pub/Sub subscription used for scaling. Provide the partial URL (starting with projects/) or just the subscription name. The subscription must be assigned to the topic specified in topicName and must be in a pull configuration. The subscription must belong to the same project as the Autoscaler.
              },
            },
            "customMetricUtilizations": [ # Configuration parameters of autoscaling based on a custom metric.
              { # Custom utilization metric policy.
                "filter": "A String", # 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.
                    #
                    # You should 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.
                "metric": "A String", # 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.
                "singleInstanceAssignment": 3.14, # 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 will keep the number of instances proportional to the value of this metric, the metric itself should 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.
                "utilizationTarget": 3.14, # The target value of the metric that autoscaler should maintain. 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 compute.googleapis.com/instance/network/received_bytes_count. The autoscaler will work to keep this value constant for each of the instances.
                "utilizationTargetType": "A String", # Defines how target utilization value is expressed for a Stackdriver Monitoring metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE.
              },
            ],
            "mode": "A String", # Defines operating mode for this policy.
            "cpuUtilization": { # CPU utilization policy. # Defines the CPU utilization policy that allows the autoscaler to scale based on the average CPU utilization of a managed instance group.
              "utilizationTarget": 3.14, # The target CPU utilization that the autoscaler should maintain. 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 down 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 up until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.
            },
            "minNumReplicas": 42, # The minimum number of replicas that the autoscaler can scale down to. This cannot be less than 0. If not provided, autoscaler will choose a default value depending on maximum number of instances allowed.
            "scaleDownControl": { # Configuration that allows for slower scale down so that even if Autoscaler recommends an abrupt scale down of a MIG, it will be throttled as specified by the parameters below.
              "maxScaledDownReplicas": { # Encapsulates numeric value that can be either absolute or relative. # Maximum allowed number (or %) of VMs that can be deducted from the peak recommendation during the window autoscaler looks at when computing recommendations. Possibly all these VMs can be deleted at once so user service needs to be prepared to lose that many VMs in one step.
                "calculated": 42, # [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 up.
                "fixed": 42, # Specifies a fixed number of VM instances. This must be a positive integer.
                "percent": 42, # Specifies a percentage of instances between 0 to 100%, inclusive. For example, specify 80 for 80%.
              },
              "timeWindowSec": 42, # How long back autoscaling should look when computing recommendations to include directives regarding slower scale down, as described above.
            },
          },
          "target": "A String", # URL of the managed instance group that this autoscaler will scale.
          "statusDetails": [ # [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.
            {
              "message": "A String", # The status message.
              "type": "A String", # The type of error returned.
            },
          ],
          "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
          "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
          "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
          "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
          "name": "A String", # 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.
        },
    ],
    "warning": { # [Output Only] Informational warning message.
      "message": "A String", # [Output Only] A human-readable description of the warning code.
      "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
      "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
          # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
        {
          "value": "A String", # [Output Only] A warning data value corresponding to the key.
          "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
        },
      ],
    },
    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
    "selfLink": "A String", # [Output Only] Server-defined URL for this resource.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(project, zone, body, requestId=None, autoscaler=None)</code>
  <pre>Updates an autoscaler in the specified project using the data included in the request. This method supports PATCH semantics and uses the JSON merge patch format and processing rules.

Args:
  project: string, Project ID for this request. (required)
  zone: string, Name of the zone for this request. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Represents an Autoscaler resource.
      # 
      # 
      # 
      # 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. (== resource_for beta.autoscalers ==) (== resource_for v1.autoscalers ==) (== resource_for beta.regionAutoscalers ==) (== resource_for v1.regionAutoscalers ==)
    "status": "A String", # [Output Only] The status of the autoscaler configuration.
    "recommendedSize": 42, # [Output Only] Target recommended MIG size (number of instances) computed by autoscaler. Autoscaler calculates recommended MIG size even when autoscaling policy mode is different from ON. This field is empty when autoscaler is not connected to the existing managed instance group or autoscaler did not generate its prediction.
    "kind": "compute#autoscaler", # [Output Only] Type of the resource. Always compute#autoscaler for autoscalers.
    "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
    "zone": "A String", # [Output Only] URL of the zone where the instance group resides (for autoscalers living in zonal scope).
    "region": "A String", # [Output Only] URL of the region where the instance group resides (for autoscalers living in regional scope).
    "autoscalingPolicy": { # Cloud Autoscaler policy. # The configuration parameters for the autoscaling algorithm. You can define one or more of the policies for an autoscaler: cpuUtilization, customMetricUtilizations, and loadBalancingUtilization.
        # 
        # If none of these are specified, the default will be to autoscale based on cpuUtilization to 0.6 or 60%.
      "maxNumReplicas": 42, # The maximum number of instances that the autoscaler can scale up to. This is required when creating or updating an autoscaler. The maximum number of replicas should not be lower than minimal number of replicas.
      "coolDownPeriodSec": 42, # The number of seconds that the autoscaler should wait before it starts collecting information from a new instance. This prevents the autoscaler from collecting information when the instance is initializing, during which the collected usage would not be reliable. The default time autoscaler waits is 60 seconds.
          #
          # Virtual machine initialization times might vary because of numerous factors. We recommend that you test how long an instance may take to initialize. To do this, create an instance and time the startup process.
      "loadBalancingUtilization": { # Configuration parameters of autoscaling based on load balancing. # Configuration parameters of autoscaling based on load balancer.
        "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP(S) load balancing configuration) that autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8.
      },
      "queueBasedScaling": { # Configuration parameters of autoscaling based on queuing system. # Configuration parameters of autoscaling based on queuing system.
        "acceptableBacklogPerInstance": 3.14, # Scaling based on the average number of tasks in the queue per each active instance. The autoscaler keeps the average number of tasks per instance below this number, based on data collected in the last couple of minutes. The autoscaler will also take into account incoming tasks when calculating when to scale.
        "singleWorkerThroughputPerSec": 3.14, # The scaling algorithm will also calculate throughput estimates on its own; if you explicitly provide this value, the autoscaler will take into account your value as well as automatic estimates when deciding how to scale.
        "cloudPubSub": { # Configuration parameters for scaling based on Cloud Pub/Sub subscription queue. # Configuration for Cloud Pub/Sub subscription queue.
          "topic": "A String", # Cloud Pub/Sub topic used for scaling. Provide the partial URL or partial URL (starting with projects/) or just the topic name. The topic must belong to the same project as the Autoscaler resource.
          "subscription": "A String", # Cloud Pub/Sub subscription used for scaling. Provide the partial URL (starting with projects/) or just the subscription name. The subscription must be assigned to the topic specified in topicName and must be in a pull configuration. The subscription must belong to the same project as the Autoscaler.
        },
      },
      "customMetricUtilizations": [ # Configuration parameters of autoscaling based on a custom metric.
        { # Custom utilization metric policy.
          "filter": "A String", # 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.
              #
              # You should 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.
          "metric": "A String", # 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.
          "singleInstanceAssignment": 3.14, # 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 will keep the number of instances proportional to the value of this metric, the metric itself should 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.
          "utilizationTarget": 3.14, # The target value of the metric that autoscaler should maintain. 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 compute.googleapis.com/instance/network/received_bytes_count. The autoscaler will work to keep this value constant for each of the instances.
          "utilizationTargetType": "A String", # Defines how target utilization value is expressed for a Stackdriver Monitoring metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE.
        },
      ],
      "mode": "A String", # Defines operating mode for this policy.
      "cpuUtilization": { # CPU utilization policy. # Defines the CPU utilization policy that allows the autoscaler to scale based on the average CPU utilization of a managed instance group.
        "utilizationTarget": 3.14, # The target CPU utilization that the autoscaler should maintain. 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 down 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 up until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.
      },
      "minNumReplicas": 42, # The minimum number of replicas that the autoscaler can scale down to. This cannot be less than 0. If not provided, autoscaler will choose a default value depending on maximum number of instances allowed.
      "scaleDownControl": { # Configuration that allows for slower scale down so that even if Autoscaler recommends an abrupt scale down of a MIG, it will be throttled as specified by the parameters below.
        "maxScaledDownReplicas": { # Encapsulates numeric value that can be either absolute or relative. # Maximum allowed number (or %) of VMs that can be deducted from the peak recommendation during the window autoscaler looks at when computing recommendations. Possibly all these VMs can be deleted at once so user service needs to be prepared to lose that many VMs in one step.
          "calculated": 42, # [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 up.
          "fixed": 42, # Specifies a fixed number of VM instances. This must be a positive integer.
          "percent": 42, # Specifies a percentage of instances between 0 to 100%, inclusive. For example, specify 80 for 80%.
        },
        "timeWindowSec": 42, # How long back autoscaling should look when computing recommendations to include directives regarding slower scale down, as described above.
      },
    },
    "target": "A String", # URL of the managed instance group that this autoscaler will scale.
    "statusDetails": [ # [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.
      {
        "message": "A String", # The status message.
        "type": "A String", # The type of error returned.
      },
    ],
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "name": "A String", # 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.
  }

  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).
  autoscaler: string, Name of the autoscaler to patch.

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # 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 zonalOperations resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for v1.globalOperations ==) (== resource_for beta.globalOperations ==) (== resource_for v1.regionOperations ==) (== resource_for beta.regionOperations ==) (== resource_for v1.zoneOperations ==) (== resource_for beta.zoneOperations ==)
    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    "clientOperationId": "A String", # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    "creationTimestamp": "A String", # [Deprecated] This field is deprecated.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
    "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
    "progress": 42, # [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.
    "httpErrorStatusCode": 42, # [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.
    "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
    "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        "message": "A String", # [Output Only] A human-readable description of the warning code.
        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
          {
            "value": "A String", # [Output Only] A warning data value corresponding to the key.
            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
          },
        ],
      },
    ],
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    "kind": "compute#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
    "name": "A String", # [Output Only] Name of the resource.
    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      "errors": [ # [Output Only] The array of errors encountered while processing this operation.
        {
          "message": "A String", # [Output Only] An optional, human-readable error message.
          "code": "A String", # [Output Only] The error type identifier for this error.
          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        },
      ],
    },
    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies. For operations related to creating a snapshot, this points to the persistent disk that the snapshot was created from.
  }</pre>
</div>

<div class="method">
    <code class="details" id="testIamPermissions">testIamPermissions(project, zone, resource, body)</code>
  <pre>Returns permissions that a caller has on the specified resource.

Args:
  project: string, Project ID for this request. (required)
  zone: string, The name of the zone for this request. (required)
  resource: string, Name or id of the resource for this request. (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "permissions": [ # The set of permissions to check for the 'resource'. Permissions with wildcards (such as '*' or 'storage.*') are not allowed.
      "A String",
    ],
  }


Returns:
  An object of the form:

    {
    "permissions": [ # A subset of `TestPermissionsRequest.permissions` that the caller is allowed.
      "A String",
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(project, zone, body, requestId=None, autoscaler=None)</code>
  <pre>Updates an autoscaler in the specified project using the data included in the request.

Args:
  project: string, Project ID for this request. (required)
  zone: string, Name of the zone for this request. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Represents an Autoscaler resource.
      # 
      # 
      # 
      # 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. (== resource_for beta.autoscalers ==) (== resource_for v1.autoscalers ==) (== resource_for beta.regionAutoscalers ==) (== resource_for v1.regionAutoscalers ==)
    "status": "A String", # [Output Only] The status of the autoscaler configuration.
    "recommendedSize": 42, # [Output Only] Target recommended MIG size (number of instances) computed by autoscaler. Autoscaler calculates recommended MIG size even when autoscaling policy mode is different from ON. This field is empty when autoscaler is not connected to the existing managed instance group or autoscaler did not generate its prediction.
    "kind": "compute#autoscaler", # [Output Only] Type of the resource. Always compute#autoscaler for autoscalers.
    "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
    "zone": "A String", # [Output Only] URL of the zone where the instance group resides (for autoscalers living in zonal scope).
    "region": "A String", # [Output Only] URL of the region where the instance group resides (for autoscalers living in regional scope).
    "autoscalingPolicy": { # Cloud Autoscaler policy. # The configuration parameters for the autoscaling algorithm. You can define one or more of the policies for an autoscaler: cpuUtilization, customMetricUtilizations, and loadBalancingUtilization.
        # 
        # If none of these are specified, the default will be to autoscale based on cpuUtilization to 0.6 or 60%.
      "maxNumReplicas": 42, # The maximum number of instances that the autoscaler can scale up to. This is required when creating or updating an autoscaler. The maximum number of replicas should not be lower than minimal number of replicas.
      "coolDownPeriodSec": 42, # The number of seconds that the autoscaler should wait before it starts collecting information from a new instance. This prevents the autoscaler from collecting information when the instance is initializing, during which the collected usage would not be reliable. The default time autoscaler waits is 60 seconds.
          #
          # Virtual machine initialization times might vary because of numerous factors. We recommend that you test how long an instance may take to initialize. To do this, create an instance and time the startup process.
      "loadBalancingUtilization": { # Configuration parameters of autoscaling based on load balancing. # Configuration parameters of autoscaling based on load balancer.
        "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP(S) load balancing configuration) that autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8.
      },
      "queueBasedScaling": { # Configuration parameters of autoscaling based on queuing system. # Configuration parameters of autoscaling based on queuing system.
        "acceptableBacklogPerInstance": 3.14, # Scaling based on the average number of tasks in the queue per each active instance. The autoscaler keeps the average number of tasks per instance below this number, based on data collected in the last couple of minutes. The autoscaler will also take into account incoming tasks when calculating when to scale.
        "singleWorkerThroughputPerSec": 3.14, # The scaling algorithm will also calculate throughput estimates on its own; if you explicitly provide this value, the autoscaler will take into account your value as well as automatic estimates when deciding how to scale.
        "cloudPubSub": { # Configuration parameters for scaling based on Cloud Pub/Sub subscription queue. # Configuration for Cloud Pub/Sub subscription queue.
          "topic": "A String", # Cloud Pub/Sub topic used for scaling. Provide the partial URL or partial URL (starting with projects/) or just the topic name. The topic must belong to the same project as the Autoscaler resource.
          "subscription": "A String", # Cloud Pub/Sub subscription used for scaling. Provide the partial URL (starting with projects/) or just the subscription name. The subscription must be assigned to the topic specified in topicName and must be in a pull configuration. The subscription must belong to the same project as the Autoscaler.
        },
      },
      "customMetricUtilizations": [ # Configuration parameters of autoscaling based on a custom metric.
        { # Custom utilization metric policy.
          "filter": "A String", # 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.
              #
              # You should 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.
          "metric": "A String", # 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.
          "singleInstanceAssignment": 3.14, # 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 will keep the number of instances proportional to the value of this metric, the metric itself should 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.
          "utilizationTarget": 3.14, # The target value of the metric that autoscaler should maintain. 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 compute.googleapis.com/instance/network/received_bytes_count. The autoscaler will work to keep this value constant for each of the instances.
          "utilizationTargetType": "A String", # Defines how target utilization value is expressed for a Stackdriver Monitoring metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE.
        },
      ],
      "mode": "A String", # Defines operating mode for this policy.
      "cpuUtilization": { # CPU utilization policy. # Defines the CPU utilization policy that allows the autoscaler to scale based on the average CPU utilization of a managed instance group.
        "utilizationTarget": 3.14, # The target CPU utilization that the autoscaler should maintain. 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 down 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 up until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.
      },
      "minNumReplicas": 42, # The minimum number of replicas that the autoscaler can scale down to. This cannot be less than 0. If not provided, autoscaler will choose a default value depending on maximum number of instances allowed.
      "scaleDownControl": { # Configuration that allows for slower scale down so that even if Autoscaler recommends an abrupt scale down of a MIG, it will be throttled as specified by the parameters below.
        "maxScaledDownReplicas": { # Encapsulates numeric value that can be either absolute or relative. # Maximum allowed number (or %) of VMs that can be deducted from the peak recommendation during the window autoscaler looks at when computing recommendations. Possibly all these VMs can be deleted at once so user service needs to be prepared to lose that many VMs in one step.
          "calculated": 42, # [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 up.
          "fixed": 42, # Specifies a fixed number of VM instances. This must be a positive integer.
          "percent": 42, # Specifies a percentage of instances between 0 to 100%, inclusive. For example, specify 80 for 80%.
        },
        "timeWindowSec": 42, # How long back autoscaling should look when computing recommendations to include directives regarding slower scale down, as described above.
      },
    },
    "target": "A String", # URL of the managed instance group that this autoscaler will scale.
    "statusDetails": [ # [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.
      {
        "message": "A String", # The status message.
        "type": "A String", # The type of error returned.
      },
    ],
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "name": "A String", # 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.
  }

  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed.

For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments.

The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).
  autoscaler: string, Name of the autoscaler to update.

Returns:
  An object of the form:

    { # Represents an Operation resource.
      #
      # 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 zonalOperations resource.
      #
      # For more information, read  Global, Regional, and Zonal Resources. (== resource_for v1.globalOperations ==) (== resource_for beta.globalOperations ==) (== resource_for v1.regionOperations ==) (== resource_for beta.regionOperations ==) (== resource_for v1.zoneOperations ==) (== resource_for beta.zoneOperations ==)
    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
    "clientOperationId": "A String", # [Output Only] The value of `requestId` if you provided it in the request. Not present otherwise.
    "creationTimestamp": "A String", # [Deprecated] This field is deprecated.
    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only applicable when performing per-zone operations.
    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
    "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
    "progress": 42, # [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.
    "httpErrorStatusCode": 42, # [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.
    "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
    "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
      {
        "message": "A String", # [Output Only] A human-readable description of the warning code.
        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
          {
            "value": "A String", # [Output Only] A warning data value corresponding to the key.
            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
          },
        ],
      },
    ],
    "selfLinkWithId": "A String", # [Output Only] Server-defined URL for this resource with the resource id.
    "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
    "kind": "compute#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
    "name": "A String", # [Output Only] Name of the resource.
    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only applicable when performing regional operations.
    "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
      "errors": [ # [Output Only] The array of errors encountered while processing this operation.
        {
          "message": "A String", # [Output Only] An optional, human-readable error message.
          "code": "A String", # [Output Only] The error type identifier for this error.
          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
        },
      ],
    },
    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies. For operations related to creating a snapshot, this points to the persistent disk that the snapshot was created from.
  }</pre>
</div>

</body></html>