<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_beta.html">Compute Engine API</a> . <a href="compute_beta.regionCommitments.html">regionCommitments</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#aggregatedList">aggregatedList(project, filter=None, includeAllScopes=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None, serviceProjectNumber=None, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves an aggregated list of commitments by region.</p>
<p class="toc_element">
  <code><a href="#aggregatedList_next">aggregatedList_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#get">get(project, region, commitment, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the specified commitment resource.</p>
<p class="toc_element">
  <code><a href="#insert">insert(project, region, body=None, requestId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a commitment in the specified project using the data</p>
<p class="toc_element">
  <code><a href="#list">list(project, region, filter=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves a list of commitments contained within</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#testIamPermissions">testIamPermissions(project, region, resource, body=None, x__xgafv=None)</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, region, commitment, body=None, paths=None, requestId=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified commitment with the data included in the request.</p>
<p class="toc_element">
  <code><a href="#updateReservations">updateReservations(project, region, commitment, body=None, requestId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Transfers GPUs or Local SSD disks between reservations that are attached</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="aggregatedList">aggregatedList(project, filter=None, includeAllScopes=None, maxResults=None, orderBy=None, pageToken=None, returnPartialSuccess=None, serviceProjectNumber=None, x__xgafv=None)</code>
  <pre>Retrieves an aggregated list of commitments by region.

To prevent failure, it is recommended that you set the
`returnPartialSuccess` parameter to `true`.

Args:
  project: string, Project ID for this request. (required)
  filter: string, A filter expression that filters resources listed in the response. Most
Compute resources support two types of filter expressions:
expressions that support regular expressions and expressions that follow
API improvement proposal AIP-160.
These two types of filter expressions cannot be mixed in one request.

If you want to use AIP-160, your expression must specify the field name, an
operator, and the value that you want to use for filtering. The value
must be a string, a number, or a boolean. The operator
must be either `=`, `!=`, `&gt;`, `&lt;`, `&lt;=`, `&gt;=` or `:`.

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

The `:*` comparison can be used to test whether a key has been defined.
For example, to find all objects with `owner` label use:
```
labels.owner:*
```

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 onresource labels.

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

If you want to use a regular expression, use the `eq` (equal) or `ne`
(not equal) operator against a single un-parenthesized expression with or
without quotes or against multiple parenthesized expressions. Examples:

`fieldname eq unquoted literal`
`fieldname eq &#x27;single quoted literal&#x27;`
`fieldname eq &quot;double quoted literal&quot;`
`(fieldname1 eq literal) (fieldname2 ne &quot;literal&quot;)`

The literal value is interpreted as a regular expression using GoogleRE2 library syntax.
The literal value must match the entire field.

For example, to filter for instances that do not end with name &quot;instance&quot;,
you would use `name ne .*instance`.

You cannot combine constraints on multiple fields using regular
expressions.
  includeAllScopes: boolean, Indicates whether every visible scope for each scope type (zone, region,
global) should be included in the response. For new resource types added
after this field, the flag has no effect as new resource types will always
include every visible scope for each scope type in response. For resource
types which predate this field, if this flag is omitted or false, only
scopes of the scope types where the resource type is expected to be found
will be included.
  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`)
  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=&quot;creationTimestamp desc&quot;`. 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.
  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.
  returnPartialSuccess: boolean, Opt-in for partial success behavior which provides partial results in case
of failure. The default value is false.

For example, when partial success behavior is enabled, aggregatedList for a
single zone scope either returns all resources in the zone or no resources,
with an error code.
  serviceProjectNumber: string, The Shared VPC service project id or service project number for which
aggregated list request is invoked for subnetworks list-usable api.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] Unique identifier for the resource; defined by the server.
  &quot;items&quot;: { # A list of CommitmentsScopedList resources.
    &quot;a_key&quot;: { # [Output Only] Name of the scope containing this set of commitments.
      &quot;commitments&quot;: [ # [Output Only] The list of commitments contained in this scope.
        { # Represents a regional resource-based commitment resource.
            #
            # Creating this commitment resource means that you are purchasing a
            # resource-based committed use contract, with an explicit start and end time.
            # You can purchase resource-based commitments for both hardware and software
            # resources. For more information, read
            # Resource-based committed use discounts
          &quot;autoRenew&quot;: True or False, # Specifies whether to automatically renew the commitment at the end of its
              # current term. The default value is false. If you set the field
              # to true, each time your commitment reaches the end of its
              # term, Compute Engine automatically renews it for another term. You can
              # update this field anytime before the commitment expires. For example, if
              # the commitment is set to expire at 12 AM UTC-8 on January 3, 2027, you can
              # update this field until 11:59 PM UTC-8 on January 2, 2027.
          &quot;category&quot;: &quot;A String&quot;, # The category of the commitment; specifies whether the commitment is for
              # hardware or software resources. Category MACHINE specifies
              # that you are committing to hardware machine resources such asVCPU or MEMORY, listed in resources.
              # Category LICENSE specifies that you are committing to software
              # licenses, listed in licenseResources.
              # Note that if you specify MACHINE commitments, then you must
              # also specify a type to indicate the machine series of the
              # hardware resource that you are committing to.
          &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp inRFC3339
              # text format.
          &quot;customEndTimestamp&quot;: &quot;A String&quot;, # [Input Only] Optional, specifies the requested commitment end time inRFC3339 text format. Use this option when the desired
              # commitment&#x27;s end date is later than the start date + term duration.
          &quot;description&quot;: &quot;A String&quot;, # An optional description of the commitment. You can provide this property
              # when you create the resource.
          &quot;endTimestamp&quot;: &quot;A String&quot;, # [Output Only] Commitment end time inRFC3339
              # text format.
          &quot;existingReservations&quot;: [
            &quot;A String&quot;,
          ],
          &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is
              # defined by the server.
          &quot;kind&quot;: &quot;compute#commitment&quot;, # [Output Only] Type of the resource. Always compute#commitment
              # for commitments.
          &quot;licenseResource&quot;: { # Commitment for a particular license resource. # The license specification required as part of a license commitment.
            &quot;amount&quot;: &quot;A String&quot;, # The number of licenses you plan to purchase.
            &quot;coresPerLicense&quot;: &quot;A String&quot;, # The number of cores per license.
            &quot;license&quot;: &quot;A String&quot;, # The applicable license URI.
          },
          &quot;mergeSourceCommitments&quot;: [ # The list of source commitments that you are merging to create the new
              # merged commitment. For more information, see
              # Merging commitments.
            &quot;A String&quot;,
          ],
          &quot;name&quot;: &quot;A String&quot;, # Name of the commitment. You must specify a name when you purchase the
              # commitment. The name must be 1-63 characters long, and comply withRFC1035.
              # Specifically, the name must be 1-63 characters long and match the regular
              # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
              # character must be a lowercase letter, and all following characters must
              # be a dash, lowercase letter, or digit, except the last character, which
              # cannot be a dash.
          &quot;plan&quot;: &quot;A String&quot;, # The minimum time duration that you commit to purchasing resources.
              # The plan that you choose determines the preset term length of the
              # commitment (which is 1 year or 3 years) and affects the discount rate that
              # you receive for your resources. Committing to a longer time duration
              # typically gives you a higher discount rate. The supported values for this
              # field are TWELVE_MONTH (1 year), andTHIRTY_SIX_MONTH (3 years).
          &quot;region&quot;: &quot;A String&quot;, # [Output Only] URL of the region where the commitment and committed
              # resources are located.
          &quot;reservations&quot;: [ # The list of new reservations that you want to create and attach to this
              # commitment.
              #
              # You must attach reservations to your commitment if your commitment
              # specifies any GPUs or Local SSD disks. For more information, see
              # Attach reservations to resource-based commitments.
              #
              # Specify this property only if you want to create new
              # reservations to attach. To attach existing reservations, specify theexistingReservations property instead.
            { # Represents a reservation resource.  A reservation ensures that capacity is
                # held in a specific zone even if the reserved VMs are not running. For more
                # information, read  Reserving zonal
                # resources.
              &quot;advancedDeploymentControl&quot;: { # Advance control for cluster management, applicable only to DENSE deployment # Advanced control for cluster management, applicable only to DENSE
                  # deployment type reservations.
                  # type reservations.
                &quot;reservationOperationalMode&quot;: &quot;A String&quot;, # Indicates chosen reservation operational mode for the reservation.
              },
              &quot;aggregateReservation&quot;: { # This reservation type is specified by total resource amounts (e.g. total # Reservation for aggregated resources, providing shape flexibility.
                  # count of CPUs) and can account for multiple instance SKUs. In other words,
                  # one can create instances of varying shapes against this reservation.
                &quot;hostCount&quot;: 42, # Count of reserved hosts of specified VM family. The host has fixed number
                    # of accelerators based on the accelerator/vm-family selected.
                &quot;inUseHostCount&quot;: 42, # Number of hosts currently in use. If there is one or more Instances
                    # running on the host, it is considered in use.
                &quot;inUseInstanceCount&quot;: 42, # Number of instances currently in use in this reservation.
                &quot;inUseResources&quot;: [ # [Output only] List of resources currently in use.
                  {
                    &quot;accelerator&quot;: { # Properties of accelerator resources in this reservation.
                      &quot;acceleratorCount&quot;: 42, # Number of accelerators of specified type.
                      &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL to accelerator type. e.g.
                          # &quot;projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l&quot;
                    },
                  },
                ],
                &quot;reservedResources&quot;: [ # List of reserved resources (CPUs, memory, accelerators).
                  {
                    &quot;accelerator&quot;: { # Properties of accelerator resources in this reservation.
                      &quot;acceleratorCount&quot;: 42, # Number of accelerators of specified type.
                      &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL to accelerator type. e.g.
                          # &quot;projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l&quot;
                    },
                  },
                ],
                &quot;vmFamily&quot;: &quot;A String&quot;, # The VM family that all instances scheduled against this reservation must
                    # belong to.
                &quot;workloadType&quot;: &quot;A String&quot;, # The workload type of the instances that will target this reservation.
              },
              &quot;commitment&quot;: &quot;A String&quot;, # [Output Only] Full or partial URL to a parent commitment. This field
                  # displays for reservations that are tied to a commitment.
              &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp inRFC3339
                  # text format.
              &quot;deleteAfterDuration&quot;: { # A Duration represents a fixed-length span of time represented # Duration time relative to reservation creation when Compute Engine will
                  # automatically delete this resource.
                  # as a count of seconds and fractions of seconds at nanosecond
                  # resolution. It is independent of any calendar and concepts like &quot;day&quot;
                  # or &quot;month&quot;. Range is approximately 10,000 years.
                &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution.
                    # Durations less than one second are represented with a 0
                    # `seconds` field and a positive `nanos` field. Must be from 0
                    # to 999,999,999 inclusive.
                &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0
                    # to 315,576,000,000 inclusive. Note: these bounds are computed from:
                    # 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
              },
              &quot;deleteAtTime&quot;: &quot;A String&quot;, # Absolute time in future when the reservation will be
                  #  auto-deleted by Compute Engine. Timestamp is represented inRFC3339 text format.
              &quot;deploymentType&quot;: &quot;A String&quot;, # Specifies the deployment strategy for this reservation.
              &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you
                  # create the resource.
              &quot;enableEmergentMaintenance&quot;: True or False, # Indicates whether Compute Engine allows unplanned maintenance for your VMs;
                  # for example, to fix hardware errors.
              &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is
                  # defined by the server.
              &quot;kind&quot;: &quot;compute#reservation&quot;, # [Output Only] Type of the resource. Alwayscompute#reservations for reservations.
              &quot;linkedCommitments&quot;: [ # [Output Only] Full or partial URL to parent commitments. This field
                  # displays for reservations that are tied to multiple commitments.
                &quot;A String&quot;,
              ],
              &quot;name&quot;: &quot;A String&quot;, # The name of the resource, provided by the client when initially creating
                  # the resource. The resource name must be 1-63 characters long, and comply
                  # withRFC1035.
                  # Specifically, the name must be 1-63 characters long and match the regular
                  # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
                  # character must be a lowercase letter, and all following characters must be
                  # a dash, lowercase letter, or digit, except the last character, which cannot
                  # be a dash.
              &quot;protectionTier&quot;: &quot;A String&quot;, # Protection tier for the workload which specifies the workload expectations
                  # in the event of infrastructure failures at data center (e.g. power
                  # and/or cooling failures).
              &quot;reservationMode&quot;: &quot;A String&quot;, # [Output only] Indicates the reservation mode of the reservation.
              &quot;reservationSharingPolicy&quot;: { # Specify the reservation sharing policy. If unspecified, the reservation
                  # will not be shared with Google Cloud managed services.
                &quot;serviceShareType&quot;: &quot;A String&quot;, # Sharing config for all Google Cloud services.
              },
              &quot;resourcePolicies&quot;: { # Resource policies to be added to this reservation. The key is defined by
                  # user, and the value is resource policy url. This is to define placement
                  # policy with reservation.
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;resourceStatus&quot;: { # [Output Only] Contains output only fields. # [Output Only] Status information for Reservation resource.
                &quot;healthInfo&quot;: { # Health information for the reservation. # [Output only] Health information for the reservation.
                  &quot;degradedBlockCount&quot;: 42, # The number of reservation blocks that are degraded.
                  &quot;healthStatus&quot;: &quot;A String&quot;, # The health status of the reservation.
                  &quot;healthyBlockCount&quot;: 42, # The number of reservation blocks that are healthy.
                },
                &quot;reservationBlockCount&quot;: 42, # The number of reservation blocks associated with this reservation.
                &quot;reservationMaintenance&quot;: { # Maintenance Info for ReservationBlocks. # Maintenance information for this reservation
                  &quot;instanceMaintenanceOngoingCount&quot;: 42, # Describes number of instances that have ongoing maintenance.
                  &quot;instanceMaintenancePendingCount&quot;: 42, # Describes number of instances that have pending maintenance.
                  &quot;maintenanceOngoingCount&quot;: 42, # Progress for ongoing maintenance for this group of VMs/hosts.
                      # Describes number of hosts in the block that have ongoing maintenance.
                  &quot;maintenancePendingCount&quot;: 42, # Progress for ongoing maintenance for this group of VMs/hosts.
                      # Describes number of hosts in the block that have pending maintenance.
                  &quot;schedulingType&quot;: &quot;A String&quot;, # The type of maintenance for the reservation.
                  &quot;subblockInfraMaintenanceOngoingCount&quot;: 42, # Describes number of subblock Infrastructure that has ongoing maintenance.
                      # Here, Subblock Infrastructure Maintenance pertains to upstream hardware
                      # contained in the Subblock that is necessary for a VM Family(e.g. NVLink
                      # Domains). Not all VM Families will support this field.
                  &quot;subblockInfraMaintenancePendingCount&quot;: 42, # Describes number of subblock Infrastructure that has pending maintenance.
                      #  Here, Subblock Infrastructure Maintenance pertains to upstream hardware
                      #  contained in the Subblock that is necessary for a VM Family (e.g. NVLink
                      #  Domains). Not all VM Families will support this field.
                  &quot;upcomingGroupMaintenance&quot;: { # Upcoming Maintenance notification information. # Maintenance information on this group of VMs.
                    &quot;canReschedule&quot;: True or False, # Indicates if the maintenance can be customer triggered.
                    &quot;latestWindowStartTime&quot;: &quot;A String&quot;, # The latest time for the planned maintenance window to start.
                        # This timestamp value is in RFC3339 text format.
                    &quot;maintenanceOnShutdown&quot;: True or False, # Indicates whether the UpcomingMaintenance will be triggered on VM shutdown.
                    &quot;maintenanceReasons&quot;: [ # The reasons for the maintenance. Only valid for vms.
                      &quot;A String&quot;,
                    ],
                    &quot;maintenanceStatus&quot;: &quot;A String&quot;,
                    &quot;type&quot;: &quot;A String&quot;, # Defines the type of maintenance.
                    &quot;windowEndTime&quot;: &quot;A String&quot;, # The time by which the maintenance disruption will be completed.
                        # This timestamp value is in RFC3339 text format.
                    &quot;windowStartTime&quot;: &quot;A String&quot;, # The current start time of the maintenance window.
                        # This timestamp value is in RFC3339 text format.
                  },
                },
                &quot;specificSkuAllocation&quot;: { # Contains Properties set for the reservation. # Allocation Properties of this reservation.
                  &quot;sourceInstanceTemplateId&quot;: &quot;A String&quot;, # ID of the instance template used to populate reservation properties.
                  &quot;utilizations&quot;: { # Per service utilization breakdown. The Key is the Google Cloud managed
                      # service name.
                    &quot;a_key&quot;: &quot;A String&quot;,
                  },
                },
              },
              &quot;satisfiesPzs&quot;: True or False, # [Output Only] Reserved for future use.
              &quot;schedulingType&quot;: &quot;A String&quot;, # The type of maintenance for the reservation.
              &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined fully-qualified URL for this resource.
              &quot;shareSettings&quot;: { # The share setting for reservations and sole tenancy node groups. # Specify share-settings to create a shared reservation. This property is
                  # optional. For more information about the syntax and options for this
                  # field and its subfields, see the guide for creating
                  # a shared reservation.
                &quot;projectMap&quot;: { # A map of project id and project config. This is only valid when
                    # share_type&#x27;s value is SPECIFIC_PROJECTS.
                  &quot;a_key&quot;: { # Config for each project in the share settings.
                    &quot;projectId&quot;: &quot;A String&quot;, # The project ID, should be same as the key of this project config in the
                        # parent map.
                  },
                },
                &quot;projects&quot;: [ # A List of Project names to specify consumer projects for this
                    # shared-reservation. This is only valid when share_type&#x27;s value is
                    # SPECIFIC_PROJECTS.
                  &quot;A String&quot;,
                ],
                &quot;shareType&quot;: &quot;A String&quot;, # Type of sharing for this shared-reservation
              },
              &quot;specificReservation&quot;: { # This reservation type allows to pre allocate specific instance # Reservation for instances with specific machine shapes.
                  #  configuration.
                &quot;assuredCount&quot;: &quot;A String&quot;, # [Output Only] Indicates how many instances are actually usable currently.
                &quot;count&quot;: &quot;A String&quot;, # Specifies the number of resources that are allocated.
                &quot;inUseCount&quot;: &quot;A String&quot;, # [Output Only] Indicates how many instances are in use.
                &quot;instanceProperties&quot;: { # Properties of the SKU instances being reserved. # The instance properties for the reservation.
                    # Next ID: 9
                  &quot;guestAccelerators&quot;: [ # Specifies accelerator type and count.
                    { # A specification of the type and number of accelerator cards attached to the
                        # instance.
                      &quot;acceleratorCount&quot;: 42, # The number of the guest accelerator cards exposed to this instance.
                      &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL of the accelerator type resource to attach to this
                          # instance. For example:projects/my-project/zones/us-central1-c/acceleratorTypes/nvidia-tesla-p100
                          # If you are creating an instance template, specify only the
                          # accelerator name.
                          # See GPUs on Compute Engine
                          # for a full list of accelerator types.
                    },
                  ],
                  &quot;localSsds&quot;: [ # Specifies amount of local ssd to reserve with each instance. The type
                      # of disk is local-ssd.
                    {
                      &quot;diskSizeGb&quot;: &quot;A String&quot;, # Specifies the size of the disk in base-2 GB.
                      &quot;interface&quot;: &quot;A String&quot;, # Specifies the disk interface to use for attaching this disk, which is
                          # either SCSI or NVME. The default isSCSI.
                          # For performance characteristics of SCSI over NVMe, seeLocal SSD performance.
                    },
                  ],
                  &quot;locationHint&quot;: &quot;A String&quot;, # An opaque location hint used to place the allocation close to other
                      # resources.
                      # This field is for use by internal tools that use the public API.
                  &quot;machineType&quot;: &quot;A String&quot;, # Specifies type of machine (name only) which has fixed number of vCPUs
                      # and fixed amount of memory. This also includes specifying custom
                      # machine type following custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY pattern.
                  &quot;maintenanceFreezeDurationHours&quot;: 42, # Specifies the number of hours after reservation creation where
                      # instances using the reservation won&#x27;t be scheduled for maintenance.
                  &quot;maintenanceInterval&quot;: &quot;A String&quot;, # Specifies the frequency of planned maintenance events. The accepted
                      # values are: `PERIODIC`.
                  &quot;minCpuPlatform&quot;: &quot;A String&quot;, # Minimum cpu platform the reservation.
                },
                &quot;sourceInstanceTemplate&quot;: &quot;A String&quot;, # Specifies the instance template to create the reservation. If you use
                    # this field, you must exclude the instanceProperties field.
                    #
                    # This field is optional, and it can be a full or partial URL. For example,
                    # the following are all valid URLs to an instance template:
                    #
                    #
                    #       - https://www.googleapis.com/compute/v1/projects/project/global/instanceTemplates/instanceTemplate
                    #       - projects/project/global/instanceTemplates/instanceTemplate
                    #       - global/instanceTemplates/instanceTemplate
              },
              &quot;specificReservationRequired&quot;: True or False, # Indicates whether the reservation can be consumed by VMs with affinity
                  # for &quot;any&quot; reservation. If the field is set, then only VMs that target
                  # the reservation by name can consume from this reservation.
              &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the reservation.
                  #
                  #
                  #      - CREATING: Reservation resources are being
                  #        allocated.
                  #      - READY: Reservation resources have been allocated,
                  #        and the reservation is ready for use.
                  #      - DELETING: Reservation deletion is in progress.
                  #      - UPDATING: Reservation update is in progress.
              &quot;zone&quot;: &quot;A String&quot;, # Zone in which the reservation resides. A zone must be provided if the
                  # reservation is created within a commitment.
            },
          ],
          &quot;resourceStatus&quot;: { # [Output Only] Contains output only fields. # [Output Only] Status information for Commitment resource.
            &quot;customTermEligibilityEndTimestamp&quot;: &quot;A String&quot;, # [Output Only] Indicates the end time of customer&#x27;s eligibility to send
                # custom term requests in RFC3339 text format. Term extension requests that
                # (not the end time in the request) after this time will be rejected.
          },
          &quot;resources&quot;: [ # The list of all the hardware resources, with their types and amounts, that
              # you want to commit to. Specify as a separate entry in the list for each
              # individual resource type.
            { # Commitment for a particular hardware resource (a commitment is composed of
                # one or more of these).
              &quot;acceleratorType&quot;: &quot;A String&quot;, # Name of the accelerator type or GPU resource. Specify this field only when
                  # the type of hardware resource is ACCELERATOR.
              &quot;amount&quot;: &quot;A String&quot;, # The quantity of the hardware resource that you want to commit to purchasing
                  # (in a type-dependent unit).
                  #
                  #    - For vCPUs, you must specify an integer value.
                  #    - For memory, you specify the amount of MB that you want. The value you
                  #    specify must be a multiple of 256 MB, with up to 6.5 GB of
                  #    memory per every vCPU.
                  #    - For GPUs, you must specify an integer value.
                  #    - For Local SSD disks, you must specify the amount in GB. The size of a
                  #    single Local SSD disk is 375 GB.
              &quot;type&quot;: &quot;A String&quot;, # The type of hardware resource that you want to specify.
                  # You can specify any of the following values:
                  #
                  #    - VCPU
                  #    - MEMORY
                  #    - LOCAL_SSD
                  #    - ACCELERATOR
                  #
                  #
                  #
                  # Specify as a separate entry in the list for each
                  # individual resource type.
            },
          ],
          &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
          &quot;splitSourceCommitment&quot;: &quot;A String&quot;, # The source commitment from which you are transferring resources to create
              # the new split commitment. For more information, see
              # Split commitments.
          &quot;startTimestamp&quot;: &quot;A String&quot;, # [Output Only] Commitment start time inRFC3339
              # text format.
          &quot;status&quot;: &quot;A String&quot;, # [Output Only] Status of the commitment with regards to eventual expiration
              # (each commitment has an end date defined). Status can be one of the
              # following values: NOT_YET_ACTIVE, ACTIVE, orEXPIRED.
          &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable explanation of the status.
          &quot;type&quot;: &quot;A String&quot;, # The type of commitment; specifies the
              # machine series for which you want to commit to purchasing resources.
              # The choice of machine series affects the discount rate and the eligible
              # resource types.
              #
              #  The type must be one of the following:ACCELERATOR_OPTIMIZED, ACCELERATOR_OPTIMIZED_A3,ACCELERATOR_OPTIMIZED_A3_MEGA,COMPUTE_OPTIMIZED, COMPUTE_OPTIMIZED_C2D,
              #  COMPUTE_OPTIMIZED_C3, COMPUTE_OPTIMIZED_C3D,COMPUTE_OPTIMIZED_H3, GENERAL_PURPOSE,GENERAL_PURPOSE_C4, GENERAL_PURPOSE_E2,GENERAL_PURPOSE_N2, GENERAL_PURPOSE_N2D,GENERAL_PURPOSE_N4, GENERAL_PURPOSE_T2D,GRAPHICS_OPTIMIZED, MEMORY_OPTIMIZED,MEMORY_OPTIMIZED_M3, MEMORY_OPTIMIZED_X4,STORAGE_OPTIMIZED_Z3.
              # For example, type MEMORY_OPTIMIZED specifies a commitment
              # that applies only to eligible resources of memory optimized M1 and M2
              # machine series. Type GENERAL_PURPOSE specifies a commitment
              # that applies only to eligible resources of general purpose N1 machine
              # series.
        },
      ],
      &quot;warning&quot;: { # [Output Only] Informational warning which replaces the list of commitments
          # when the list is empty.
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute
            # Engine returns NO_RESULTS_ON_PAGE if there
            # are no results in the response.
        &quot;data&quot;: [ # [Output Only] Metadata about this warning in key:
            # value format. For example:
            #
            # &quot;data&quot;: [
            #   {
            #    &quot;key&quot;: &quot;scope&quot;,
            #    &quot;value&quot;: &quot;zones/us-east1-d&quot;
            #   }
          {
            &quot;key&quot;: &quot;A String&quot;, # [Output Only] A key that provides more detail on the warning being
                # returned. For example, for warnings where there are no results in a list
                # request for a particular zone, this key might be scope and
                # the key value might be the zone name. Other examples might be a key
                # indicating a deprecated resource and a suggested replacement, or a
                # warning about invalid network settings (for example, if an instance
                # attempts to perform IP forwarding but is not enabled for IP forwarding).
            &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
          },
        ],
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
      },
    },
  },
  &quot;kind&quot;: &quot;compute#commitmentAggregatedList&quot;, # [Output Only] Type of resource. Alwayscompute#commitmentAggregatedList for aggregated lists of
      # commitments.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # [Output Only] This token allows you to get the next page of results for
      # list requests. If the number of results is larger thanmaxResults, use the nextPageToken as a value for
      # the query parameter pageToken in the next list request.
      # Subsequent list requests will have their own nextPageToken to
      # continue paging through the results.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource.
  &quot;unreachables&quot;: [ # [Output Only] Unreachable resources.
    &quot;A String&quot;,
  ],
  &quot;warning&quot;: { # [Output Only] Informational warning message.
    &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute
        # Engine returns NO_RESULTS_ON_PAGE if there
        # are no results in the response.
    &quot;data&quot;: [ # [Output Only] Metadata about this warning in key:
        # value format. For example:
        #
        # &quot;data&quot;: [
        #   {
        #    &quot;key&quot;: &quot;scope&quot;,
        #    &quot;value&quot;: &quot;zones/us-east1-d&quot;
        #   }
      {
        &quot;key&quot;: &quot;A String&quot;, # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
        &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="aggregatedList_next">aggregatedList_next()</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 &#x27;execute()&#x27; 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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(project, region, commitment, x__xgafv=None)</code>
  <pre>Returns the specified commitment resource.

Args:
  project: string, Project ID for this request. (required)
  region: string, Name of the region for this request. (required)
  commitment: string, Name of the commitment to return. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a regional resource-based commitment resource.
    #
    # Creating this commitment resource means that you are purchasing a
    # resource-based committed use contract, with an explicit start and end time.
    # You can purchase resource-based commitments for both hardware and software
    # resources. For more information, read
    # Resource-based committed use discounts
  &quot;autoRenew&quot;: True or False, # Specifies whether to automatically renew the commitment at the end of its
      # current term. The default value is false. If you set the field
      # to true, each time your commitment reaches the end of its
      # term, Compute Engine automatically renews it for another term. You can
      # update this field anytime before the commitment expires. For example, if
      # the commitment is set to expire at 12 AM UTC-8 on January 3, 2027, you can
      # update this field until 11:59 PM UTC-8 on January 2, 2027.
  &quot;category&quot;: &quot;A String&quot;, # The category of the commitment; specifies whether the commitment is for
      # hardware or software resources. Category MACHINE specifies
      # that you are committing to hardware machine resources such asVCPU or MEMORY, listed in resources.
      # Category LICENSE specifies that you are committing to software
      # licenses, listed in licenseResources.
      # Note that if you specify MACHINE commitments, then you must
      # also specify a type to indicate the machine series of the
      # hardware resource that you are committing to.
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp inRFC3339
      # text format.
  &quot;customEndTimestamp&quot;: &quot;A String&quot;, # [Input Only] Optional, specifies the requested commitment end time inRFC3339 text format. Use this option when the desired
      # commitment&#x27;s end date is later than the start date + term duration.
  &quot;description&quot;: &quot;A String&quot;, # An optional description of the commitment. You can provide this property
      # when you create the resource.
  &quot;endTimestamp&quot;: &quot;A String&quot;, # [Output Only] Commitment end time inRFC3339
      # text format.
  &quot;existingReservations&quot;: [
    &quot;A String&quot;,
  ],
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is
      # defined by the server.
  &quot;kind&quot;: &quot;compute#commitment&quot;, # [Output Only] Type of the resource. Always compute#commitment
      # for commitments.
  &quot;licenseResource&quot;: { # Commitment for a particular license resource. # The license specification required as part of a license commitment.
    &quot;amount&quot;: &quot;A String&quot;, # The number of licenses you plan to purchase.
    &quot;coresPerLicense&quot;: &quot;A String&quot;, # The number of cores per license.
    &quot;license&quot;: &quot;A String&quot;, # The applicable license URI.
  },
  &quot;mergeSourceCommitments&quot;: [ # The list of source commitments that you are merging to create the new
      # merged commitment. For more information, see
      # Merging commitments.
    &quot;A String&quot;,
  ],
  &quot;name&quot;: &quot;A String&quot;, # Name of the commitment. You must specify a name when you purchase the
      # commitment. The name must be 1-63 characters long, and comply withRFC1035.
      # Specifically, the name must be 1-63 characters long and match the regular
      # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
      # character must be a lowercase letter, and all following characters must
      # be a dash, lowercase letter, or digit, except the last character, which
      # cannot be a dash.
  &quot;plan&quot;: &quot;A String&quot;, # The minimum time duration that you commit to purchasing resources.
      # The plan that you choose determines the preset term length of the
      # commitment (which is 1 year or 3 years) and affects the discount rate that
      # you receive for your resources. Committing to a longer time duration
      # typically gives you a higher discount rate. The supported values for this
      # field are TWELVE_MONTH (1 year), andTHIRTY_SIX_MONTH (3 years).
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] URL of the region where the commitment and committed
      # resources are located.
  &quot;reservations&quot;: [ # The list of new reservations that you want to create and attach to this
      # commitment.
      #
      # You must attach reservations to your commitment if your commitment
      # specifies any GPUs or Local SSD disks. For more information, see
      # Attach reservations to resource-based commitments.
      #
      # Specify this property only if you want to create new
      # reservations to attach. To attach existing reservations, specify theexistingReservations property instead.
    { # Represents a reservation resource.  A reservation ensures that capacity is
        # held in a specific zone even if the reserved VMs are not running. For more
        # information, read  Reserving zonal
        # resources.
      &quot;advancedDeploymentControl&quot;: { # Advance control for cluster management, applicable only to DENSE deployment # Advanced control for cluster management, applicable only to DENSE
          # deployment type reservations.
          # type reservations.
        &quot;reservationOperationalMode&quot;: &quot;A String&quot;, # Indicates chosen reservation operational mode for the reservation.
      },
      &quot;aggregateReservation&quot;: { # This reservation type is specified by total resource amounts (e.g. total # Reservation for aggregated resources, providing shape flexibility.
          # count of CPUs) and can account for multiple instance SKUs. In other words,
          # one can create instances of varying shapes against this reservation.
        &quot;hostCount&quot;: 42, # Count of reserved hosts of specified VM family. The host has fixed number
            # of accelerators based on the accelerator/vm-family selected.
        &quot;inUseHostCount&quot;: 42, # Number of hosts currently in use. If there is one or more Instances
            # running on the host, it is considered in use.
        &quot;inUseInstanceCount&quot;: 42, # Number of instances currently in use in this reservation.
        &quot;inUseResources&quot;: [ # [Output only] List of resources currently in use.
          {
            &quot;accelerator&quot;: { # Properties of accelerator resources in this reservation.
              &quot;acceleratorCount&quot;: 42, # Number of accelerators of specified type.
              &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL to accelerator type. e.g.
                  # &quot;projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l&quot;
            },
          },
        ],
        &quot;reservedResources&quot;: [ # List of reserved resources (CPUs, memory, accelerators).
          {
            &quot;accelerator&quot;: { # Properties of accelerator resources in this reservation.
              &quot;acceleratorCount&quot;: 42, # Number of accelerators of specified type.
              &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL to accelerator type. e.g.
                  # &quot;projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l&quot;
            },
          },
        ],
        &quot;vmFamily&quot;: &quot;A String&quot;, # The VM family that all instances scheduled against this reservation must
            # belong to.
        &quot;workloadType&quot;: &quot;A String&quot;, # The workload type of the instances that will target this reservation.
      },
      &quot;commitment&quot;: &quot;A String&quot;, # [Output Only] Full or partial URL to a parent commitment. This field
          # displays for reservations that are tied to a commitment.
      &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp inRFC3339
          # text format.
      &quot;deleteAfterDuration&quot;: { # A Duration represents a fixed-length span of time represented # Duration time relative to reservation creation when Compute Engine will
          # automatically delete this resource.
          # as a count of seconds and fractions of seconds at nanosecond
          # resolution. It is independent of any calendar and concepts like &quot;day&quot;
          # or &quot;month&quot;. Range is approximately 10,000 years.
        &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution.
            # Durations less than one second are represented with a 0
            # `seconds` field and a positive `nanos` field. Must be from 0
            # to 999,999,999 inclusive.
        &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0
            # to 315,576,000,000 inclusive. Note: these bounds are computed from:
            # 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
      },
      &quot;deleteAtTime&quot;: &quot;A String&quot;, # Absolute time in future when the reservation will be
          #  auto-deleted by Compute Engine. Timestamp is represented inRFC3339 text format.
      &quot;deploymentType&quot;: &quot;A String&quot;, # Specifies the deployment strategy for this reservation.
      &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you
          # create the resource.
      &quot;enableEmergentMaintenance&quot;: True or False, # Indicates whether Compute Engine allows unplanned maintenance for your VMs;
          # for example, to fix hardware errors.
      &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is
          # defined by the server.
      &quot;kind&quot;: &quot;compute#reservation&quot;, # [Output Only] Type of the resource. Alwayscompute#reservations for reservations.
      &quot;linkedCommitments&quot;: [ # [Output Only] Full or partial URL to parent commitments. This field
          # displays for reservations that are tied to multiple commitments.
        &quot;A String&quot;,
      ],
      &quot;name&quot;: &quot;A String&quot;, # The name of the resource, provided by the client when initially creating
          # the resource. The resource name must be 1-63 characters long, and comply
          # withRFC1035.
          # Specifically, the name must be 1-63 characters long and match the regular
          # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
          # character must be a lowercase letter, and all following characters must be
          # a dash, lowercase letter, or digit, except the last character, which cannot
          # be a dash.
      &quot;protectionTier&quot;: &quot;A String&quot;, # Protection tier for the workload which specifies the workload expectations
          # in the event of infrastructure failures at data center (e.g. power
          # and/or cooling failures).
      &quot;reservationMode&quot;: &quot;A String&quot;, # [Output only] Indicates the reservation mode of the reservation.
      &quot;reservationSharingPolicy&quot;: { # Specify the reservation sharing policy. If unspecified, the reservation
          # will not be shared with Google Cloud managed services.
        &quot;serviceShareType&quot;: &quot;A String&quot;, # Sharing config for all Google Cloud services.
      },
      &quot;resourcePolicies&quot;: { # Resource policies to be added to this reservation. The key is defined by
          # user, and the value is resource policy url. This is to define placement
          # policy with reservation.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;resourceStatus&quot;: { # [Output Only] Contains output only fields. # [Output Only] Status information for Reservation resource.
        &quot;healthInfo&quot;: { # Health information for the reservation. # [Output only] Health information for the reservation.
          &quot;degradedBlockCount&quot;: 42, # The number of reservation blocks that are degraded.
          &quot;healthStatus&quot;: &quot;A String&quot;, # The health status of the reservation.
          &quot;healthyBlockCount&quot;: 42, # The number of reservation blocks that are healthy.
        },
        &quot;reservationBlockCount&quot;: 42, # The number of reservation blocks associated with this reservation.
        &quot;reservationMaintenance&quot;: { # Maintenance Info for ReservationBlocks. # Maintenance information for this reservation
          &quot;instanceMaintenanceOngoingCount&quot;: 42, # Describes number of instances that have ongoing maintenance.
          &quot;instanceMaintenancePendingCount&quot;: 42, # Describes number of instances that have pending maintenance.
          &quot;maintenanceOngoingCount&quot;: 42, # Progress for ongoing maintenance for this group of VMs/hosts.
              # Describes number of hosts in the block that have ongoing maintenance.
          &quot;maintenancePendingCount&quot;: 42, # Progress for ongoing maintenance for this group of VMs/hosts.
              # Describes number of hosts in the block that have pending maintenance.
          &quot;schedulingType&quot;: &quot;A String&quot;, # The type of maintenance for the reservation.
          &quot;subblockInfraMaintenanceOngoingCount&quot;: 42, # Describes number of subblock Infrastructure that has ongoing maintenance.
              # Here, Subblock Infrastructure Maintenance pertains to upstream hardware
              # contained in the Subblock that is necessary for a VM Family(e.g. NVLink
              # Domains). Not all VM Families will support this field.
          &quot;subblockInfraMaintenancePendingCount&quot;: 42, # Describes number of subblock Infrastructure that has pending maintenance.
              #  Here, Subblock Infrastructure Maintenance pertains to upstream hardware
              #  contained in the Subblock that is necessary for a VM Family (e.g. NVLink
              #  Domains). Not all VM Families will support this field.
          &quot;upcomingGroupMaintenance&quot;: { # Upcoming Maintenance notification information. # Maintenance information on this group of VMs.
            &quot;canReschedule&quot;: True or False, # Indicates if the maintenance can be customer triggered.
            &quot;latestWindowStartTime&quot;: &quot;A String&quot;, # The latest time for the planned maintenance window to start.
                # This timestamp value is in RFC3339 text format.
            &quot;maintenanceOnShutdown&quot;: True or False, # Indicates whether the UpcomingMaintenance will be triggered on VM shutdown.
            &quot;maintenanceReasons&quot;: [ # The reasons for the maintenance. Only valid for vms.
              &quot;A String&quot;,
            ],
            &quot;maintenanceStatus&quot;: &quot;A String&quot;,
            &quot;type&quot;: &quot;A String&quot;, # Defines the type of maintenance.
            &quot;windowEndTime&quot;: &quot;A String&quot;, # The time by which the maintenance disruption will be completed.
                # This timestamp value is in RFC3339 text format.
            &quot;windowStartTime&quot;: &quot;A String&quot;, # The current start time of the maintenance window.
                # This timestamp value is in RFC3339 text format.
          },
        },
        &quot;specificSkuAllocation&quot;: { # Contains Properties set for the reservation. # Allocation Properties of this reservation.
          &quot;sourceInstanceTemplateId&quot;: &quot;A String&quot;, # ID of the instance template used to populate reservation properties.
          &quot;utilizations&quot;: { # Per service utilization breakdown. The Key is the Google Cloud managed
              # service name.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
      },
      &quot;satisfiesPzs&quot;: True or False, # [Output Only] Reserved for future use.
      &quot;schedulingType&quot;: &quot;A String&quot;, # The type of maintenance for the reservation.
      &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined fully-qualified URL for this resource.
      &quot;shareSettings&quot;: { # The share setting for reservations and sole tenancy node groups. # Specify share-settings to create a shared reservation. This property is
          # optional. For more information about the syntax and options for this
          # field and its subfields, see the guide for creating
          # a shared reservation.
        &quot;projectMap&quot;: { # A map of project id and project config. This is only valid when
            # share_type&#x27;s value is SPECIFIC_PROJECTS.
          &quot;a_key&quot;: { # Config for each project in the share settings.
            &quot;projectId&quot;: &quot;A String&quot;, # The project ID, should be same as the key of this project config in the
                # parent map.
          },
        },
        &quot;projects&quot;: [ # A List of Project names to specify consumer projects for this
            # shared-reservation. This is only valid when share_type&#x27;s value is
            # SPECIFIC_PROJECTS.
          &quot;A String&quot;,
        ],
        &quot;shareType&quot;: &quot;A String&quot;, # Type of sharing for this shared-reservation
      },
      &quot;specificReservation&quot;: { # This reservation type allows to pre allocate specific instance # Reservation for instances with specific machine shapes.
          #  configuration.
        &quot;assuredCount&quot;: &quot;A String&quot;, # [Output Only] Indicates how many instances are actually usable currently.
        &quot;count&quot;: &quot;A String&quot;, # Specifies the number of resources that are allocated.
        &quot;inUseCount&quot;: &quot;A String&quot;, # [Output Only] Indicates how many instances are in use.
        &quot;instanceProperties&quot;: { # Properties of the SKU instances being reserved. # The instance properties for the reservation.
            # Next ID: 9
          &quot;guestAccelerators&quot;: [ # Specifies accelerator type and count.
            { # A specification of the type and number of accelerator cards attached to the
                # instance.
              &quot;acceleratorCount&quot;: 42, # The number of the guest accelerator cards exposed to this instance.
              &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL of the accelerator type resource to attach to this
                  # instance. For example:projects/my-project/zones/us-central1-c/acceleratorTypes/nvidia-tesla-p100
                  # If you are creating an instance template, specify only the
                  # accelerator name.
                  # See GPUs on Compute Engine
                  # for a full list of accelerator types.
            },
          ],
          &quot;localSsds&quot;: [ # Specifies amount of local ssd to reserve with each instance. The type
              # of disk is local-ssd.
            {
              &quot;diskSizeGb&quot;: &quot;A String&quot;, # Specifies the size of the disk in base-2 GB.
              &quot;interface&quot;: &quot;A String&quot;, # Specifies the disk interface to use for attaching this disk, which is
                  # either SCSI or NVME. The default isSCSI.
                  # For performance characteristics of SCSI over NVMe, seeLocal SSD performance.
            },
          ],
          &quot;locationHint&quot;: &quot;A String&quot;, # An opaque location hint used to place the allocation close to other
              # resources.
              # This field is for use by internal tools that use the public API.
          &quot;machineType&quot;: &quot;A String&quot;, # Specifies type of machine (name only) which has fixed number of vCPUs
              # and fixed amount of memory. This also includes specifying custom
              # machine type following custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY pattern.
          &quot;maintenanceFreezeDurationHours&quot;: 42, # Specifies the number of hours after reservation creation where
              # instances using the reservation won&#x27;t be scheduled for maintenance.
          &quot;maintenanceInterval&quot;: &quot;A String&quot;, # Specifies the frequency of planned maintenance events. The accepted
              # values are: `PERIODIC`.
          &quot;minCpuPlatform&quot;: &quot;A String&quot;, # Minimum cpu platform the reservation.
        },
        &quot;sourceInstanceTemplate&quot;: &quot;A String&quot;, # Specifies the instance template to create the reservation. If you use
            # this field, you must exclude the instanceProperties field.
            #
            # This field is optional, and it can be a full or partial URL. For example,
            # the following are all valid URLs to an instance template:
            #
            #
            #       - https://www.googleapis.com/compute/v1/projects/project/global/instanceTemplates/instanceTemplate
            #       - projects/project/global/instanceTemplates/instanceTemplate
            #       - global/instanceTemplates/instanceTemplate
      },
      &quot;specificReservationRequired&quot;: True or False, # Indicates whether the reservation can be consumed by VMs with affinity
          # for &quot;any&quot; reservation. If the field is set, then only VMs that target
          # the reservation by name can consume from this reservation.
      &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the reservation.
          #
          #
          #      - CREATING: Reservation resources are being
          #        allocated.
          #      - READY: Reservation resources have been allocated,
          #        and the reservation is ready for use.
          #      - DELETING: Reservation deletion is in progress.
          #      - UPDATING: Reservation update is in progress.
      &quot;zone&quot;: &quot;A String&quot;, # Zone in which the reservation resides. A zone must be provided if the
          # reservation is created within a commitment.
    },
  ],
  &quot;resourceStatus&quot;: { # [Output Only] Contains output only fields. # [Output Only] Status information for Commitment resource.
    &quot;customTermEligibilityEndTimestamp&quot;: &quot;A String&quot;, # [Output Only] Indicates the end time of customer&#x27;s eligibility to send
        # custom term requests in RFC3339 text format. Term extension requests that
        # (not the end time in the request) after this time will be rejected.
  },
  &quot;resources&quot;: [ # The list of all the hardware resources, with their types and amounts, that
      # you want to commit to. Specify as a separate entry in the list for each
      # individual resource type.
    { # Commitment for a particular hardware resource (a commitment is composed of
        # one or more of these).
      &quot;acceleratorType&quot;: &quot;A String&quot;, # Name of the accelerator type or GPU resource. Specify this field only when
          # the type of hardware resource is ACCELERATOR.
      &quot;amount&quot;: &quot;A String&quot;, # The quantity of the hardware resource that you want to commit to purchasing
          # (in a type-dependent unit).
          #
          #    - For vCPUs, you must specify an integer value.
          #    - For memory, you specify the amount of MB that you want. The value you
          #    specify must be a multiple of 256 MB, with up to 6.5 GB of
          #    memory per every vCPU.
          #    - For GPUs, you must specify an integer value.
          #    - For Local SSD disks, you must specify the amount in GB. The size of a
          #    single Local SSD disk is 375 GB.
      &quot;type&quot;: &quot;A String&quot;, # The type of hardware resource that you want to specify.
          # You can specify any of the following values:
          #
          #    - VCPU
          #    - MEMORY
          #    - LOCAL_SSD
          #    - ACCELERATOR
          #
          #
          #
          # Specify as a separate entry in the list for each
          # individual resource type.
    },
  ],
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;splitSourceCommitment&quot;: &quot;A String&quot;, # The source commitment from which you are transferring resources to create
      # the new split commitment. For more information, see
      # Split commitments.
  &quot;startTimestamp&quot;: &quot;A String&quot;, # [Output Only] Commitment start time inRFC3339
      # text format.
  &quot;status&quot;: &quot;A String&quot;, # [Output Only] Status of the commitment with regards to eventual expiration
      # (each commitment has an end date defined). Status can be one of the
      # following values: NOT_YET_ACTIVE, ACTIVE, orEXPIRED.
  &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable explanation of the status.
  &quot;type&quot;: &quot;A String&quot;, # The type of commitment; specifies the
      # machine series for which you want to commit to purchasing resources.
      # The choice of machine series affects the discount rate and the eligible
      # resource types.
      #
      #  The type must be one of the following:ACCELERATOR_OPTIMIZED, ACCELERATOR_OPTIMIZED_A3,ACCELERATOR_OPTIMIZED_A3_MEGA,COMPUTE_OPTIMIZED, COMPUTE_OPTIMIZED_C2D,
      #  COMPUTE_OPTIMIZED_C3, COMPUTE_OPTIMIZED_C3D,COMPUTE_OPTIMIZED_H3, GENERAL_PURPOSE,GENERAL_PURPOSE_C4, GENERAL_PURPOSE_E2,GENERAL_PURPOSE_N2, GENERAL_PURPOSE_N2D,GENERAL_PURPOSE_N4, GENERAL_PURPOSE_T2D,GRAPHICS_OPTIMIZED, MEMORY_OPTIMIZED,MEMORY_OPTIMIZED_M3, MEMORY_OPTIMIZED_X4,STORAGE_OPTIMIZED_Z3.
      # For example, type MEMORY_OPTIMIZED specifies a commitment
      # that applies only to eligible resources of memory optimized M1 and M2
      # machine series. Type GENERAL_PURPOSE specifies a commitment
      # that applies only to eligible resources of general purpose N1 machine
      # series.
}</pre>
</div>

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

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

{ # Represents a regional resource-based commitment resource.
    # 
    # Creating this commitment resource means that you are purchasing a
    # resource-based committed use contract, with an explicit start and end time.
    # You can purchase resource-based commitments for both hardware and software
    # resources. For more information, read
    # Resource-based committed use discounts
  &quot;autoRenew&quot;: True or False, # Specifies whether to automatically renew the commitment at the end of its
      # current term. The default value is false. If you set the field
      # to true, each time your commitment reaches the end of its
      # term, Compute Engine automatically renews it for another term. You can
      # update this field anytime before the commitment expires. For example, if
      # the commitment is set to expire at 12 AM UTC-8 on January 3, 2027, you can
      # update this field until 11:59 PM UTC-8 on January 2, 2027.
  &quot;category&quot;: &quot;A String&quot;, # The category of the commitment; specifies whether the commitment is for
      # hardware or software resources. Category MACHINE specifies
      # that you are committing to hardware machine resources such asVCPU or MEMORY, listed in resources.
      # Category LICENSE specifies that you are committing to software
      # licenses, listed in licenseResources.
      # Note that if you specify MACHINE commitments, then you must
      # also specify a type to indicate the machine series of the
      # hardware resource that you are committing to.
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp inRFC3339
      # text format.
  &quot;customEndTimestamp&quot;: &quot;A String&quot;, # [Input Only] Optional, specifies the requested commitment end time inRFC3339 text format. Use this option when the desired
      # commitment&#x27;s end date is later than the start date + term duration.
  &quot;description&quot;: &quot;A String&quot;, # An optional description of the commitment. You can provide this property
      # when you create the resource.
  &quot;endTimestamp&quot;: &quot;A String&quot;, # [Output Only] Commitment end time inRFC3339
      # text format.
  &quot;existingReservations&quot;: [
    &quot;A String&quot;,
  ],
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is
      # defined by the server.
  &quot;kind&quot;: &quot;compute#commitment&quot;, # [Output Only] Type of the resource. Always compute#commitment
      # for commitments.
  &quot;licenseResource&quot;: { # Commitment for a particular license resource. # The license specification required as part of a license commitment.
    &quot;amount&quot;: &quot;A String&quot;, # The number of licenses you plan to purchase.
    &quot;coresPerLicense&quot;: &quot;A String&quot;, # The number of cores per license.
    &quot;license&quot;: &quot;A String&quot;, # The applicable license URI.
  },
  &quot;mergeSourceCommitments&quot;: [ # The list of source commitments that you are merging to create the new
      # merged commitment. For more information, see
      # Merging commitments.
    &quot;A String&quot;,
  ],
  &quot;name&quot;: &quot;A String&quot;, # Name of the commitment. You must specify a name when you purchase the
      # commitment. The name must be 1-63 characters long, and comply withRFC1035.
      # Specifically, the name must be 1-63 characters long and match the regular
      # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
      # character must be a lowercase letter, and all following characters must
      # be a dash, lowercase letter, or digit, except the last character, which
      # cannot be a dash.
  &quot;plan&quot;: &quot;A String&quot;, # The minimum time duration that you commit to purchasing resources.
      # The plan that you choose determines the preset term length of the
      # commitment (which is 1 year or 3 years) and affects the discount rate that
      # you receive for your resources. Committing to a longer time duration
      # typically gives you a higher discount rate. The supported values for this
      # field are TWELVE_MONTH (1 year), andTHIRTY_SIX_MONTH (3 years).
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] URL of the region where the commitment and committed
      # resources are located.
  &quot;reservations&quot;: [ # The list of new reservations that you want to create and attach to this
      # commitment.
      # 
      # You must attach reservations to your commitment if your commitment
      # specifies any GPUs or Local SSD disks. For more information, see
      # Attach reservations to resource-based commitments.
      # 
      # Specify this property only if you want to create new
      # reservations to attach. To attach existing reservations, specify theexistingReservations property instead.
    { # Represents a reservation resource.  A reservation ensures that capacity is
        # held in a specific zone even if the reserved VMs are not running. For more
        # information, read  Reserving zonal
        # resources.
      &quot;advancedDeploymentControl&quot;: { # Advance control for cluster management, applicable only to DENSE deployment # Advanced control for cluster management, applicable only to DENSE
          # deployment type reservations.
          # type reservations.
        &quot;reservationOperationalMode&quot;: &quot;A String&quot;, # Indicates chosen reservation operational mode for the reservation.
      },
      &quot;aggregateReservation&quot;: { # This reservation type is specified by total resource amounts (e.g. total # Reservation for aggregated resources, providing shape flexibility.
          # count of CPUs) and can account for multiple instance SKUs. In other words,
          # one can create instances of varying shapes against this reservation.
        &quot;hostCount&quot;: 42, # Count of reserved hosts of specified VM family. The host has fixed number
            # of accelerators based on the accelerator/vm-family selected.
        &quot;inUseHostCount&quot;: 42, # Number of hosts currently in use. If there is one or more Instances
            # running on the host, it is considered in use.
        &quot;inUseInstanceCount&quot;: 42, # Number of instances currently in use in this reservation.
        &quot;inUseResources&quot;: [ # [Output only] List of resources currently in use.
          {
            &quot;accelerator&quot;: { # Properties of accelerator resources in this reservation.
              &quot;acceleratorCount&quot;: 42, # Number of accelerators of specified type.
              &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL to accelerator type. e.g.
                  # &quot;projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l&quot;
            },
          },
        ],
        &quot;reservedResources&quot;: [ # List of reserved resources (CPUs, memory, accelerators).
          {
            &quot;accelerator&quot;: { # Properties of accelerator resources in this reservation.
              &quot;acceleratorCount&quot;: 42, # Number of accelerators of specified type.
              &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL to accelerator type. e.g.
                  # &quot;projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l&quot;
            },
          },
        ],
        &quot;vmFamily&quot;: &quot;A String&quot;, # The VM family that all instances scheduled against this reservation must
            # belong to.
        &quot;workloadType&quot;: &quot;A String&quot;, # The workload type of the instances that will target this reservation.
      },
      &quot;commitment&quot;: &quot;A String&quot;, # [Output Only] Full or partial URL to a parent commitment. This field
          # displays for reservations that are tied to a commitment.
      &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp inRFC3339
          # text format.
      &quot;deleteAfterDuration&quot;: { # A Duration represents a fixed-length span of time represented # Duration time relative to reservation creation when Compute Engine will
          # automatically delete this resource.
          # as a count of seconds and fractions of seconds at nanosecond
          # resolution. It is independent of any calendar and concepts like &quot;day&quot;
          # or &quot;month&quot;. Range is approximately 10,000 years.
        &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution.
            # Durations less than one second are represented with a 0
            # `seconds` field and a positive `nanos` field. Must be from 0
            # to 999,999,999 inclusive.
        &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0
            # to 315,576,000,000 inclusive. Note: these bounds are computed from:
            # 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
      },
      &quot;deleteAtTime&quot;: &quot;A String&quot;, # Absolute time in future when the reservation will be
          #  auto-deleted by Compute Engine. Timestamp is represented inRFC3339 text format.
      &quot;deploymentType&quot;: &quot;A String&quot;, # Specifies the deployment strategy for this reservation.
      &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you
          # create the resource.
      &quot;enableEmergentMaintenance&quot;: True or False, # Indicates whether Compute Engine allows unplanned maintenance for your VMs;
          # for example, to fix hardware errors.
      &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is
          # defined by the server.
      &quot;kind&quot;: &quot;compute#reservation&quot;, # [Output Only] Type of the resource. Alwayscompute#reservations for reservations.
      &quot;linkedCommitments&quot;: [ # [Output Only] Full or partial URL to parent commitments. This field
          # displays for reservations that are tied to multiple commitments.
        &quot;A String&quot;,
      ],
      &quot;name&quot;: &quot;A String&quot;, # The name of the resource, provided by the client when initially creating
          # the resource. The resource name must be 1-63 characters long, and comply
          # withRFC1035.
          # Specifically, the name must be 1-63 characters long and match the regular
          # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
          # character must be a lowercase letter, and all following characters must be
          # a dash, lowercase letter, or digit, except the last character, which cannot
          # be a dash.
      &quot;protectionTier&quot;: &quot;A String&quot;, # Protection tier for the workload which specifies the workload expectations
          # in the event of infrastructure failures at data center (e.g. power
          # and/or cooling failures).
      &quot;reservationMode&quot;: &quot;A String&quot;, # [Output only] Indicates the reservation mode of the reservation.
      &quot;reservationSharingPolicy&quot;: { # Specify the reservation sharing policy. If unspecified, the reservation
          # will not be shared with Google Cloud managed services.
        &quot;serviceShareType&quot;: &quot;A String&quot;, # Sharing config for all Google Cloud services.
      },
      &quot;resourcePolicies&quot;: { # Resource policies to be added to this reservation. The key is defined by
          # user, and the value is resource policy url. This is to define placement
          # policy with reservation.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;resourceStatus&quot;: { # [Output Only] Contains output only fields. # [Output Only] Status information for Reservation resource.
        &quot;healthInfo&quot;: { # Health information for the reservation. # [Output only] Health information for the reservation.
          &quot;degradedBlockCount&quot;: 42, # The number of reservation blocks that are degraded.
          &quot;healthStatus&quot;: &quot;A String&quot;, # The health status of the reservation.
          &quot;healthyBlockCount&quot;: 42, # The number of reservation blocks that are healthy.
        },
        &quot;reservationBlockCount&quot;: 42, # The number of reservation blocks associated with this reservation.
        &quot;reservationMaintenance&quot;: { # Maintenance Info for ReservationBlocks. # Maintenance information for this reservation
          &quot;instanceMaintenanceOngoingCount&quot;: 42, # Describes number of instances that have ongoing maintenance.
          &quot;instanceMaintenancePendingCount&quot;: 42, # Describes number of instances that have pending maintenance.
          &quot;maintenanceOngoingCount&quot;: 42, # Progress for ongoing maintenance for this group of VMs/hosts.
              # Describes number of hosts in the block that have ongoing maintenance.
          &quot;maintenancePendingCount&quot;: 42, # Progress for ongoing maintenance for this group of VMs/hosts.
              # Describes number of hosts in the block that have pending maintenance.
          &quot;schedulingType&quot;: &quot;A String&quot;, # The type of maintenance for the reservation.
          &quot;subblockInfraMaintenanceOngoingCount&quot;: 42, # Describes number of subblock Infrastructure that has ongoing maintenance.
              # Here, Subblock Infrastructure Maintenance pertains to upstream hardware
              # contained in the Subblock that is necessary for a VM Family(e.g. NVLink
              # Domains). Not all VM Families will support this field.
          &quot;subblockInfraMaintenancePendingCount&quot;: 42, # Describes number of subblock Infrastructure that has pending maintenance.
              #  Here, Subblock Infrastructure Maintenance pertains to upstream hardware
              #  contained in the Subblock that is necessary for a VM Family (e.g. NVLink
              #  Domains). Not all VM Families will support this field.
          &quot;upcomingGroupMaintenance&quot;: { # Upcoming Maintenance notification information. # Maintenance information on this group of VMs.
            &quot;canReschedule&quot;: True or False, # Indicates if the maintenance can be customer triggered.
            &quot;latestWindowStartTime&quot;: &quot;A String&quot;, # The latest time for the planned maintenance window to start.
                # This timestamp value is in RFC3339 text format.
            &quot;maintenanceOnShutdown&quot;: True or False, # Indicates whether the UpcomingMaintenance will be triggered on VM shutdown.
            &quot;maintenanceReasons&quot;: [ # The reasons for the maintenance. Only valid for vms.
              &quot;A String&quot;,
            ],
            &quot;maintenanceStatus&quot;: &quot;A String&quot;,
            &quot;type&quot;: &quot;A String&quot;, # Defines the type of maintenance.
            &quot;windowEndTime&quot;: &quot;A String&quot;, # The time by which the maintenance disruption will be completed.
                # This timestamp value is in RFC3339 text format.
            &quot;windowStartTime&quot;: &quot;A String&quot;, # The current start time of the maintenance window.
                # This timestamp value is in RFC3339 text format.
          },
        },
        &quot;specificSkuAllocation&quot;: { # Contains Properties set for the reservation. # Allocation Properties of this reservation.
          &quot;sourceInstanceTemplateId&quot;: &quot;A String&quot;, # ID of the instance template used to populate reservation properties.
          &quot;utilizations&quot;: { # Per service utilization breakdown. The Key is the Google Cloud managed
              # service name.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
      },
      &quot;satisfiesPzs&quot;: True or False, # [Output Only] Reserved for future use.
      &quot;schedulingType&quot;: &quot;A String&quot;, # The type of maintenance for the reservation.
      &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined fully-qualified URL for this resource.
      &quot;shareSettings&quot;: { # The share setting for reservations and sole tenancy node groups. # Specify share-settings to create a shared reservation. This property is
          # optional. For more information about the syntax and options for this
          # field and its subfields, see the guide for creating
          # a shared reservation.
        &quot;projectMap&quot;: { # A map of project id and project config. This is only valid when
            # share_type&#x27;s value is SPECIFIC_PROJECTS.
          &quot;a_key&quot;: { # Config for each project in the share settings.
            &quot;projectId&quot;: &quot;A String&quot;, # The project ID, should be same as the key of this project config in the
                # parent map.
          },
        },
        &quot;projects&quot;: [ # A List of Project names to specify consumer projects for this
            # shared-reservation. This is only valid when share_type&#x27;s value is
            # SPECIFIC_PROJECTS.
          &quot;A String&quot;,
        ],
        &quot;shareType&quot;: &quot;A String&quot;, # Type of sharing for this shared-reservation
      },
      &quot;specificReservation&quot;: { # This reservation type allows to pre allocate specific instance # Reservation for instances with specific machine shapes.
          #  configuration.
        &quot;assuredCount&quot;: &quot;A String&quot;, # [Output Only] Indicates how many instances are actually usable currently.
        &quot;count&quot;: &quot;A String&quot;, # Specifies the number of resources that are allocated.
        &quot;inUseCount&quot;: &quot;A String&quot;, # [Output Only] Indicates how many instances are in use.
        &quot;instanceProperties&quot;: { # Properties of the SKU instances being reserved. # The instance properties for the reservation.
            # Next ID: 9
          &quot;guestAccelerators&quot;: [ # Specifies accelerator type and count.
            { # A specification of the type and number of accelerator cards attached to the
                # instance.
              &quot;acceleratorCount&quot;: 42, # The number of the guest accelerator cards exposed to this instance.
              &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL of the accelerator type resource to attach to this
                  # instance. For example:projects/my-project/zones/us-central1-c/acceleratorTypes/nvidia-tesla-p100
                  # If you are creating an instance template, specify only the
                  # accelerator name.
                  # See GPUs on Compute Engine
                  # for a full list of accelerator types.
            },
          ],
          &quot;localSsds&quot;: [ # Specifies amount of local ssd to reserve with each instance. The type
              # of disk is local-ssd.
            {
              &quot;diskSizeGb&quot;: &quot;A String&quot;, # Specifies the size of the disk in base-2 GB.
              &quot;interface&quot;: &quot;A String&quot;, # Specifies the disk interface to use for attaching this disk, which is
                  # either SCSI or NVME. The default isSCSI.
                  # For performance characteristics of SCSI over NVMe, seeLocal SSD performance.
            },
          ],
          &quot;locationHint&quot;: &quot;A String&quot;, # An opaque location hint used to place the allocation close to other
              # resources.
              # This field is for use by internal tools that use the public API.
          &quot;machineType&quot;: &quot;A String&quot;, # Specifies type of machine (name only) which has fixed number of vCPUs
              # and fixed amount of memory. This also includes specifying custom
              # machine type following custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY pattern.
          &quot;maintenanceFreezeDurationHours&quot;: 42, # Specifies the number of hours after reservation creation where
              # instances using the reservation won&#x27;t be scheduled for maintenance.
          &quot;maintenanceInterval&quot;: &quot;A String&quot;, # Specifies the frequency of planned maintenance events. The accepted
              # values are: `PERIODIC`.
          &quot;minCpuPlatform&quot;: &quot;A String&quot;, # Minimum cpu platform the reservation.
        },
        &quot;sourceInstanceTemplate&quot;: &quot;A String&quot;, # Specifies the instance template to create the reservation. If you use
            # this field, you must exclude the instanceProperties field.
            #
            # This field is optional, and it can be a full or partial URL. For example,
            # the following are all valid URLs to an instance template:
            #
            #
            #       - https://www.googleapis.com/compute/v1/projects/project/global/instanceTemplates/instanceTemplate
            #       - projects/project/global/instanceTemplates/instanceTemplate
            #       - global/instanceTemplates/instanceTemplate
      },
      &quot;specificReservationRequired&quot;: True or False, # Indicates whether the reservation can be consumed by VMs with affinity
          # for &quot;any&quot; reservation. If the field is set, then only VMs that target
          # the reservation by name can consume from this reservation.
      &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the reservation.
          #
          #
          #      - CREATING: Reservation resources are being
          #        allocated.
          #      - READY: Reservation resources have been allocated,
          #        and the reservation is ready for use.
          #      - DELETING: Reservation deletion is in progress.
          #      - UPDATING: Reservation update is in progress.
      &quot;zone&quot;: &quot;A String&quot;, # Zone in which the reservation resides. A zone must be provided if the
          # reservation is created within a commitment.
    },
  ],
  &quot;resourceStatus&quot;: { # [Output Only] Contains output only fields. # [Output Only] Status information for Commitment resource.
    &quot;customTermEligibilityEndTimestamp&quot;: &quot;A String&quot;, # [Output Only] Indicates the end time of customer&#x27;s eligibility to send
        # custom term requests in RFC3339 text format. Term extension requests that
        # (not the end time in the request) after this time will be rejected.
  },
  &quot;resources&quot;: [ # The list of all the hardware resources, with their types and amounts, that
      # you want to commit to. Specify as a separate entry in the list for each
      # individual resource type.
    { # Commitment for a particular hardware resource (a commitment is composed of
        # one or more of these).
      &quot;acceleratorType&quot;: &quot;A String&quot;, # Name of the accelerator type or GPU resource. Specify this field only when
          # the type of hardware resource is ACCELERATOR.
      &quot;amount&quot;: &quot;A String&quot;, # The quantity of the hardware resource that you want to commit to purchasing
          # (in a type-dependent unit).
          #
          #    - For vCPUs, you must specify an integer value.
          #    - For memory, you specify the amount of MB that you want. The value you
          #    specify must be a multiple of 256 MB, with up to 6.5 GB of
          #    memory per every vCPU.
          #    - For GPUs, you must specify an integer value.
          #    - For Local SSD disks, you must specify the amount in GB. The size of a
          #    single Local SSD disk is 375 GB.
      &quot;type&quot;: &quot;A String&quot;, # The type of hardware resource that you want to specify.
          # You can specify any of the following values:
          #
          #    - VCPU
          #    - MEMORY
          #    - LOCAL_SSD
          #    - ACCELERATOR
          #
          #
          #
          # Specify as a separate entry in the list for each
          # individual resource type.
    },
  ],
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;splitSourceCommitment&quot;: &quot;A String&quot;, # The source commitment from which you are transferring resources to create
      # the new split commitment. For more information, see
      # Split commitments.
  &quot;startTimestamp&quot;: &quot;A String&quot;, # [Output Only] Commitment start time inRFC3339
      # text format.
  &quot;status&quot;: &quot;A String&quot;, # [Output Only] Status of the commitment with regards to eventual expiration
      # (each commitment has an end date defined). Status can be one of the
      # following values: NOT_YET_ACTIVE, ACTIVE, orEXPIRED.
  &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable explanation of the status.
  &quot;type&quot;: &quot;A String&quot;, # The type of commitment; specifies the
      # machine series for which you want to commit to purchasing resources.
      # The choice of machine series affects the discount rate and the eligible
      # resource types.
      # 
      #  The type must be one of the following:ACCELERATOR_OPTIMIZED, ACCELERATOR_OPTIMIZED_A3,ACCELERATOR_OPTIMIZED_A3_MEGA,COMPUTE_OPTIMIZED, COMPUTE_OPTIMIZED_C2D,
      #  COMPUTE_OPTIMIZED_C3, COMPUTE_OPTIMIZED_C3D,COMPUTE_OPTIMIZED_H3, GENERAL_PURPOSE,GENERAL_PURPOSE_C4, GENERAL_PURPOSE_E2,GENERAL_PURPOSE_N2, GENERAL_PURPOSE_N2D,GENERAL_PURPOSE_N4, GENERAL_PURPOSE_T2D,GRAPHICS_OPTIMIZED, MEMORY_OPTIMIZED,MEMORY_OPTIMIZED_M3, MEMORY_OPTIMIZED_X4,STORAGE_OPTIMIZED_Z3.
      # For example, type MEMORY_OPTIMIZED specifies a commitment
      # that applies only to eligible resources of memory optimized M1 and M2
      # machine series. Type GENERAL_PURPOSE specifies a commitment
      # that applies only to eligible resources of general purpose N1 machine
      # series.
}

  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).
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents an Operation resource.
    #
    # Google Compute Engine has three Operation resources:
    #
    # * [Global](/compute/docs/reference/rest/beta/globalOperations)
    # * [Regional](/compute/docs/reference/rest/beta/regionOperations)
    # * [Zonal](/compute/docs/reference/rest/beta/zoneOperations)
    #
    # You can use an operation resource to manage asynchronous API requests.
    # For more information, readHandling
    # API responses.
    #
    # Operations can be global, regional or zonal.
    #
    #    - For global operations, use the `globalOperations`
    #    resource.
    #    - For regional operations, use the
    #    `regionOperations` resource.
    #    - For zonal operations, use
    #    the `zoneOperations` resource.
    #
    #
    #
    # For more information, read
    # Global, Regional, and Zonal Resources.
    #
    # Note that completed Operation resources have a limited
    # retention period.
  &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The value of `requestId` if you provided it in the request.
      # Not present otherwise.
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Deprecated] This field is deprecated.
  &quot;description&quot;: &quot;A String&quot;, # [Output Only] A textual description of the operation, which is
      # set when the operation is created.
  &quot;endTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was completed. This value is inRFC3339
      # text format.
  &quot;error&quot;: { # [Output Only] If errors are generated during processing of the operation,
      # this field will be populated.
    &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this
        # operation.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
        &quot;errorDetails&quot;: [ # [Output Only] An optional list of messages that contain the error
            # details. There is a set of defined message types to use for providing
            # details.The syntax depends on the error code. For example,
            # QuotaExceededInfo will have details when the error code is
            # QUOTA_EXCEEDED.
          {
            &quot;errorInfo&quot;: { # Describes the cause of the error with structured details.
                #
                # Example of an error when contacting the &quot;pubsub.googleapis.com&quot; API when it
                # is not enabled:
                #
                #     { &quot;reason&quot;: &quot;API_DISABLED&quot;
                #       &quot;domain&quot;: &quot;googleapis.com&quot;
                #       &quot;metadata&quot;: {
                #         &quot;resource&quot;: &quot;projects/123&quot;,
                #         &quot;service&quot;: &quot;pubsub.googleapis.com&quot;
                #       }
                #     }
                #
                # This response indicates that the pubsub.googleapis.com API is not enabled.
                #
                # Example of an error that is returned when attempting to create a Spanner
                # instance in a region that is out of stock:
                #
                #     { &quot;reason&quot;: &quot;STOCKOUT&quot;
                #       &quot;domain&quot;: &quot;spanner.googleapis.com&quot;,
                #       &quot;metadata&quot;: {
                #         &quot;availableRegions&quot;: &quot;us-central1,us-east2&quot;
                #       }
                #     }
              &quot;domain&quot;: &quot;A String&quot;, # The logical grouping to which the &quot;reason&quot; belongs. The error domain
                  # is typically the registered service name of the tool or product that
                  # generates the error. Example: &quot;pubsub.googleapis.com&quot;. If the error is
                  # generated by some common infrastructure, the error domain must be a
                  # globally unique value that identifies the infrastructure. For Google API
                  # infrastructure, the error domain is &quot;googleapis.com&quot;.
              &quot;metadatas&quot;: { # Additional structured details about this error.
                  #
                  # Keys must match a regular expression of `a-z+` but should
                  # ideally be lowerCamelCase. Also, they must be limited to 64 characters in
                  # length. When identifying the current value of an exceeded limit, the units
                  # should be contained in the key, not the value.  For example, rather than
                  # `{&quot;instanceLimit&quot;: &quot;100/request&quot;}`, should be returned as,
                  # `{&quot;instanceLimitPerRequest&quot;: &quot;100&quot;}`, if the client exceeds the number of
                  # instances that can be created in a single (batch) request.
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;reason&quot;: &quot;A String&quot;, # The reason of the error. This is a constant value that identifies the
                  # proximate cause of the error. Error reasons are unique within a particular
                  # domain of errors. This should be at most 63 characters and match a
                  # regular expression of `A-Z+[A-Z0-9]`, which represents
                  # UPPER_SNAKE_CASE.
            },
            &quot;help&quot;: { # Provides links to documentation or for performing an out of band action.
                #
                # For example, if a quota check failed with an error indicating the calling
                # project hasn&#x27;t enabled the accessed service, this can contain a URL pointing
                # directly to the right place in the developer console to flip the bit.
              &quot;links&quot;: [ # URL(s) pointing to additional information on handling the current error.
                { # Describes a URL link.
                  &quot;description&quot;: &quot;A String&quot;, # Describes what the link offers.
                  &quot;url&quot;: &quot;A String&quot;, # The URL of the link.
                },
              ],
            },
            &quot;localizedMessage&quot;: { # Provides a localized error message that is safe to return to the user
                # which can be attached to an RPC error.
              &quot;locale&quot;: &quot;A String&quot;, # The locale used following the specification defined at
                  # https://www.rfc-editor.org/rfc/bcp/bcp47.txt.
                  # Examples are: &quot;en-US&quot;, &quot;fr-CH&quot;, &quot;es-MX&quot;
              &quot;message&quot;: &quot;A String&quot;, # The localized error message in the above locale.
            },
            &quot;quotaInfo&quot;: { # Additional details for quota exceeded error for resource quota.
              &quot;dimensions&quot;: { # The map holding related quota dimensions.
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;futureLimit&quot;: 3.14, # Future quota limit being rolled out. The limit&#x27;s unit depends on the quota
                  #  type or metric.
              &quot;limit&quot;: 3.14, # Current effective quota limit. The limit&#x27;s unit depends on the quota type
                  # or metric.
              &quot;limitName&quot;: &quot;A String&quot;, # The name of the quota limit.
              &quot;metricName&quot;: &quot;A String&quot;, # The Compute Engine quota metric name.
              &quot;rolloutStatus&quot;: &quot;A String&quot;, # Rollout status of the future quota limit.
            },
          },
        ],
        &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error.
            # This property is optional.
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
      },
    ],
  },
  &quot;httpErrorMessage&quot;: &quot;A String&quot;, # [Output Only] If the operation fails, this field contains the HTTP error
      # message that was returned, such as `NOT FOUND`.
  &quot;httpErrorStatusCode&quot;: 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.
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the operation. This identifier is
      # defined by the server.
  &quot;insertTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was requested.
      # This value is inRFC3339
      # text format.
  &quot;instancesBulkInsertOperationMetadata&quot;: {
    &quot;perLocationStatus&quot;: { # Status information per location (location name is key).
        # Example key: zones/us-central1-a
      &quot;a_key&quot;: {
        &quot;createdVmCount&quot;: 42, # [Output Only] Count of VMs successfully created so far.
        &quot;deletedVmCount&quot;: 42, # [Output Only] Count of VMs that got deleted during rollback.
        &quot;failedToCreateVmCount&quot;: 42, # [Output Only] Count of VMs that started creating but encountered an
            # error.
        &quot;status&quot;: &quot;A String&quot;, # [Output Only] Creation status of BulkInsert operation - information
            # if the flow is rolling forward or rolling back.
        &quot;targetVmCount&quot;: 42, # [Output Only] Count of VMs originally planned to be created.
      },
    },
  },
  &quot;kind&quot;: &quot;compute#operation&quot;, # [Output Only] Type of the resource. Always `compute#operation` for
      # Operation resources.
  &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the operation.
  &quot;operationGroupId&quot;: &quot;A String&quot;, # [Output Only] An ID that represents a group of operations, such as when a
      # group of operations results from a `bulkInsert` API request.
  &quot;operationType&quot;: &quot;A String&quot;, # [Output Only] The type of operation, such as `insert`,
      # `update`, or `delete`, and so on.
  &quot;progress&quot;: 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.
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the operation resides. Only
      # applicable when performing regional operations.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;setCommonInstanceMetadataOperationMetadata&quot;: { # [Output Only] If the operation is for projects.setCommonInstanceMetadata,
      # this field will contain information on all underlying zonal actions and
      # their state.
    &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The client operation id.
    &quot;perLocationOperations&quot;: { # [Output Only] Status information per location (location name is key).
        # Example key: zones/us-central1-a
      &quot;a_key&quot;: {
        &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # [Output Only] If state is `ABANDONED` or `FAILED`, this field is
            # populated.
            # different programming environments, including REST APIs and RPC APIs. It is
            # used by [gRPC](https://github.com/grpc). Each `Status` message contains
            # three pieces of data: error code, error message, and error details.
            #
            # You can find out more about this error model and how to work with it in the
            # [API Design Guide](https://cloud.google.com/apis/design/errors).
          &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
          &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
            },
          ],
          &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
              # user-facing error message should be localized and sent in the
              # google.rpc.Status.details field, or localized by the client.
        },
        &quot;state&quot;: &quot;A String&quot;, # [Output Only] Status of the action, which can be one of the following:
            # `PROPAGATING`, `PROPAGATED`, `ABANDONED`, `FAILED`, or `DONE`.
      },
    },
  },
  &quot;startTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was started by the server.
      # This value is inRFC3339
      # text format.
  &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the operation, which can be one of the
      # following:
      # `PENDING`, `RUNNING`, or `DONE`.
  &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional textual description of the current status of the
      # operation.
  &quot;targetId&quot;: &quot;A String&quot;, # [Output Only] The unique target ID, which identifies a specific incarnation
      # of the target resource.
  &quot;targetLink&quot;: &quot;A String&quot;, # [Output Only] The URL of the resource that the operation modifies. For
      # operations related to creating a snapshot, this points to the disk
      # that the snapshot was created from.
  &quot;user&quot;: &quot;A String&quot;, # [Output Only] User who requested the operation, for example:
      # `user@example.com` or
      # `alice_smith_identifier (global/workforcePools/example-com-us-employees)`.
  &quot;warnings&quot;: [ # [Output Only] If warning messages are generated during processing of the
      # operation, this field will be populated.
    {
      &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
      &quot;data&quot;: [ # [Output Only] Metadata about this warning in key:
          # value format. For example:
          #
          # &quot;data&quot;: [
          #   {
          #    &quot;key&quot;: &quot;scope&quot;,
          #    &quot;value&quot;: &quot;zones/us-east1-d&quot;
          #   }
        {
          &quot;key&quot;: &quot;A String&quot;, # [Output Only] A key that provides more detail on the warning being
              # returned. For example, for warnings where there are no results in a list
              # request for a particular zone, this key might be scope and
              # the key value might be the zone name. Other examples might be a key
              # indicating a deprecated resource and a suggested replacement, or a
              # warning about invalid network settings (for example, if an instance
              # attempts to perform IP forwarding but is not enabled for IP forwarding).
          &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
    },
  ],
  &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the operation resides. Only
      # applicable when performing per-zone operations.
}</pre>
</div>

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

Args:
  project: string, Project ID for this request. (required)
  region: string, Name of the region for this request. (required)
  filter: string, A filter expression that filters resources listed in the response. Most
Compute resources support two types of filter expressions:
expressions that support regular expressions and expressions that follow
API improvement proposal AIP-160.
These two types of filter expressions cannot be mixed in one request.

If you want to use AIP-160, your expression must specify the field name, an
operator, and the value that you want to use for filtering. The value
must be a string, a number, or a boolean. The operator
must be either `=`, `!=`, `&gt;`, `&lt;`, `&lt;=`, `&gt;=` or `:`.

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

The `:*` comparison can be used to test whether a key has been defined.
For example, to find all objects with `owner` label use:
```
labels.owner:*
```

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 onresource labels.

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

If you want to use a regular expression, use the `eq` (equal) or `ne`
(not equal) operator against a single un-parenthesized expression with or
without quotes or against multiple parenthesized expressions. Examples:

`fieldname eq unquoted literal`
`fieldname eq &#x27;single quoted literal&#x27;`
`fieldname eq &quot;double quoted literal&quot;`
`(fieldname1 eq literal) (fieldname2 ne &quot;literal&quot;)`

The literal value is interpreted as a regular expression using GoogleRE2 library syntax.
The literal value must match the entire field.

For example, to filter for instances that do not end with name &quot;instance&quot;,
you would use `name ne .*instance`.

You cannot combine constraints on multiple fields using regular
expressions.
  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`)
  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=&quot;creationTimestamp desc&quot;`. 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.
  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.
  returnPartialSuccess: boolean, Opt-in for partial success behavior which provides partial results in case
of failure. The default value is false.

For example, when partial success behavior is enabled, aggregatedList for a
single zone scope either returns all resources in the zone or no resources,
with an error code.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Contains a list of Commitment resources.
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] Unique identifier for the resource; defined by the server.
  &quot;items&quot;: [ # A list of Commitment resources.
    { # Represents a regional resource-based commitment resource.
        #
        # Creating this commitment resource means that you are purchasing a
        # resource-based committed use contract, with an explicit start and end time.
        # You can purchase resource-based commitments for both hardware and software
        # resources. For more information, read
        # Resource-based committed use discounts
      &quot;autoRenew&quot;: True or False, # Specifies whether to automatically renew the commitment at the end of its
          # current term. The default value is false. If you set the field
          # to true, each time your commitment reaches the end of its
          # term, Compute Engine automatically renews it for another term. You can
          # update this field anytime before the commitment expires. For example, if
          # the commitment is set to expire at 12 AM UTC-8 on January 3, 2027, you can
          # update this field until 11:59 PM UTC-8 on January 2, 2027.
      &quot;category&quot;: &quot;A String&quot;, # The category of the commitment; specifies whether the commitment is for
          # hardware or software resources. Category MACHINE specifies
          # that you are committing to hardware machine resources such asVCPU or MEMORY, listed in resources.
          # Category LICENSE specifies that you are committing to software
          # licenses, listed in licenseResources.
          # Note that if you specify MACHINE commitments, then you must
          # also specify a type to indicate the machine series of the
          # hardware resource that you are committing to.
      &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp inRFC3339
          # text format.
      &quot;customEndTimestamp&quot;: &quot;A String&quot;, # [Input Only] Optional, specifies the requested commitment end time inRFC3339 text format. Use this option when the desired
          # commitment&#x27;s end date is later than the start date + term duration.
      &quot;description&quot;: &quot;A String&quot;, # An optional description of the commitment. You can provide this property
          # when you create the resource.
      &quot;endTimestamp&quot;: &quot;A String&quot;, # [Output Only] Commitment end time inRFC3339
          # text format.
      &quot;existingReservations&quot;: [
        &quot;A String&quot;,
      ],
      &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is
          # defined by the server.
      &quot;kind&quot;: &quot;compute#commitment&quot;, # [Output Only] Type of the resource. Always compute#commitment
          # for commitments.
      &quot;licenseResource&quot;: { # Commitment for a particular license resource. # The license specification required as part of a license commitment.
        &quot;amount&quot;: &quot;A String&quot;, # The number of licenses you plan to purchase.
        &quot;coresPerLicense&quot;: &quot;A String&quot;, # The number of cores per license.
        &quot;license&quot;: &quot;A String&quot;, # The applicable license URI.
      },
      &quot;mergeSourceCommitments&quot;: [ # The list of source commitments that you are merging to create the new
          # merged commitment. For more information, see
          # Merging commitments.
        &quot;A String&quot;,
      ],
      &quot;name&quot;: &quot;A String&quot;, # Name of the commitment. You must specify a name when you purchase the
          # commitment. The name must be 1-63 characters long, and comply withRFC1035.
          # Specifically, the name must be 1-63 characters long and match the regular
          # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
          # character must be a lowercase letter, and all following characters must
          # be a dash, lowercase letter, or digit, except the last character, which
          # cannot be a dash.
      &quot;plan&quot;: &quot;A String&quot;, # The minimum time duration that you commit to purchasing resources.
          # The plan that you choose determines the preset term length of the
          # commitment (which is 1 year or 3 years) and affects the discount rate that
          # you receive for your resources. Committing to a longer time duration
          # typically gives you a higher discount rate. The supported values for this
          # field are TWELVE_MONTH (1 year), andTHIRTY_SIX_MONTH (3 years).
      &quot;region&quot;: &quot;A String&quot;, # [Output Only] URL of the region where the commitment and committed
          # resources are located.
      &quot;reservations&quot;: [ # The list of new reservations that you want to create and attach to this
          # commitment.
          #
          # You must attach reservations to your commitment if your commitment
          # specifies any GPUs or Local SSD disks. For more information, see
          # Attach reservations to resource-based commitments.
          #
          # Specify this property only if you want to create new
          # reservations to attach. To attach existing reservations, specify theexistingReservations property instead.
        { # Represents a reservation resource.  A reservation ensures that capacity is
            # held in a specific zone even if the reserved VMs are not running. For more
            # information, read  Reserving zonal
            # resources.
          &quot;advancedDeploymentControl&quot;: { # Advance control for cluster management, applicable only to DENSE deployment # Advanced control for cluster management, applicable only to DENSE
              # deployment type reservations.
              # type reservations.
            &quot;reservationOperationalMode&quot;: &quot;A String&quot;, # Indicates chosen reservation operational mode for the reservation.
          },
          &quot;aggregateReservation&quot;: { # This reservation type is specified by total resource amounts (e.g. total # Reservation for aggregated resources, providing shape flexibility.
              # count of CPUs) and can account for multiple instance SKUs. In other words,
              # one can create instances of varying shapes against this reservation.
            &quot;hostCount&quot;: 42, # Count of reserved hosts of specified VM family. The host has fixed number
                # of accelerators based on the accelerator/vm-family selected.
            &quot;inUseHostCount&quot;: 42, # Number of hosts currently in use. If there is one or more Instances
                # running on the host, it is considered in use.
            &quot;inUseInstanceCount&quot;: 42, # Number of instances currently in use in this reservation.
            &quot;inUseResources&quot;: [ # [Output only] List of resources currently in use.
              {
                &quot;accelerator&quot;: { # Properties of accelerator resources in this reservation.
                  &quot;acceleratorCount&quot;: 42, # Number of accelerators of specified type.
                  &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL to accelerator type. e.g.
                      # &quot;projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l&quot;
                },
              },
            ],
            &quot;reservedResources&quot;: [ # List of reserved resources (CPUs, memory, accelerators).
              {
                &quot;accelerator&quot;: { # Properties of accelerator resources in this reservation.
                  &quot;acceleratorCount&quot;: 42, # Number of accelerators of specified type.
                  &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL to accelerator type. e.g.
                      # &quot;projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l&quot;
                },
              },
            ],
            &quot;vmFamily&quot;: &quot;A String&quot;, # The VM family that all instances scheduled against this reservation must
                # belong to.
            &quot;workloadType&quot;: &quot;A String&quot;, # The workload type of the instances that will target this reservation.
          },
          &quot;commitment&quot;: &quot;A String&quot;, # [Output Only] Full or partial URL to a parent commitment. This field
              # displays for reservations that are tied to a commitment.
          &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp inRFC3339
              # text format.
          &quot;deleteAfterDuration&quot;: { # A Duration represents a fixed-length span of time represented # Duration time relative to reservation creation when Compute Engine will
              # automatically delete this resource.
              # as a count of seconds and fractions of seconds at nanosecond
              # resolution. It is independent of any calendar and concepts like &quot;day&quot;
              # or &quot;month&quot;. Range is approximately 10,000 years.
            &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution.
                # Durations less than one second are represented with a 0
                # `seconds` field and a positive `nanos` field. Must be from 0
                # to 999,999,999 inclusive.
            &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0
                # to 315,576,000,000 inclusive. Note: these bounds are computed from:
                # 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
          },
          &quot;deleteAtTime&quot;: &quot;A String&quot;, # Absolute time in future when the reservation will be
              #  auto-deleted by Compute Engine. Timestamp is represented inRFC3339 text format.
          &quot;deploymentType&quot;: &quot;A String&quot;, # Specifies the deployment strategy for this reservation.
          &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you
              # create the resource.
          &quot;enableEmergentMaintenance&quot;: True or False, # Indicates whether Compute Engine allows unplanned maintenance for your VMs;
              # for example, to fix hardware errors.
          &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is
              # defined by the server.
          &quot;kind&quot;: &quot;compute#reservation&quot;, # [Output Only] Type of the resource. Alwayscompute#reservations for reservations.
          &quot;linkedCommitments&quot;: [ # [Output Only] Full or partial URL to parent commitments. This field
              # displays for reservations that are tied to multiple commitments.
            &quot;A String&quot;,
          ],
          &quot;name&quot;: &quot;A String&quot;, # The name of the resource, provided by the client when initially creating
              # the resource. The resource name must be 1-63 characters long, and comply
              # withRFC1035.
              # Specifically, the name must be 1-63 characters long and match the regular
              # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
              # character must be a lowercase letter, and all following characters must be
              # a dash, lowercase letter, or digit, except the last character, which cannot
              # be a dash.
          &quot;protectionTier&quot;: &quot;A String&quot;, # Protection tier for the workload which specifies the workload expectations
              # in the event of infrastructure failures at data center (e.g. power
              # and/or cooling failures).
          &quot;reservationMode&quot;: &quot;A String&quot;, # [Output only] Indicates the reservation mode of the reservation.
          &quot;reservationSharingPolicy&quot;: { # Specify the reservation sharing policy. If unspecified, the reservation
              # will not be shared with Google Cloud managed services.
            &quot;serviceShareType&quot;: &quot;A String&quot;, # Sharing config for all Google Cloud services.
          },
          &quot;resourcePolicies&quot;: { # Resource policies to be added to this reservation. The key is defined by
              # user, and the value is resource policy url. This is to define placement
              # policy with reservation.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;resourceStatus&quot;: { # [Output Only] Contains output only fields. # [Output Only] Status information for Reservation resource.
            &quot;healthInfo&quot;: { # Health information for the reservation. # [Output only] Health information for the reservation.
              &quot;degradedBlockCount&quot;: 42, # The number of reservation blocks that are degraded.
              &quot;healthStatus&quot;: &quot;A String&quot;, # The health status of the reservation.
              &quot;healthyBlockCount&quot;: 42, # The number of reservation blocks that are healthy.
            },
            &quot;reservationBlockCount&quot;: 42, # The number of reservation blocks associated with this reservation.
            &quot;reservationMaintenance&quot;: { # Maintenance Info for ReservationBlocks. # Maintenance information for this reservation
              &quot;instanceMaintenanceOngoingCount&quot;: 42, # Describes number of instances that have ongoing maintenance.
              &quot;instanceMaintenancePendingCount&quot;: 42, # Describes number of instances that have pending maintenance.
              &quot;maintenanceOngoingCount&quot;: 42, # Progress for ongoing maintenance for this group of VMs/hosts.
                  # Describes number of hosts in the block that have ongoing maintenance.
              &quot;maintenancePendingCount&quot;: 42, # Progress for ongoing maintenance for this group of VMs/hosts.
                  # Describes number of hosts in the block that have pending maintenance.
              &quot;schedulingType&quot;: &quot;A String&quot;, # The type of maintenance for the reservation.
              &quot;subblockInfraMaintenanceOngoingCount&quot;: 42, # Describes number of subblock Infrastructure that has ongoing maintenance.
                  # Here, Subblock Infrastructure Maintenance pertains to upstream hardware
                  # contained in the Subblock that is necessary for a VM Family(e.g. NVLink
                  # Domains). Not all VM Families will support this field.
              &quot;subblockInfraMaintenancePendingCount&quot;: 42, # Describes number of subblock Infrastructure that has pending maintenance.
                  #  Here, Subblock Infrastructure Maintenance pertains to upstream hardware
                  #  contained in the Subblock that is necessary for a VM Family (e.g. NVLink
                  #  Domains). Not all VM Families will support this field.
              &quot;upcomingGroupMaintenance&quot;: { # Upcoming Maintenance notification information. # Maintenance information on this group of VMs.
                &quot;canReschedule&quot;: True or False, # Indicates if the maintenance can be customer triggered.
                &quot;latestWindowStartTime&quot;: &quot;A String&quot;, # The latest time for the planned maintenance window to start.
                    # This timestamp value is in RFC3339 text format.
                &quot;maintenanceOnShutdown&quot;: True or False, # Indicates whether the UpcomingMaintenance will be triggered on VM shutdown.
                &quot;maintenanceReasons&quot;: [ # The reasons for the maintenance. Only valid for vms.
                  &quot;A String&quot;,
                ],
                &quot;maintenanceStatus&quot;: &quot;A String&quot;,
                &quot;type&quot;: &quot;A String&quot;, # Defines the type of maintenance.
                &quot;windowEndTime&quot;: &quot;A String&quot;, # The time by which the maintenance disruption will be completed.
                    # This timestamp value is in RFC3339 text format.
                &quot;windowStartTime&quot;: &quot;A String&quot;, # The current start time of the maintenance window.
                    # This timestamp value is in RFC3339 text format.
              },
            },
            &quot;specificSkuAllocation&quot;: { # Contains Properties set for the reservation. # Allocation Properties of this reservation.
              &quot;sourceInstanceTemplateId&quot;: &quot;A String&quot;, # ID of the instance template used to populate reservation properties.
              &quot;utilizations&quot;: { # Per service utilization breakdown. The Key is the Google Cloud managed
                  # service name.
                &quot;a_key&quot;: &quot;A String&quot;,
              },
            },
          },
          &quot;satisfiesPzs&quot;: True or False, # [Output Only] Reserved for future use.
          &quot;schedulingType&quot;: &quot;A String&quot;, # The type of maintenance for the reservation.
          &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined fully-qualified URL for this resource.
          &quot;shareSettings&quot;: { # The share setting for reservations and sole tenancy node groups. # Specify share-settings to create a shared reservation. This property is
              # optional. For more information about the syntax and options for this
              # field and its subfields, see the guide for creating
              # a shared reservation.
            &quot;projectMap&quot;: { # A map of project id and project config. This is only valid when
                # share_type&#x27;s value is SPECIFIC_PROJECTS.
              &quot;a_key&quot;: { # Config for each project in the share settings.
                &quot;projectId&quot;: &quot;A String&quot;, # The project ID, should be same as the key of this project config in the
                    # parent map.
              },
            },
            &quot;projects&quot;: [ # A List of Project names to specify consumer projects for this
                # shared-reservation. This is only valid when share_type&#x27;s value is
                # SPECIFIC_PROJECTS.
              &quot;A String&quot;,
            ],
            &quot;shareType&quot;: &quot;A String&quot;, # Type of sharing for this shared-reservation
          },
          &quot;specificReservation&quot;: { # This reservation type allows to pre allocate specific instance # Reservation for instances with specific machine shapes.
              #  configuration.
            &quot;assuredCount&quot;: &quot;A String&quot;, # [Output Only] Indicates how many instances are actually usable currently.
            &quot;count&quot;: &quot;A String&quot;, # Specifies the number of resources that are allocated.
            &quot;inUseCount&quot;: &quot;A String&quot;, # [Output Only] Indicates how many instances are in use.
            &quot;instanceProperties&quot;: { # Properties of the SKU instances being reserved. # The instance properties for the reservation.
                # Next ID: 9
              &quot;guestAccelerators&quot;: [ # Specifies accelerator type and count.
                { # A specification of the type and number of accelerator cards attached to the
                    # instance.
                  &quot;acceleratorCount&quot;: 42, # The number of the guest accelerator cards exposed to this instance.
                  &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL of the accelerator type resource to attach to this
                      # instance. For example:projects/my-project/zones/us-central1-c/acceleratorTypes/nvidia-tesla-p100
                      # If you are creating an instance template, specify only the
                      # accelerator name.
                      # See GPUs on Compute Engine
                      # for a full list of accelerator types.
                },
              ],
              &quot;localSsds&quot;: [ # Specifies amount of local ssd to reserve with each instance. The type
                  # of disk is local-ssd.
                {
                  &quot;diskSizeGb&quot;: &quot;A String&quot;, # Specifies the size of the disk in base-2 GB.
                  &quot;interface&quot;: &quot;A String&quot;, # Specifies the disk interface to use for attaching this disk, which is
                      # either SCSI or NVME. The default isSCSI.
                      # For performance characteristics of SCSI over NVMe, seeLocal SSD performance.
                },
              ],
              &quot;locationHint&quot;: &quot;A String&quot;, # An opaque location hint used to place the allocation close to other
                  # resources.
                  # This field is for use by internal tools that use the public API.
              &quot;machineType&quot;: &quot;A String&quot;, # Specifies type of machine (name only) which has fixed number of vCPUs
                  # and fixed amount of memory. This also includes specifying custom
                  # machine type following custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY pattern.
              &quot;maintenanceFreezeDurationHours&quot;: 42, # Specifies the number of hours after reservation creation where
                  # instances using the reservation won&#x27;t be scheduled for maintenance.
              &quot;maintenanceInterval&quot;: &quot;A String&quot;, # Specifies the frequency of planned maintenance events. The accepted
                  # values are: `PERIODIC`.
              &quot;minCpuPlatform&quot;: &quot;A String&quot;, # Minimum cpu platform the reservation.
            },
            &quot;sourceInstanceTemplate&quot;: &quot;A String&quot;, # Specifies the instance template to create the reservation. If you use
                # this field, you must exclude the instanceProperties field.
                #
                # This field is optional, and it can be a full or partial URL. For example,
                # the following are all valid URLs to an instance template:
                #
                #
                #       - https://www.googleapis.com/compute/v1/projects/project/global/instanceTemplates/instanceTemplate
                #       - projects/project/global/instanceTemplates/instanceTemplate
                #       - global/instanceTemplates/instanceTemplate
          },
          &quot;specificReservationRequired&quot;: True or False, # Indicates whether the reservation can be consumed by VMs with affinity
              # for &quot;any&quot; reservation. If the field is set, then only VMs that target
              # the reservation by name can consume from this reservation.
          &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the reservation.
              #
              #
              #      - CREATING: Reservation resources are being
              #        allocated.
              #      - READY: Reservation resources have been allocated,
              #        and the reservation is ready for use.
              #      - DELETING: Reservation deletion is in progress.
              #      - UPDATING: Reservation update is in progress.
          &quot;zone&quot;: &quot;A String&quot;, # Zone in which the reservation resides. A zone must be provided if the
              # reservation is created within a commitment.
        },
      ],
      &quot;resourceStatus&quot;: { # [Output Only] Contains output only fields. # [Output Only] Status information for Commitment resource.
        &quot;customTermEligibilityEndTimestamp&quot;: &quot;A String&quot;, # [Output Only] Indicates the end time of customer&#x27;s eligibility to send
            # custom term requests in RFC3339 text format. Term extension requests that
            # (not the end time in the request) after this time will be rejected.
      },
      &quot;resources&quot;: [ # The list of all the hardware resources, with their types and amounts, that
          # you want to commit to. Specify as a separate entry in the list for each
          # individual resource type.
        { # Commitment for a particular hardware resource (a commitment is composed of
            # one or more of these).
          &quot;acceleratorType&quot;: &quot;A String&quot;, # Name of the accelerator type or GPU resource. Specify this field only when
              # the type of hardware resource is ACCELERATOR.
          &quot;amount&quot;: &quot;A String&quot;, # The quantity of the hardware resource that you want to commit to purchasing
              # (in a type-dependent unit).
              #
              #    - For vCPUs, you must specify an integer value.
              #    - For memory, you specify the amount of MB that you want. The value you
              #    specify must be a multiple of 256 MB, with up to 6.5 GB of
              #    memory per every vCPU.
              #    - For GPUs, you must specify an integer value.
              #    - For Local SSD disks, you must specify the amount in GB. The size of a
              #    single Local SSD disk is 375 GB.
          &quot;type&quot;: &quot;A String&quot;, # The type of hardware resource that you want to specify.
              # You can specify any of the following values:
              #
              #    - VCPU
              #    - MEMORY
              #    - LOCAL_SSD
              #    - ACCELERATOR
              #
              #
              #
              # Specify as a separate entry in the list for each
              # individual resource type.
        },
      ],
      &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
      &quot;splitSourceCommitment&quot;: &quot;A String&quot;, # The source commitment from which you are transferring resources to create
          # the new split commitment. For more information, see
          # Split commitments.
      &quot;startTimestamp&quot;: &quot;A String&quot;, # [Output Only] Commitment start time inRFC3339
          # text format.
      &quot;status&quot;: &quot;A String&quot;, # [Output Only] Status of the commitment with regards to eventual expiration
          # (each commitment has an end date defined). Status can be one of the
          # following values: NOT_YET_ACTIVE, ACTIVE, orEXPIRED.
      &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable explanation of the status.
      &quot;type&quot;: &quot;A String&quot;, # The type of commitment; specifies the
          # machine series for which you want to commit to purchasing resources.
          # The choice of machine series affects the discount rate and the eligible
          # resource types.
          #
          #  The type must be one of the following:ACCELERATOR_OPTIMIZED, ACCELERATOR_OPTIMIZED_A3,ACCELERATOR_OPTIMIZED_A3_MEGA,COMPUTE_OPTIMIZED, COMPUTE_OPTIMIZED_C2D,
          #  COMPUTE_OPTIMIZED_C3, COMPUTE_OPTIMIZED_C3D,COMPUTE_OPTIMIZED_H3, GENERAL_PURPOSE,GENERAL_PURPOSE_C4, GENERAL_PURPOSE_E2,GENERAL_PURPOSE_N2, GENERAL_PURPOSE_N2D,GENERAL_PURPOSE_N4, GENERAL_PURPOSE_T2D,GRAPHICS_OPTIMIZED, MEMORY_OPTIMIZED,MEMORY_OPTIMIZED_M3, MEMORY_OPTIMIZED_X4,STORAGE_OPTIMIZED_Z3.
          # For example, type MEMORY_OPTIMIZED specifies a commitment
          # that applies only to eligible resources of memory optimized M1 and M2
          # machine series. Type GENERAL_PURPOSE specifies a commitment
          # that applies only to eligible resources of general purpose N1 machine
          # series.
    },
  ],
  &quot;kind&quot;: &quot;compute#commitmentList&quot;, # [Output Only] Type of resource. Always compute#commitmentList
      # for lists of commitments.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # [Output Only] This token allows you to get the next page of results for
      # list requests. If the number of results is larger thanmaxResults, use the nextPageToken as a value for
      # the query parameter pageToken in the next list request.
      # Subsequent list requests will have their own nextPageToken to
      # continue paging through the results.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for this resource.
  &quot;warning&quot;: { # [Output Only] Informational warning message.
    &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute
        # Engine returns NO_RESULTS_ON_PAGE if there
        # are no results in the response.
    &quot;data&quot;: [ # [Output Only] Metadata about this warning in key:
        # value format. For example:
        #
        # &quot;data&quot;: [
        #   {
        #    &quot;key&quot;: &quot;scope&quot;,
        #    &quot;value&quot;: &quot;zones/us-east1-d&quot;
        #   }
      {
        &quot;key&quot;: &quot;A String&quot;, # [Output Only] A key that provides more detail on the warning being
            # returned. For example, for warnings where there are no results in a list
            # request for a particular zone, this key might be scope and
            # the key value might be the zone name. Other examples might be a key
            # indicating a deprecated resource and a suggested replacement, or a
            # warning about invalid network settings (for example, if an instance
            # attempts to perform IP forwarding but is not enabled for IP forwarding).
        &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next()</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 &#x27;execute()&#x27; 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="testIamPermissions">testIamPermissions(project, region, resource, body=None, x__xgafv=None)</code>
  <pre>Returns permissions that a caller has on the specified resource.

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

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

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

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

<div class="method">
    <code class="details" id="update">update(project, region, commitment, body=None, paths=None, requestId=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the specified commitment with the data included in the request.
Update is performed only on selected fields included as part of
update-mask. Only the following fields can be updated: auto_renew and plan.

Args:
  project: string, Project ID for this request. (required)
  region: string, Name of the region for this request. (required)
  commitment: string, Name of the commitment that you want to update. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a regional resource-based commitment resource.
    # 
    # Creating this commitment resource means that you are purchasing a
    # resource-based committed use contract, with an explicit start and end time.
    # You can purchase resource-based commitments for both hardware and software
    # resources. For more information, read
    # Resource-based committed use discounts
  &quot;autoRenew&quot;: True or False, # Specifies whether to automatically renew the commitment at the end of its
      # current term. The default value is false. If you set the field
      # to true, each time your commitment reaches the end of its
      # term, Compute Engine automatically renews it for another term. You can
      # update this field anytime before the commitment expires. For example, if
      # the commitment is set to expire at 12 AM UTC-8 on January 3, 2027, you can
      # update this field until 11:59 PM UTC-8 on January 2, 2027.
  &quot;category&quot;: &quot;A String&quot;, # The category of the commitment; specifies whether the commitment is for
      # hardware or software resources. Category MACHINE specifies
      # that you are committing to hardware machine resources such asVCPU or MEMORY, listed in resources.
      # Category LICENSE specifies that you are committing to software
      # licenses, listed in licenseResources.
      # Note that if you specify MACHINE commitments, then you must
      # also specify a type to indicate the machine series of the
      # hardware resource that you are committing to.
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp inRFC3339
      # text format.
  &quot;customEndTimestamp&quot;: &quot;A String&quot;, # [Input Only] Optional, specifies the requested commitment end time inRFC3339 text format. Use this option when the desired
      # commitment&#x27;s end date is later than the start date + term duration.
  &quot;description&quot;: &quot;A String&quot;, # An optional description of the commitment. You can provide this property
      # when you create the resource.
  &quot;endTimestamp&quot;: &quot;A String&quot;, # [Output Only] Commitment end time inRFC3339
      # text format.
  &quot;existingReservations&quot;: [
    &quot;A String&quot;,
  ],
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is
      # defined by the server.
  &quot;kind&quot;: &quot;compute#commitment&quot;, # [Output Only] Type of the resource. Always compute#commitment
      # for commitments.
  &quot;licenseResource&quot;: { # Commitment for a particular license resource. # The license specification required as part of a license commitment.
    &quot;amount&quot;: &quot;A String&quot;, # The number of licenses you plan to purchase.
    &quot;coresPerLicense&quot;: &quot;A String&quot;, # The number of cores per license.
    &quot;license&quot;: &quot;A String&quot;, # The applicable license URI.
  },
  &quot;mergeSourceCommitments&quot;: [ # The list of source commitments that you are merging to create the new
      # merged commitment. For more information, see
      # Merging commitments.
    &quot;A String&quot;,
  ],
  &quot;name&quot;: &quot;A String&quot;, # Name of the commitment. You must specify a name when you purchase the
      # commitment. The name must be 1-63 characters long, and comply withRFC1035.
      # Specifically, the name must be 1-63 characters long and match the regular
      # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
      # character must be a lowercase letter, and all following characters must
      # be a dash, lowercase letter, or digit, except the last character, which
      # cannot be a dash.
  &quot;plan&quot;: &quot;A String&quot;, # The minimum time duration that you commit to purchasing resources.
      # The plan that you choose determines the preset term length of the
      # commitment (which is 1 year or 3 years) and affects the discount rate that
      # you receive for your resources. Committing to a longer time duration
      # typically gives you a higher discount rate. The supported values for this
      # field are TWELVE_MONTH (1 year), andTHIRTY_SIX_MONTH (3 years).
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] URL of the region where the commitment and committed
      # resources are located.
  &quot;reservations&quot;: [ # The list of new reservations that you want to create and attach to this
      # commitment.
      # 
      # You must attach reservations to your commitment if your commitment
      # specifies any GPUs or Local SSD disks. For more information, see
      # Attach reservations to resource-based commitments.
      # 
      # Specify this property only if you want to create new
      # reservations to attach. To attach existing reservations, specify theexistingReservations property instead.
    { # Represents a reservation resource.  A reservation ensures that capacity is
        # held in a specific zone even if the reserved VMs are not running. For more
        # information, read  Reserving zonal
        # resources.
      &quot;advancedDeploymentControl&quot;: { # Advance control for cluster management, applicable only to DENSE deployment # Advanced control for cluster management, applicable only to DENSE
          # deployment type reservations.
          # type reservations.
        &quot;reservationOperationalMode&quot;: &quot;A String&quot;, # Indicates chosen reservation operational mode for the reservation.
      },
      &quot;aggregateReservation&quot;: { # This reservation type is specified by total resource amounts (e.g. total # Reservation for aggregated resources, providing shape flexibility.
          # count of CPUs) and can account for multiple instance SKUs. In other words,
          # one can create instances of varying shapes against this reservation.
        &quot;hostCount&quot;: 42, # Count of reserved hosts of specified VM family. The host has fixed number
            # of accelerators based on the accelerator/vm-family selected.
        &quot;inUseHostCount&quot;: 42, # Number of hosts currently in use. If there is one or more Instances
            # running on the host, it is considered in use.
        &quot;inUseInstanceCount&quot;: 42, # Number of instances currently in use in this reservation.
        &quot;inUseResources&quot;: [ # [Output only] List of resources currently in use.
          {
            &quot;accelerator&quot;: { # Properties of accelerator resources in this reservation.
              &quot;acceleratorCount&quot;: 42, # Number of accelerators of specified type.
              &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL to accelerator type. e.g.
                  # &quot;projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l&quot;
            },
          },
        ],
        &quot;reservedResources&quot;: [ # List of reserved resources (CPUs, memory, accelerators).
          {
            &quot;accelerator&quot;: { # Properties of accelerator resources in this reservation.
              &quot;acceleratorCount&quot;: 42, # Number of accelerators of specified type.
              &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL to accelerator type. e.g.
                  # &quot;projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l&quot;
            },
          },
        ],
        &quot;vmFamily&quot;: &quot;A String&quot;, # The VM family that all instances scheduled against this reservation must
            # belong to.
        &quot;workloadType&quot;: &quot;A String&quot;, # The workload type of the instances that will target this reservation.
      },
      &quot;commitment&quot;: &quot;A String&quot;, # [Output Only] Full or partial URL to a parent commitment. This field
          # displays for reservations that are tied to a commitment.
      &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp inRFC3339
          # text format.
      &quot;deleteAfterDuration&quot;: { # A Duration represents a fixed-length span of time represented # Duration time relative to reservation creation when Compute Engine will
          # automatically delete this resource.
          # as a count of seconds and fractions of seconds at nanosecond
          # resolution. It is independent of any calendar and concepts like &quot;day&quot;
          # or &quot;month&quot;. Range is approximately 10,000 years.
        &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution.
            # Durations less than one second are represented with a 0
            # `seconds` field and a positive `nanos` field. Must be from 0
            # to 999,999,999 inclusive.
        &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0
            # to 315,576,000,000 inclusive. Note: these bounds are computed from:
            # 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
      },
      &quot;deleteAtTime&quot;: &quot;A String&quot;, # Absolute time in future when the reservation will be
          #  auto-deleted by Compute Engine. Timestamp is represented inRFC3339 text format.
      &quot;deploymentType&quot;: &quot;A String&quot;, # Specifies the deployment strategy for this reservation.
      &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you
          # create the resource.
      &quot;enableEmergentMaintenance&quot;: True or False, # Indicates whether Compute Engine allows unplanned maintenance for your VMs;
          # for example, to fix hardware errors.
      &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is
          # defined by the server.
      &quot;kind&quot;: &quot;compute#reservation&quot;, # [Output Only] Type of the resource. Alwayscompute#reservations for reservations.
      &quot;linkedCommitments&quot;: [ # [Output Only] Full or partial URL to parent commitments. This field
          # displays for reservations that are tied to multiple commitments.
        &quot;A String&quot;,
      ],
      &quot;name&quot;: &quot;A String&quot;, # The name of the resource, provided by the client when initially creating
          # the resource. The resource name must be 1-63 characters long, and comply
          # withRFC1035.
          # Specifically, the name must be 1-63 characters long and match the regular
          # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
          # character must be a lowercase letter, and all following characters must be
          # a dash, lowercase letter, or digit, except the last character, which cannot
          # be a dash.
      &quot;protectionTier&quot;: &quot;A String&quot;, # Protection tier for the workload which specifies the workload expectations
          # in the event of infrastructure failures at data center (e.g. power
          # and/or cooling failures).
      &quot;reservationMode&quot;: &quot;A String&quot;, # [Output only] Indicates the reservation mode of the reservation.
      &quot;reservationSharingPolicy&quot;: { # Specify the reservation sharing policy. If unspecified, the reservation
          # will not be shared with Google Cloud managed services.
        &quot;serviceShareType&quot;: &quot;A String&quot;, # Sharing config for all Google Cloud services.
      },
      &quot;resourcePolicies&quot;: { # Resource policies to be added to this reservation. The key is defined by
          # user, and the value is resource policy url. This is to define placement
          # policy with reservation.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;resourceStatus&quot;: { # [Output Only] Contains output only fields. # [Output Only] Status information for Reservation resource.
        &quot;healthInfo&quot;: { # Health information for the reservation. # [Output only] Health information for the reservation.
          &quot;degradedBlockCount&quot;: 42, # The number of reservation blocks that are degraded.
          &quot;healthStatus&quot;: &quot;A String&quot;, # The health status of the reservation.
          &quot;healthyBlockCount&quot;: 42, # The number of reservation blocks that are healthy.
        },
        &quot;reservationBlockCount&quot;: 42, # The number of reservation blocks associated with this reservation.
        &quot;reservationMaintenance&quot;: { # Maintenance Info for ReservationBlocks. # Maintenance information for this reservation
          &quot;instanceMaintenanceOngoingCount&quot;: 42, # Describes number of instances that have ongoing maintenance.
          &quot;instanceMaintenancePendingCount&quot;: 42, # Describes number of instances that have pending maintenance.
          &quot;maintenanceOngoingCount&quot;: 42, # Progress for ongoing maintenance for this group of VMs/hosts.
              # Describes number of hosts in the block that have ongoing maintenance.
          &quot;maintenancePendingCount&quot;: 42, # Progress for ongoing maintenance for this group of VMs/hosts.
              # Describes number of hosts in the block that have pending maintenance.
          &quot;schedulingType&quot;: &quot;A String&quot;, # The type of maintenance for the reservation.
          &quot;subblockInfraMaintenanceOngoingCount&quot;: 42, # Describes number of subblock Infrastructure that has ongoing maintenance.
              # Here, Subblock Infrastructure Maintenance pertains to upstream hardware
              # contained in the Subblock that is necessary for a VM Family(e.g. NVLink
              # Domains). Not all VM Families will support this field.
          &quot;subblockInfraMaintenancePendingCount&quot;: 42, # Describes number of subblock Infrastructure that has pending maintenance.
              #  Here, Subblock Infrastructure Maintenance pertains to upstream hardware
              #  contained in the Subblock that is necessary for a VM Family (e.g. NVLink
              #  Domains). Not all VM Families will support this field.
          &quot;upcomingGroupMaintenance&quot;: { # Upcoming Maintenance notification information. # Maintenance information on this group of VMs.
            &quot;canReschedule&quot;: True or False, # Indicates if the maintenance can be customer triggered.
            &quot;latestWindowStartTime&quot;: &quot;A String&quot;, # The latest time for the planned maintenance window to start.
                # This timestamp value is in RFC3339 text format.
            &quot;maintenanceOnShutdown&quot;: True or False, # Indicates whether the UpcomingMaintenance will be triggered on VM shutdown.
            &quot;maintenanceReasons&quot;: [ # The reasons for the maintenance. Only valid for vms.
              &quot;A String&quot;,
            ],
            &quot;maintenanceStatus&quot;: &quot;A String&quot;,
            &quot;type&quot;: &quot;A String&quot;, # Defines the type of maintenance.
            &quot;windowEndTime&quot;: &quot;A String&quot;, # The time by which the maintenance disruption will be completed.
                # This timestamp value is in RFC3339 text format.
            &quot;windowStartTime&quot;: &quot;A String&quot;, # The current start time of the maintenance window.
                # This timestamp value is in RFC3339 text format.
          },
        },
        &quot;specificSkuAllocation&quot;: { # Contains Properties set for the reservation. # Allocation Properties of this reservation.
          &quot;sourceInstanceTemplateId&quot;: &quot;A String&quot;, # ID of the instance template used to populate reservation properties.
          &quot;utilizations&quot;: { # Per service utilization breakdown. The Key is the Google Cloud managed
              # service name.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
      },
      &quot;satisfiesPzs&quot;: True or False, # [Output Only] Reserved for future use.
      &quot;schedulingType&quot;: &quot;A String&quot;, # The type of maintenance for the reservation.
      &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined fully-qualified URL for this resource.
      &quot;shareSettings&quot;: { # The share setting for reservations and sole tenancy node groups. # Specify share-settings to create a shared reservation. This property is
          # optional. For more information about the syntax and options for this
          # field and its subfields, see the guide for creating
          # a shared reservation.
        &quot;projectMap&quot;: { # A map of project id and project config. This is only valid when
            # share_type&#x27;s value is SPECIFIC_PROJECTS.
          &quot;a_key&quot;: { # Config for each project in the share settings.
            &quot;projectId&quot;: &quot;A String&quot;, # The project ID, should be same as the key of this project config in the
                # parent map.
          },
        },
        &quot;projects&quot;: [ # A List of Project names to specify consumer projects for this
            # shared-reservation. This is only valid when share_type&#x27;s value is
            # SPECIFIC_PROJECTS.
          &quot;A String&quot;,
        ],
        &quot;shareType&quot;: &quot;A String&quot;, # Type of sharing for this shared-reservation
      },
      &quot;specificReservation&quot;: { # This reservation type allows to pre allocate specific instance # Reservation for instances with specific machine shapes.
          #  configuration.
        &quot;assuredCount&quot;: &quot;A String&quot;, # [Output Only] Indicates how many instances are actually usable currently.
        &quot;count&quot;: &quot;A String&quot;, # Specifies the number of resources that are allocated.
        &quot;inUseCount&quot;: &quot;A String&quot;, # [Output Only] Indicates how many instances are in use.
        &quot;instanceProperties&quot;: { # Properties of the SKU instances being reserved. # The instance properties for the reservation.
            # Next ID: 9
          &quot;guestAccelerators&quot;: [ # Specifies accelerator type and count.
            { # A specification of the type and number of accelerator cards attached to the
                # instance.
              &quot;acceleratorCount&quot;: 42, # The number of the guest accelerator cards exposed to this instance.
              &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL of the accelerator type resource to attach to this
                  # instance. For example:projects/my-project/zones/us-central1-c/acceleratorTypes/nvidia-tesla-p100
                  # If you are creating an instance template, specify only the
                  # accelerator name.
                  # See GPUs on Compute Engine
                  # for a full list of accelerator types.
            },
          ],
          &quot;localSsds&quot;: [ # Specifies amount of local ssd to reserve with each instance. The type
              # of disk is local-ssd.
            {
              &quot;diskSizeGb&quot;: &quot;A String&quot;, # Specifies the size of the disk in base-2 GB.
              &quot;interface&quot;: &quot;A String&quot;, # Specifies the disk interface to use for attaching this disk, which is
                  # either SCSI or NVME. The default isSCSI.
                  # For performance characteristics of SCSI over NVMe, seeLocal SSD performance.
            },
          ],
          &quot;locationHint&quot;: &quot;A String&quot;, # An opaque location hint used to place the allocation close to other
              # resources.
              # This field is for use by internal tools that use the public API.
          &quot;machineType&quot;: &quot;A String&quot;, # Specifies type of machine (name only) which has fixed number of vCPUs
              # and fixed amount of memory. This also includes specifying custom
              # machine type following custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY pattern.
          &quot;maintenanceFreezeDurationHours&quot;: 42, # Specifies the number of hours after reservation creation where
              # instances using the reservation won&#x27;t be scheduled for maintenance.
          &quot;maintenanceInterval&quot;: &quot;A String&quot;, # Specifies the frequency of planned maintenance events. The accepted
              # values are: `PERIODIC`.
          &quot;minCpuPlatform&quot;: &quot;A String&quot;, # Minimum cpu platform the reservation.
        },
        &quot;sourceInstanceTemplate&quot;: &quot;A String&quot;, # Specifies the instance template to create the reservation. If you use
            # this field, you must exclude the instanceProperties field.
            #
            # This field is optional, and it can be a full or partial URL. For example,
            # the following are all valid URLs to an instance template:
            #
            #
            #       - https://www.googleapis.com/compute/v1/projects/project/global/instanceTemplates/instanceTemplate
            #       - projects/project/global/instanceTemplates/instanceTemplate
            #       - global/instanceTemplates/instanceTemplate
      },
      &quot;specificReservationRequired&quot;: True or False, # Indicates whether the reservation can be consumed by VMs with affinity
          # for &quot;any&quot; reservation. If the field is set, then only VMs that target
          # the reservation by name can consume from this reservation.
      &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the reservation.
          #
          #
          #      - CREATING: Reservation resources are being
          #        allocated.
          #      - READY: Reservation resources have been allocated,
          #        and the reservation is ready for use.
          #      - DELETING: Reservation deletion is in progress.
          #      - UPDATING: Reservation update is in progress.
      &quot;zone&quot;: &quot;A String&quot;, # Zone in which the reservation resides. A zone must be provided if the
          # reservation is created within a commitment.
    },
  ],
  &quot;resourceStatus&quot;: { # [Output Only] Contains output only fields. # [Output Only] Status information for Commitment resource.
    &quot;customTermEligibilityEndTimestamp&quot;: &quot;A String&quot;, # [Output Only] Indicates the end time of customer&#x27;s eligibility to send
        # custom term requests in RFC3339 text format. Term extension requests that
        # (not the end time in the request) after this time will be rejected.
  },
  &quot;resources&quot;: [ # The list of all the hardware resources, with their types and amounts, that
      # you want to commit to. Specify as a separate entry in the list for each
      # individual resource type.
    { # Commitment for a particular hardware resource (a commitment is composed of
        # one or more of these).
      &quot;acceleratorType&quot;: &quot;A String&quot;, # Name of the accelerator type or GPU resource. Specify this field only when
          # the type of hardware resource is ACCELERATOR.
      &quot;amount&quot;: &quot;A String&quot;, # The quantity of the hardware resource that you want to commit to purchasing
          # (in a type-dependent unit).
          #
          #    - For vCPUs, you must specify an integer value.
          #    - For memory, you specify the amount of MB that you want. The value you
          #    specify must be a multiple of 256 MB, with up to 6.5 GB of
          #    memory per every vCPU.
          #    - For GPUs, you must specify an integer value.
          #    - For Local SSD disks, you must specify the amount in GB. The size of a
          #    single Local SSD disk is 375 GB.
      &quot;type&quot;: &quot;A String&quot;, # The type of hardware resource that you want to specify.
          # You can specify any of the following values:
          #
          #    - VCPU
          #    - MEMORY
          #    - LOCAL_SSD
          #    - ACCELERATOR
          #
          #
          #
          # Specify as a separate entry in the list for each
          # individual resource type.
    },
  ],
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;splitSourceCommitment&quot;: &quot;A String&quot;, # The source commitment from which you are transferring resources to create
      # the new split commitment. For more information, see
      # Split commitments.
  &quot;startTimestamp&quot;: &quot;A String&quot;, # [Output Only] Commitment start time inRFC3339
      # text format.
  &quot;status&quot;: &quot;A String&quot;, # [Output Only] Status of the commitment with regards to eventual expiration
      # (each commitment has an end date defined). Status can be one of the
      # following values: NOT_YET_ACTIVE, ACTIVE, orEXPIRED.
  &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable explanation of the status.
  &quot;type&quot;: &quot;A String&quot;, # The type of commitment; specifies the
      # machine series for which you want to commit to purchasing resources.
      # The choice of machine series affects the discount rate and the eligible
      # resource types.
      # 
      #  The type must be one of the following:ACCELERATOR_OPTIMIZED, ACCELERATOR_OPTIMIZED_A3,ACCELERATOR_OPTIMIZED_A3_MEGA,COMPUTE_OPTIMIZED, COMPUTE_OPTIMIZED_C2D,
      #  COMPUTE_OPTIMIZED_C3, COMPUTE_OPTIMIZED_C3D,COMPUTE_OPTIMIZED_H3, GENERAL_PURPOSE,GENERAL_PURPOSE_C4, GENERAL_PURPOSE_E2,GENERAL_PURPOSE_N2, GENERAL_PURPOSE_N2D,GENERAL_PURPOSE_N4, GENERAL_PURPOSE_T2D,GRAPHICS_OPTIMIZED, MEMORY_OPTIMIZED,MEMORY_OPTIMIZED_M3, MEMORY_OPTIMIZED_X4,STORAGE_OPTIMIZED_Z3.
      # For example, type MEMORY_OPTIMIZED specifies a commitment
      # that applies only to eligible resources of memory optimized M1 and M2
      # machine series. Type GENERAL_PURPOSE specifies a commitment
      # that applies only to eligible resources of general purpose N1 machine
      # series.
}

  paths: string, A parameter (repeated)
  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).
  updateMask: string, update_mask indicates fields to be updated as part of this request.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents an Operation resource.
    #
    # Google Compute Engine has three Operation resources:
    #
    # * [Global](/compute/docs/reference/rest/beta/globalOperations)
    # * [Regional](/compute/docs/reference/rest/beta/regionOperations)
    # * [Zonal](/compute/docs/reference/rest/beta/zoneOperations)
    #
    # You can use an operation resource to manage asynchronous API requests.
    # For more information, readHandling
    # API responses.
    #
    # Operations can be global, regional or zonal.
    #
    #    - For global operations, use the `globalOperations`
    #    resource.
    #    - For regional operations, use the
    #    `regionOperations` resource.
    #    - For zonal operations, use
    #    the `zoneOperations` resource.
    #
    #
    #
    # For more information, read
    # Global, Regional, and Zonal Resources.
    #
    # Note that completed Operation resources have a limited
    # retention period.
  &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The value of `requestId` if you provided it in the request.
      # Not present otherwise.
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Deprecated] This field is deprecated.
  &quot;description&quot;: &quot;A String&quot;, # [Output Only] A textual description of the operation, which is
      # set when the operation is created.
  &quot;endTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was completed. This value is inRFC3339
      # text format.
  &quot;error&quot;: { # [Output Only] If errors are generated during processing of the operation,
      # this field will be populated.
    &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this
        # operation.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
        &quot;errorDetails&quot;: [ # [Output Only] An optional list of messages that contain the error
            # details. There is a set of defined message types to use for providing
            # details.The syntax depends on the error code. For example,
            # QuotaExceededInfo will have details when the error code is
            # QUOTA_EXCEEDED.
          {
            &quot;errorInfo&quot;: { # Describes the cause of the error with structured details.
                #
                # Example of an error when contacting the &quot;pubsub.googleapis.com&quot; API when it
                # is not enabled:
                #
                #     { &quot;reason&quot;: &quot;API_DISABLED&quot;
                #       &quot;domain&quot;: &quot;googleapis.com&quot;
                #       &quot;metadata&quot;: {
                #         &quot;resource&quot;: &quot;projects/123&quot;,
                #         &quot;service&quot;: &quot;pubsub.googleapis.com&quot;
                #       }
                #     }
                #
                # This response indicates that the pubsub.googleapis.com API is not enabled.
                #
                # Example of an error that is returned when attempting to create a Spanner
                # instance in a region that is out of stock:
                #
                #     { &quot;reason&quot;: &quot;STOCKOUT&quot;
                #       &quot;domain&quot;: &quot;spanner.googleapis.com&quot;,
                #       &quot;metadata&quot;: {
                #         &quot;availableRegions&quot;: &quot;us-central1,us-east2&quot;
                #       }
                #     }
              &quot;domain&quot;: &quot;A String&quot;, # The logical grouping to which the &quot;reason&quot; belongs. The error domain
                  # is typically the registered service name of the tool or product that
                  # generates the error. Example: &quot;pubsub.googleapis.com&quot;. If the error is
                  # generated by some common infrastructure, the error domain must be a
                  # globally unique value that identifies the infrastructure. For Google API
                  # infrastructure, the error domain is &quot;googleapis.com&quot;.
              &quot;metadatas&quot;: { # Additional structured details about this error.
                  #
                  # Keys must match a regular expression of `a-z+` but should
                  # ideally be lowerCamelCase. Also, they must be limited to 64 characters in
                  # length. When identifying the current value of an exceeded limit, the units
                  # should be contained in the key, not the value.  For example, rather than
                  # `{&quot;instanceLimit&quot;: &quot;100/request&quot;}`, should be returned as,
                  # `{&quot;instanceLimitPerRequest&quot;: &quot;100&quot;}`, if the client exceeds the number of
                  # instances that can be created in a single (batch) request.
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;reason&quot;: &quot;A String&quot;, # The reason of the error. This is a constant value that identifies the
                  # proximate cause of the error. Error reasons are unique within a particular
                  # domain of errors. This should be at most 63 characters and match a
                  # regular expression of `A-Z+[A-Z0-9]`, which represents
                  # UPPER_SNAKE_CASE.
            },
            &quot;help&quot;: { # Provides links to documentation or for performing an out of band action.
                #
                # For example, if a quota check failed with an error indicating the calling
                # project hasn&#x27;t enabled the accessed service, this can contain a URL pointing
                # directly to the right place in the developer console to flip the bit.
              &quot;links&quot;: [ # URL(s) pointing to additional information on handling the current error.
                { # Describes a URL link.
                  &quot;description&quot;: &quot;A String&quot;, # Describes what the link offers.
                  &quot;url&quot;: &quot;A String&quot;, # The URL of the link.
                },
              ],
            },
            &quot;localizedMessage&quot;: { # Provides a localized error message that is safe to return to the user
                # which can be attached to an RPC error.
              &quot;locale&quot;: &quot;A String&quot;, # The locale used following the specification defined at
                  # https://www.rfc-editor.org/rfc/bcp/bcp47.txt.
                  # Examples are: &quot;en-US&quot;, &quot;fr-CH&quot;, &quot;es-MX&quot;
              &quot;message&quot;: &quot;A String&quot;, # The localized error message in the above locale.
            },
            &quot;quotaInfo&quot;: { # Additional details for quota exceeded error for resource quota.
              &quot;dimensions&quot;: { # The map holding related quota dimensions.
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;futureLimit&quot;: 3.14, # Future quota limit being rolled out. The limit&#x27;s unit depends on the quota
                  #  type or metric.
              &quot;limit&quot;: 3.14, # Current effective quota limit. The limit&#x27;s unit depends on the quota type
                  # or metric.
              &quot;limitName&quot;: &quot;A String&quot;, # The name of the quota limit.
              &quot;metricName&quot;: &quot;A String&quot;, # The Compute Engine quota metric name.
              &quot;rolloutStatus&quot;: &quot;A String&quot;, # Rollout status of the future quota limit.
            },
          },
        ],
        &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error.
            # This property is optional.
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
      },
    ],
  },
  &quot;httpErrorMessage&quot;: &quot;A String&quot;, # [Output Only] If the operation fails, this field contains the HTTP error
      # message that was returned, such as `NOT FOUND`.
  &quot;httpErrorStatusCode&quot;: 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.
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the operation. This identifier is
      # defined by the server.
  &quot;insertTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was requested.
      # This value is inRFC3339
      # text format.
  &quot;instancesBulkInsertOperationMetadata&quot;: {
    &quot;perLocationStatus&quot;: { # Status information per location (location name is key).
        # Example key: zones/us-central1-a
      &quot;a_key&quot;: {
        &quot;createdVmCount&quot;: 42, # [Output Only] Count of VMs successfully created so far.
        &quot;deletedVmCount&quot;: 42, # [Output Only] Count of VMs that got deleted during rollback.
        &quot;failedToCreateVmCount&quot;: 42, # [Output Only] Count of VMs that started creating but encountered an
            # error.
        &quot;status&quot;: &quot;A String&quot;, # [Output Only] Creation status of BulkInsert operation - information
            # if the flow is rolling forward or rolling back.
        &quot;targetVmCount&quot;: 42, # [Output Only] Count of VMs originally planned to be created.
      },
    },
  },
  &quot;kind&quot;: &quot;compute#operation&quot;, # [Output Only] Type of the resource. Always `compute#operation` for
      # Operation resources.
  &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the operation.
  &quot;operationGroupId&quot;: &quot;A String&quot;, # [Output Only] An ID that represents a group of operations, such as when a
      # group of operations results from a `bulkInsert` API request.
  &quot;operationType&quot;: &quot;A String&quot;, # [Output Only] The type of operation, such as `insert`,
      # `update`, or `delete`, and so on.
  &quot;progress&quot;: 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.
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the operation resides. Only
      # applicable when performing regional operations.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;setCommonInstanceMetadataOperationMetadata&quot;: { # [Output Only] If the operation is for projects.setCommonInstanceMetadata,
      # this field will contain information on all underlying zonal actions and
      # their state.
    &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The client operation id.
    &quot;perLocationOperations&quot;: { # [Output Only] Status information per location (location name is key).
        # Example key: zones/us-central1-a
      &quot;a_key&quot;: {
        &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # [Output Only] If state is `ABANDONED` or `FAILED`, this field is
            # populated.
            # different programming environments, including REST APIs and RPC APIs. It is
            # used by [gRPC](https://github.com/grpc). Each `Status` message contains
            # three pieces of data: error code, error message, and error details.
            #
            # You can find out more about this error model and how to work with it in the
            # [API Design Guide](https://cloud.google.com/apis/design/errors).
          &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
          &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
            },
          ],
          &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
              # user-facing error message should be localized and sent in the
              # google.rpc.Status.details field, or localized by the client.
        },
        &quot;state&quot;: &quot;A String&quot;, # [Output Only] Status of the action, which can be one of the following:
            # `PROPAGATING`, `PROPAGATED`, `ABANDONED`, `FAILED`, or `DONE`.
      },
    },
  },
  &quot;startTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was started by the server.
      # This value is inRFC3339
      # text format.
  &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the operation, which can be one of the
      # following:
      # `PENDING`, `RUNNING`, or `DONE`.
  &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional textual description of the current status of the
      # operation.
  &quot;targetId&quot;: &quot;A String&quot;, # [Output Only] The unique target ID, which identifies a specific incarnation
      # of the target resource.
  &quot;targetLink&quot;: &quot;A String&quot;, # [Output Only] The URL of the resource that the operation modifies. For
      # operations related to creating a snapshot, this points to the disk
      # that the snapshot was created from.
  &quot;user&quot;: &quot;A String&quot;, # [Output Only] User who requested the operation, for example:
      # `user@example.com` or
      # `alice_smith_identifier (global/workforcePools/example-com-us-employees)`.
  &quot;warnings&quot;: [ # [Output Only] If warning messages are generated during processing of the
      # operation, this field will be populated.
    {
      &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
      &quot;data&quot;: [ # [Output Only] Metadata about this warning in key:
          # value format. For example:
          #
          # &quot;data&quot;: [
          #   {
          #    &quot;key&quot;: &quot;scope&quot;,
          #    &quot;value&quot;: &quot;zones/us-east1-d&quot;
          #   }
        {
          &quot;key&quot;: &quot;A String&quot;, # [Output Only] A key that provides more detail on the warning being
              # returned. For example, for warnings where there are no results in a list
              # request for a particular zone, this key might be scope and
              # the key value might be the zone name. Other examples might be a key
              # indicating a deprecated resource and a suggested replacement, or a
              # warning about invalid network settings (for example, if an instance
              # attempts to perform IP forwarding but is not enabled for IP forwarding).
          &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
    },
  ],
  &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the operation resides. Only
      # applicable when performing per-zone operations.
}</pre>
</div>

<div class="method">
    <code class="details" id="updateReservations">updateReservations(project, region, commitment, body=None, requestId=None, x__xgafv=None)</code>
  <pre>Transfers GPUs or Local SSD disks between reservations that are attached
to the same commitment.

Args:
  project: string, Project ID for this request. (required)
  region: string, Name of the region for this request. (required)
  commitment: string, Name of the commitment for which the reservations are being updated. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;reservations&quot;: [ # A list of two reservations to transfer GPUs and Local SSD disks between.
    { # Represents a reservation resource.  A reservation ensures that capacity is
        # held in a specific zone even if the reserved VMs are not running. For more
        # information, read  Reserving zonal
        # resources.
      &quot;advancedDeploymentControl&quot;: { # Advance control for cluster management, applicable only to DENSE deployment # Advanced control for cluster management, applicable only to DENSE
          # deployment type reservations.
          # type reservations.
        &quot;reservationOperationalMode&quot;: &quot;A String&quot;, # Indicates chosen reservation operational mode for the reservation.
      },
      &quot;aggregateReservation&quot;: { # This reservation type is specified by total resource amounts (e.g. total # Reservation for aggregated resources, providing shape flexibility.
          # count of CPUs) and can account for multiple instance SKUs. In other words,
          # one can create instances of varying shapes against this reservation.
        &quot;hostCount&quot;: 42, # Count of reserved hosts of specified VM family. The host has fixed number
            # of accelerators based on the accelerator/vm-family selected.
        &quot;inUseHostCount&quot;: 42, # Number of hosts currently in use. If there is one or more Instances
            # running on the host, it is considered in use.
        &quot;inUseInstanceCount&quot;: 42, # Number of instances currently in use in this reservation.
        &quot;inUseResources&quot;: [ # [Output only] List of resources currently in use.
          {
            &quot;accelerator&quot;: { # Properties of accelerator resources in this reservation.
              &quot;acceleratorCount&quot;: 42, # Number of accelerators of specified type.
              &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL to accelerator type. e.g.
                  # &quot;projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l&quot;
            },
          },
        ],
        &quot;reservedResources&quot;: [ # List of reserved resources (CPUs, memory, accelerators).
          {
            &quot;accelerator&quot;: { # Properties of accelerator resources in this reservation.
              &quot;acceleratorCount&quot;: 42, # Number of accelerators of specified type.
              &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL to accelerator type. e.g.
                  # &quot;projects/{PROJECT}/zones/{ZONE}/acceleratorTypes/ct4l&quot;
            },
          },
        ],
        &quot;vmFamily&quot;: &quot;A String&quot;, # The VM family that all instances scheduled against this reservation must
            # belong to.
        &quot;workloadType&quot;: &quot;A String&quot;, # The workload type of the instances that will target this reservation.
      },
      &quot;commitment&quot;: &quot;A String&quot;, # [Output Only] Full or partial URL to a parent commitment. This field
          # displays for reservations that are tied to a commitment.
      &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Output Only] Creation timestamp inRFC3339
          # text format.
      &quot;deleteAfterDuration&quot;: { # A Duration represents a fixed-length span of time represented # Duration time relative to reservation creation when Compute Engine will
          # automatically delete this resource.
          # as a count of seconds and fractions of seconds at nanosecond
          # resolution. It is independent of any calendar and concepts like &quot;day&quot;
          # or &quot;month&quot;. Range is approximately 10,000 years.
        &quot;nanos&quot;: 42, # Span of time that&#x27;s a fraction of a second at nanosecond resolution.
            # Durations less than one second are represented with a 0
            # `seconds` field and a positive `nanos` field. Must be from 0
            # to 999,999,999 inclusive.
        &quot;seconds&quot;: &quot;A String&quot;, # Span of time at a resolution of a second. Must be from 0
            # to 315,576,000,000 inclusive. Note: these bounds are computed from:
            # 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years
      },
      &quot;deleteAtTime&quot;: &quot;A String&quot;, # Absolute time in future when the reservation will be
          #  auto-deleted by Compute Engine. Timestamp is represented inRFC3339 text format.
      &quot;deploymentType&quot;: &quot;A String&quot;, # Specifies the deployment strategy for this reservation.
      &quot;description&quot;: &quot;A String&quot;, # An optional description of this resource. Provide this property when you
          # create the resource.
      &quot;enableEmergentMaintenance&quot;: True or False, # Indicates whether Compute Engine allows unplanned maintenance for your VMs;
          # for example, to fix hardware errors.
      &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the resource. This identifier is
          # defined by the server.
      &quot;kind&quot;: &quot;compute#reservation&quot;, # [Output Only] Type of the resource. Alwayscompute#reservations for reservations.
      &quot;linkedCommitments&quot;: [ # [Output Only] Full or partial URL to parent commitments. This field
          # displays for reservations that are tied to multiple commitments.
        &quot;A String&quot;,
      ],
      &quot;name&quot;: &quot;A String&quot;, # The name of the resource, provided by the client when initially creating
          # the resource. The resource name must be 1-63 characters long, and comply
          # withRFC1035.
          # Specifically, the name must be 1-63 characters long and match the regular
          # expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first
          # character must be a lowercase letter, and all following characters must be
          # a dash, lowercase letter, or digit, except the last character, which cannot
          # be a dash.
      &quot;protectionTier&quot;: &quot;A String&quot;, # Protection tier for the workload which specifies the workload expectations
          # in the event of infrastructure failures at data center (e.g. power
          # and/or cooling failures).
      &quot;reservationMode&quot;: &quot;A String&quot;, # [Output only] Indicates the reservation mode of the reservation.
      &quot;reservationSharingPolicy&quot;: { # Specify the reservation sharing policy. If unspecified, the reservation
          # will not be shared with Google Cloud managed services.
        &quot;serviceShareType&quot;: &quot;A String&quot;, # Sharing config for all Google Cloud services.
      },
      &quot;resourcePolicies&quot;: { # Resource policies to be added to this reservation. The key is defined by
          # user, and the value is resource policy url. This is to define placement
          # policy with reservation.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;resourceStatus&quot;: { # [Output Only] Contains output only fields. # [Output Only] Status information for Reservation resource.
        &quot;healthInfo&quot;: { # Health information for the reservation. # [Output only] Health information for the reservation.
          &quot;degradedBlockCount&quot;: 42, # The number of reservation blocks that are degraded.
          &quot;healthStatus&quot;: &quot;A String&quot;, # The health status of the reservation.
          &quot;healthyBlockCount&quot;: 42, # The number of reservation blocks that are healthy.
        },
        &quot;reservationBlockCount&quot;: 42, # The number of reservation blocks associated with this reservation.
        &quot;reservationMaintenance&quot;: { # Maintenance Info for ReservationBlocks. # Maintenance information for this reservation
          &quot;instanceMaintenanceOngoingCount&quot;: 42, # Describes number of instances that have ongoing maintenance.
          &quot;instanceMaintenancePendingCount&quot;: 42, # Describes number of instances that have pending maintenance.
          &quot;maintenanceOngoingCount&quot;: 42, # Progress for ongoing maintenance for this group of VMs/hosts.
              # Describes number of hosts in the block that have ongoing maintenance.
          &quot;maintenancePendingCount&quot;: 42, # Progress for ongoing maintenance for this group of VMs/hosts.
              # Describes number of hosts in the block that have pending maintenance.
          &quot;schedulingType&quot;: &quot;A String&quot;, # The type of maintenance for the reservation.
          &quot;subblockInfraMaintenanceOngoingCount&quot;: 42, # Describes number of subblock Infrastructure that has ongoing maintenance.
              # Here, Subblock Infrastructure Maintenance pertains to upstream hardware
              # contained in the Subblock that is necessary for a VM Family(e.g. NVLink
              # Domains). Not all VM Families will support this field.
          &quot;subblockInfraMaintenancePendingCount&quot;: 42, # Describes number of subblock Infrastructure that has pending maintenance.
              #  Here, Subblock Infrastructure Maintenance pertains to upstream hardware
              #  contained in the Subblock that is necessary for a VM Family (e.g. NVLink
              #  Domains). Not all VM Families will support this field.
          &quot;upcomingGroupMaintenance&quot;: { # Upcoming Maintenance notification information. # Maintenance information on this group of VMs.
            &quot;canReschedule&quot;: True or False, # Indicates if the maintenance can be customer triggered.
            &quot;latestWindowStartTime&quot;: &quot;A String&quot;, # The latest time for the planned maintenance window to start.
                # This timestamp value is in RFC3339 text format.
            &quot;maintenanceOnShutdown&quot;: True or False, # Indicates whether the UpcomingMaintenance will be triggered on VM shutdown.
            &quot;maintenanceReasons&quot;: [ # The reasons for the maintenance. Only valid for vms.
              &quot;A String&quot;,
            ],
            &quot;maintenanceStatus&quot;: &quot;A String&quot;,
            &quot;type&quot;: &quot;A String&quot;, # Defines the type of maintenance.
            &quot;windowEndTime&quot;: &quot;A String&quot;, # The time by which the maintenance disruption will be completed.
                # This timestamp value is in RFC3339 text format.
            &quot;windowStartTime&quot;: &quot;A String&quot;, # The current start time of the maintenance window.
                # This timestamp value is in RFC3339 text format.
          },
        },
        &quot;specificSkuAllocation&quot;: { # Contains Properties set for the reservation. # Allocation Properties of this reservation.
          &quot;sourceInstanceTemplateId&quot;: &quot;A String&quot;, # ID of the instance template used to populate reservation properties.
          &quot;utilizations&quot;: { # Per service utilization breakdown. The Key is the Google Cloud managed
              # service name.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
        },
      },
      &quot;satisfiesPzs&quot;: True or False, # [Output Only] Reserved for future use.
      &quot;schedulingType&quot;: &quot;A String&quot;, # The type of maintenance for the reservation.
      &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined fully-qualified URL for this resource.
      &quot;shareSettings&quot;: { # The share setting for reservations and sole tenancy node groups. # Specify share-settings to create a shared reservation. This property is
          # optional. For more information about the syntax and options for this
          # field and its subfields, see the guide for creating
          # a shared reservation.
        &quot;projectMap&quot;: { # A map of project id and project config. This is only valid when
            # share_type&#x27;s value is SPECIFIC_PROJECTS.
          &quot;a_key&quot;: { # Config for each project in the share settings.
            &quot;projectId&quot;: &quot;A String&quot;, # The project ID, should be same as the key of this project config in the
                # parent map.
          },
        },
        &quot;projects&quot;: [ # A List of Project names to specify consumer projects for this
            # shared-reservation. This is only valid when share_type&#x27;s value is
            # SPECIFIC_PROJECTS.
          &quot;A String&quot;,
        ],
        &quot;shareType&quot;: &quot;A String&quot;, # Type of sharing for this shared-reservation
      },
      &quot;specificReservation&quot;: { # This reservation type allows to pre allocate specific instance # Reservation for instances with specific machine shapes.
          #  configuration.
        &quot;assuredCount&quot;: &quot;A String&quot;, # [Output Only] Indicates how many instances are actually usable currently.
        &quot;count&quot;: &quot;A String&quot;, # Specifies the number of resources that are allocated.
        &quot;inUseCount&quot;: &quot;A String&quot;, # [Output Only] Indicates how many instances are in use.
        &quot;instanceProperties&quot;: { # Properties of the SKU instances being reserved. # The instance properties for the reservation.
            # Next ID: 9
          &quot;guestAccelerators&quot;: [ # Specifies accelerator type and count.
            { # A specification of the type and number of accelerator cards attached to the
                # instance.
              &quot;acceleratorCount&quot;: 42, # The number of the guest accelerator cards exposed to this instance.
              &quot;acceleratorType&quot;: &quot;A String&quot;, # Full or partial URL of the accelerator type resource to attach to this
                  # instance. For example:projects/my-project/zones/us-central1-c/acceleratorTypes/nvidia-tesla-p100
                  # If you are creating an instance template, specify only the
                  # accelerator name.
                  # See GPUs on Compute Engine
                  # for a full list of accelerator types.
            },
          ],
          &quot;localSsds&quot;: [ # Specifies amount of local ssd to reserve with each instance. The type
              # of disk is local-ssd.
            {
              &quot;diskSizeGb&quot;: &quot;A String&quot;, # Specifies the size of the disk in base-2 GB.
              &quot;interface&quot;: &quot;A String&quot;, # Specifies the disk interface to use for attaching this disk, which is
                  # either SCSI or NVME. The default isSCSI.
                  # For performance characteristics of SCSI over NVMe, seeLocal SSD performance.
            },
          ],
          &quot;locationHint&quot;: &quot;A String&quot;, # An opaque location hint used to place the allocation close to other
              # resources.
              # This field is for use by internal tools that use the public API.
          &quot;machineType&quot;: &quot;A String&quot;, # Specifies type of machine (name only) which has fixed number of vCPUs
              # and fixed amount of memory. This also includes specifying custom
              # machine type following custom-NUMBER_OF_CPUS-AMOUNT_OF_MEMORY pattern.
          &quot;maintenanceFreezeDurationHours&quot;: 42, # Specifies the number of hours after reservation creation where
              # instances using the reservation won&#x27;t be scheduled for maintenance.
          &quot;maintenanceInterval&quot;: &quot;A String&quot;, # Specifies the frequency of planned maintenance events. The accepted
              # values are: `PERIODIC`.
          &quot;minCpuPlatform&quot;: &quot;A String&quot;, # Minimum cpu platform the reservation.
        },
        &quot;sourceInstanceTemplate&quot;: &quot;A String&quot;, # Specifies the instance template to create the reservation. If you use
            # this field, you must exclude the instanceProperties field.
            #
            # This field is optional, and it can be a full or partial URL. For example,
            # the following are all valid URLs to an instance template:
            #
            #
            #       - https://www.googleapis.com/compute/v1/projects/project/global/instanceTemplates/instanceTemplate
            #       - projects/project/global/instanceTemplates/instanceTemplate
            #       - global/instanceTemplates/instanceTemplate
      },
      &quot;specificReservationRequired&quot;: True or False, # Indicates whether the reservation can be consumed by VMs with affinity
          # for &quot;any&quot; reservation. If the field is set, then only VMs that target
          # the reservation by name can consume from this reservation.
      &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the reservation.
          #
          #
          #      - CREATING: Reservation resources are being
          #        allocated.
          #      - READY: Reservation resources have been allocated,
          #        and the reservation is ready for use.
          #      - DELETING: Reservation deletion is in progress.
          #      - UPDATING: Reservation update is in progress.
      &quot;zone&quot;: &quot;A String&quot;, # Zone in which the reservation resides. A zone must be provided if the
          # reservation is created within a commitment.
    },
  ],
}

  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).
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents an Operation resource.
    #
    # Google Compute Engine has three Operation resources:
    #
    # * [Global](/compute/docs/reference/rest/beta/globalOperations)
    # * [Regional](/compute/docs/reference/rest/beta/regionOperations)
    # * [Zonal](/compute/docs/reference/rest/beta/zoneOperations)
    #
    # You can use an operation resource to manage asynchronous API requests.
    # For more information, readHandling
    # API responses.
    #
    # Operations can be global, regional or zonal.
    #
    #    - For global operations, use the `globalOperations`
    #    resource.
    #    - For regional operations, use the
    #    `regionOperations` resource.
    #    - For zonal operations, use
    #    the `zoneOperations` resource.
    #
    #
    #
    # For more information, read
    # Global, Regional, and Zonal Resources.
    #
    # Note that completed Operation resources have a limited
    # retention period.
  &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The value of `requestId` if you provided it in the request.
      # Not present otherwise.
  &quot;creationTimestamp&quot;: &quot;A String&quot;, # [Deprecated] This field is deprecated.
  &quot;description&quot;: &quot;A String&quot;, # [Output Only] A textual description of the operation, which is
      # set when the operation is created.
  &quot;endTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was completed. This value is inRFC3339
      # text format.
  &quot;error&quot;: { # [Output Only] If errors are generated during processing of the operation,
      # this field will be populated.
    &quot;errors&quot;: [ # [Output Only] The array of errors encountered while processing this
        # operation.
      {
        &quot;code&quot;: &quot;A String&quot;, # [Output Only] The error type identifier for this error.
        &quot;errorDetails&quot;: [ # [Output Only] An optional list of messages that contain the error
            # details. There is a set of defined message types to use for providing
            # details.The syntax depends on the error code. For example,
            # QuotaExceededInfo will have details when the error code is
            # QUOTA_EXCEEDED.
          {
            &quot;errorInfo&quot;: { # Describes the cause of the error with structured details.
                #
                # Example of an error when contacting the &quot;pubsub.googleapis.com&quot; API when it
                # is not enabled:
                #
                #     { &quot;reason&quot;: &quot;API_DISABLED&quot;
                #       &quot;domain&quot;: &quot;googleapis.com&quot;
                #       &quot;metadata&quot;: {
                #         &quot;resource&quot;: &quot;projects/123&quot;,
                #         &quot;service&quot;: &quot;pubsub.googleapis.com&quot;
                #       }
                #     }
                #
                # This response indicates that the pubsub.googleapis.com API is not enabled.
                #
                # Example of an error that is returned when attempting to create a Spanner
                # instance in a region that is out of stock:
                #
                #     { &quot;reason&quot;: &quot;STOCKOUT&quot;
                #       &quot;domain&quot;: &quot;spanner.googleapis.com&quot;,
                #       &quot;metadata&quot;: {
                #         &quot;availableRegions&quot;: &quot;us-central1,us-east2&quot;
                #       }
                #     }
              &quot;domain&quot;: &quot;A String&quot;, # The logical grouping to which the &quot;reason&quot; belongs. The error domain
                  # is typically the registered service name of the tool or product that
                  # generates the error. Example: &quot;pubsub.googleapis.com&quot;. If the error is
                  # generated by some common infrastructure, the error domain must be a
                  # globally unique value that identifies the infrastructure. For Google API
                  # infrastructure, the error domain is &quot;googleapis.com&quot;.
              &quot;metadatas&quot;: { # Additional structured details about this error.
                  #
                  # Keys must match a regular expression of `a-z+` but should
                  # ideally be lowerCamelCase. Also, they must be limited to 64 characters in
                  # length. When identifying the current value of an exceeded limit, the units
                  # should be contained in the key, not the value.  For example, rather than
                  # `{&quot;instanceLimit&quot;: &quot;100/request&quot;}`, should be returned as,
                  # `{&quot;instanceLimitPerRequest&quot;: &quot;100&quot;}`, if the client exceeds the number of
                  # instances that can be created in a single (batch) request.
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;reason&quot;: &quot;A String&quot;, # The reason of the error. This is a constant value that identifies the
                  # proximate cause of the error. Error reasons are unique within a particular
                  # domain of errors. This should be at most 63 characters and match a
                  # regular expression of `A-Z+[A-Z0-9]`, which represents
                  # UPPER_SNAKE_CASE.
            },
            &quot;help&quot;: { # Provides links to documentation or for performing an out of band action.
                #
                # For example, if a quota check failed with an error indicating the calling
                # project hasn&#x27;t enabled the accessed service, this can contain a URL pointing
                # directly to the right place in the developer console to flip the bit.
              &quot;links&quot;: [ # URL(s) pointing to additional information on handling the current error.
                { # Describes a URL link.
                  &quot;description&quot;: &quot;A String&quot;, # Describes what the link offers.
                  &quot;url&quot;: &quot;A String&quot;, # The URL of the link.
                },
              ],
            },
            &quot;localizedMessage&quot;: { # Provides a localized error message that is safe to return to the user
                # which can be attached to an RPC error.
              &quot;locale&quot;: &quot;A String&quot;, # The locale used following the specification defined at
                  # https://www.rfc-editor.org/rfc/bcp/bcp47.txt.
                  # Examples are: &quot;en-US&quot;, &quot;fr-CH&quot;, &quot;es-MX&quot;
              &quot;message&quot;: &quot;A String&quot;, # The localized error message in the above locale.
            },
            &quot;quotaInfo&quot;: { # Additional details for quota exceeded error for resource quota.
              &quot;dimensions&quot;: { # The map holding related quota dimensions.
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;futureLimit&quot;: 3.14, # Future quota limit being rolled out. The limit&#x27;s unit depends on the quota
                  #  type or metric.
              &quot;limit&quot;: 3.14, # Current effective quota limit. The limit&#x27;s unit depends on the quota type
                  # or metric.
              &quot;limitName&quot;: &quot;A String&quot;, # The name of the quota limit.
              &quot;metricName&quot;: &quot;A String&quot;, # The Compute Engine quota metric name.
              &quot;rolloutStatus&quot;: &quot;A String&quot;, # Rollout status of the future quota limit.
            },
          },
        ],
        &quot;location&quot;: &quot;A String&quot;, # [Output Only] Indicates the field in the request that caused the error.
            # This property is optional.
        &quot;message&quot;: &quot;A String&quot;, # [Output Only] An optional, human-readable error message.
      },
    ],
  },
  &quot;httpErrorMessage&quot;: &quot;A String&quot;, # [Output Only] If the operation fails, this field contains the HTTP error
      # message that was returned, such as `NOT FOUND`.
  &quot;httpErrorStatusCode&quot;: 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.
  &quot;id&quot;: &quot;A String&quot;, # [Output Only] The unique identifier for the operation. This identifier is
      # defined by the server.
  &quot;insertTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was requested.
      # This value is inRFC3339
      # text format.
  &quot;instancesBulkInsertOperationMetadata&quot;: {
    &quot;perLocationStatus&quot;: { # Status information per location (location name is key).
        # Example key: zones/us-central1-a
      &quot;a_key&quot;: {
        &quot;createdVmCount&quot;: 42, # [Output Only] Count of VMs successfully created so far.
        &quot;deletedVmCount&quot;: 42, # [Output Only] Count of VMs that got deleted during rollback.
        &quot;failedToCreateVmCount&quot;: 42, # [Output Only] Count of VMs that started creating but encountered an
            # error.
        &quot;status&quot;: &quot;A String&quot;, # [Output Only] Creation status of BulkInsert operation - information
            # if the flow is rolling forward or rolling back.
        &quot;targetVmCount&quot;: 42, # [Output Only] Count of VMs originally planned to be created.
      },
    },
  },
  &quot;kind&quot;: &quot;compute#operation&quot;, # [Output Only] Type of the resource. Always `compute#operation` for
      # Operation resources.
  &quot;name&quot;: &quot;A String&quot;, # [Output Only] Name of the operation.
  &quot;operationGroupId&quot;: &quot;A String&quot;, # [Output Only] An ID that represents a group of operations, such as when a
      # group of operations results from a `bulkInsert` API request.
  &quot;operationType&quot;: &quot;A String&quot;, # [Output Only] The type of operation, such as `insert`,
      # `update`, or `delete`, and so on.
  &quot;progress&quot;: 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.
  &quot;region&quot;: &quot;A String&quot;, # [Output Only] The URL of the region where the operation resides. Only
      # applicable when performing regional operations.
  &quot;selfLink&quot;: &quot;A String&quot;, # [Output Only] Server-defined URL for the resource.
  &quot;setCommonInstanceMetadataOperationMetadata&quot;: { # [Output Only] If the operation is for projects.setCommonInstanceMetadata,
      # this field will contain information on all underlying zonal actions and
      # their state.
    &quot;clientOperationId&quot;: &quot;A String&quot;, # [Output Only] The client operation id.
    &quot;perLocationOperations&quot;: { # [Output Only] Status information per location (location name is key).
        # Example key: zones/us-central1-a
      &quot;a_key&quot;: {
        &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # [Output Only] If state is `ABANDONED` or `FAILED`, this field is
            # populated.
            # different programming environments, including REST APIs and RPC APIs. It is
            # used by [gRPC](https://github.com/grpc). Each `Status` message contains
            # three pieces of data: error code, error message, and error details.
            #
            # You can find out more about this error model and how to work with it in the
            # [API Design Guide](https://cloud.google.com/apis/design/errors).
          &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
          &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
            },
          ],
          &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
              # user-facing error message should be localized and sent in the
              # google.rpc.Status.details field, or localized by the client.
        },
        &quot;state&quot;: &quot;A String&quot;, # [Output Only] Status of the action, which can be one of the following:
            # `PROPAGATING`, `PROPAGATED`, `ABANDONED`, `FAILED`, or `DONE`.
      },
    },
  },
  &quot;startTime&quot;: &quot;A String&quot;, # [Output Only] The time that this operation was started by the server.
      # This value is inRFC3339
      # text format.
  &quot;status&quot;: &quot;A String&quot;, # [Output Only] The status of the operation, which can be one of the
      # following:
      # `PENDING`, `RUNNING`, or `DONE`.
  &quot;statusMessage&quot;: &quot;A String&quot;, # [Output Only] An optional textual description of the current status of the
      # operation.
  &quot;targetId&quot;: &quot;A String&quot;, # [Output Only] The unique target ID, which identifies a specific incarnation
      # of the target resource.
  &quot;targetLink&quot;: &quot;A String&quot;, # [Output Only] The URL of the resource that the operation modifies. For
      # operations related to creating a snapshot, this points to the disk
      # that the snapshot was created from.
  &quot;user&quot;: &quot;A String&quot;, # [Output Only] User who requested the operation, for example:
      # `user@example.com` or
      # `alice_smith_identifier (global/workforcePools/example-com-us-employees)`.
  &quot;warnings&quot;: [ # [Output Only] If warning messages are generated during processing of the
      # operation, this field will be populated.
    {
      &quot;code&quot;: &quot;A String&quot;, # [Output Only] A warning code, if applicable. For example, Compute
          # Engine returns NO_RESULTS_ON_PAGE if there
          # are no results in the response.
      &quot;data&quot;: [ # [Output Only] Metadata about this warning in key:
          # value format. For example:
          #
          # &quot;data&quot;: [
          #   {
          #    &quot;key&quot;: &quot;scope&quot;,
          #    &quot;value&quot;: &quot;zones/us-east1-d&quot;
          #   }
        {
          &quot;key&quot;: &quot;A String&quot;, # [Output Only] A key that provides more detail on the warning being
              # returned. For example, for warnings where there are no results in a list
              # request for a particular zone, this key might be scope and
              # the key value might be the zone name. Other examples might be a key
              # indicating a deprecated resource and a suggested replacement, or a
              # warning about invalid network settings (for example, if an instance
              # attempts to perform IP forwarding but is not enabled for IP forwarding).
          &quot;value&quot;: &quot;A String&quot;, # [Output Only] A warning data value corresponding to the key.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # [Output Only] A human-readable description of the warning code.
    },
  ],
  &quot;zone&quot;: &quot;A String&quot;, # [Output Only] The URL of the zone where the operation resides. Only
      # applicable when performing per-zone operations.
}</pre>
</div>

</body></html>