<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="baremetalsolution_v2.html">Bare Metal Solution API</a> . <a href="baremetalsolution_v2.projects.html">projects</a> . <a href="baremetalsolution_v2.projects.locations.html">locations</a> . <a href="baremetalsolution_v2.projects.locations.volumes.html">volumes</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="baremetalsolution_v2.projects.locations.volumes.luns.html">luns()</a></code>
</p>
<p class="firstline">Returns the luns Resource.</p>

<p class="toc_element">
  <code><a href="baremetalsolution_v2.projects.locations.volumes.snapshots.html">snapshots()</a></code>
</p>
<p class="firstline">Returns the snapshots Resource.</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(name, x__xgafv=None)</a></code></p>
<p class="firstline">Get details of a single storage volume.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List storage volumes in a given project and location.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Update details of a single storage volume.</p>
<h3>Method Details</h3>
<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(name, x__xgafv=None)</code>
  <pre>Get details of a single storage volume.

Args:
  name: string, Required. Name of the resource. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A storage volume.
  &quot;autoGrownSizeGib&quot;: &quot;A String&quot;, # The size, in GiB, that this storage volume has expanded as a result of an auto grow policy. In the absence of auto-grow, the value is 0.
  &quot;currentSizeGib&quot;: &quot;A String&quot;, # The current size of this storage volume, in GiB, including space reserved for snapshots. This size might be different than the requested size if the storage volume has been configured with auto grow or auto shrink.
  &quot;id&quot;: &quot;A String&quot;, # An identifier for the `Volume`, generated by the backend.
  &quot;labels&quot;: { # Labels as key value pairs.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of this `Volume`. Resource names are schemeless URIs that follow the conventions in https://cloud.google.com/apis/design/resource_names. Format: `projects/{project}/locations/{location}/volumes/{volume}`
  &quot;remainingSpaceGib&quot;: &quot;A String&quot;, # The space remaining in the storage volume for new LUNs, in GiB, excluding space reserved for snapshots.
  &quot;requestedSizeGib&quot;: &quot;A String&quot;, # The requested size of this storage volume, in GiB.
  &quot;snapshotAutoDeleteBehavior&quot;: &quot;A String&quot;, # The behavior to use when snapshot reserved space is full.
  &quot;snapshotEnabled&quot;: True or False, # Whether snapshots are enabled.
  &quot;snapshotReservationDetail&quot;: { # Details about snapshot space reservation and usage on the storage volume. # Details about snapshot space reservation and usage on the storage volume.
    &quot;reservedSpaceGib&quot;: &quot;A String&quot;, # The space on this storage volume reserved for snapshots, shown in GiB.
    &quot;reservedSpacePercent&quot;: 42, # Percent of the total Volume size reserved for snapshot copies. Enabling snapshots requires reserving 20% or more of the storage volume space for snapshots. Maximum reserved space for snapshots is 40%. Setting this field will effectively set snapshot_enabled to true.
    &quot;reservedSpaceRemainingGib&quot;: &quot;A String&quot;, # The amount, in GiB, of available space in this storage volume&#x27;s reserved snapshot space.
    &quot;reservedSpaceUsedPercent&quot;: 42, # The percent of snapshot space on this storage volume actually being used by the snapshot copies. This value might be higher than 100% if the snapshot copies have overflowed into the data portion of the storage volume.
  },
  &quot;snapshotSchedulePolicy&quot;: &quot;A String&quot;, # The name of the snapshot schedule policy in use for this volume, if any.
  &quot;state&quot;: &quot;A String&quot;, # The state of this storage volume.
  &quot;storageType&quot;: &quot;A String&quot;, # The storage type for this volume.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>List storage volumes in a given project and location.

Args:
  parent: string, Required. Parent value for ListVolumesRequest. (required)
  filter: string, List filter.
  pageSize: integer, Requested page size. The server might return fewer items than requested. If unspecified, server will pick an appropriate default.
  pageToken: string, A token identifying a page of results from the server.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message containing the list of storage volumes.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token identifying a page of results from the server.
  &quot;unreachable&quot;: [ # Locations that could not be reached.
    &quot;A String&quot;,
  ],
  &quot;volumes&quot;: [ # The list of storage volumes.
    { # A storage volume.
      &quot;autoGrownSizeGib&quot;: &quot;A String&quot;, # The size, in GiB, that this storage volume has expanded as a result of an auto grow policy. In the absence of auto-grow, the value is 0.
      &quot;currentSizeGib&quot;: &quot;A String&quot;, # The current size of this storage volume, in GiB, including space reserved for snapshots. This size might be different than the requested size if the storage volume has been configured with auto grow or auto shrink.
      &quot;id&quot;: &quot;A String&quot;, # An identifier for the `Volume`, generated by the backend.
      &quot;labels&quot;: { # Labels as key value pairs.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of this `Volume`. Resource names are schemeless URIs that follow the conventions in https://cloud.google.com/apis/design/resource_names. Format: `projects/{project}/locations/{location}/volumes/{volume}`
      &quot;remainingSpaceGib&quot;: &quot;A String&quot;, # The space remaining in the storage volume for new LUNs, in GiB, excluding space reserved for snapshots.
      &quot;requestedSizeGib&quot;: &quot;A String&quot;, # The requested size of this storage volume, in GiB.
      &quot;snapshotAutoDeleteBehavior&quot;: &quot;A String&quot;, # The behavior to use when snapshot reserved space is full.
      &quot;snapshotEnabled&quot;: True or False, # Whether snapshots are enabled.
      &quot;snapshotReservationDetail&quot;: { # Details about snapshot space reservation and usage on the storage volume. # Details about snapshot space reservation and usage on the storage volume.
        &quot;reservedSpaceGib&quot;: &quot;A String&quot;, # The space on this storage volume reserved for snapshots, shown in GiB.
        &quot;reservedSpacePercent&quot;: 42, # Percent of the total Volume size reserved for snapshot copies. Enabling snapshots requires reserving 20% or more of the storage volume space for snapshots. Maximum reserved space for snapshots is 40%. Setting this field will effectively set snapshot_enabled to true.
        &quot;reservedSpaceRemainingGib&quot;: &quot;A String&quot;, # The amount, in GiB, of available space in this storage volume&#x27;s reserved snapshot space.
        &quot;reservedSpaceUsedPercent&quot;: 42, # The percent of snapshot space on this storage volume actually being used by the snapshot copies. This value might be higher than 100% if the snapshot copies have overflowed into the data portion of the storage volume.
      },
      &quot;snapshotSchedulePolicy&quot;: &quot;A String&quot;, # The name of the snapshot schedule policy in use for this volume, if any.
      &quot;state&quot;: &quot;A String&quot;, # The state of this storage volume.
      &quot;storageType&quot;: &quot;A String&quot;, # The storage type for this volume.
    },
  ],
}</pre>
</div>

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

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

Returns:
  A request object that you can call &#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="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Update details of a single storage volume.

Args:
  name: string, Output only. The resource name of this `Volume`. Resource names are schemeless URIs that follow the conventions in https://cloud.google.com/apis/design/resource_names. Format: `projects/{project}/locations/{location}/volumes/{volume}` (required)
  body: object, The request body.
    The object takes the form of:

{ # A storage volume.
  &quot;autoGrownSizeGib&quot;: &quot;A String&quot;, # The size, in GiB, that this storage volume has expanded as a result of an auto grow policy. In the absence of auto-grow, the value is 0.
  &quot;currentSizeGib&quot;: &quot;A String&quot;, # The current size of this storage volume, in GiB, including space reserved for snapshots. This size might be different than the requested size if the storage volume has been configured with auto grow or auto shrink.
  &quot;id&quot;: &quot;A String&quot;, # An identifier for the `Volume`, generated by the backend.
  &quot;labels&quot;: { # Labels as key value pairs.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of this `Volume`. Resource names are schemeless URIs that follow the conventions in https://cloud.google.com/apis/design/resource_names. Format: `projects/{project}/locations/{location}/volumes/{volume}`
  &quot;remainingSpaceGib&quot;: &quot;A String&quot;, # The space remaining in the storage volume for new LUNs, in GiB, excluding space reserved for snapshots.
  &quot;requestedSizeGib&quot;: &quot;A String&quot;, # The requested size of this storage volume, in GiB.
  &quot;snapshotAutoDeleteBehavior&quot;: &quot;A String&quot;, # The behavior to use when snapshot reserved space is full.
  &quot;snapshotEnabled&quot;: True or False, # Whether snapshots are enabled.
  &quot;snapshotReservationDetail&quot;: { # Details about snapshot space reservation and usage on the storage volume. # Details about snapshot space reservation and usage on the storage volume.
    &quot;reservedSpaceGib&quot;: &quot;A String&quot;, # The space on this storage volume reserved for snapshots, shown in GiB.
    &quot;reservedSpacePercent&quot;: 42, # Percent of the total Volume size reserved for snapshot copies. Enabling snapshots requires reserving 20% or more of the storage volume space for snapshots. Maximum reserved space for snapshots is 40%. Setting this field will effectively set snapshot_enabled to true.
    &quot;reservedSpaceRemainingGib&quot;: &quot;A String&quot;, # The amount, in GiB, of available space in this storage volume&#x27;s reserved snapshot space.
    &quot;reservedSpaceUsedPercent&quot;: 42, # The percent of snapshot space on this storage volume actually being used by the snapshot copies. This value might be higher than 100% if the snapshot copies have overflowed into the data portion of the storage volume.
  },
  &quot;snapshotSchedulePolicy&quot;: &quot;A String&quot;, # The name of the snapshot schedule policy in use for this volume, if any.
  &quot;state&quot;: &quot;A String&quot;, # The state of this storage volume.
  &quot;storageType&quot;: &quot;A String&quot;, # The storage type for this volume.
}

  updateMask: string, The list of fields to update. The only currently supported fields are: `snapshot_auto_delete_behavior` `snapshot_schedule_policy_name` &#x27;labels&#x27; &#x27;requested_size_gib&#x27; &#x27;snapshot_enabled&#x27; &#x27;snapshot_reservation_detail.reserved_space_percent&#x27;
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &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;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

</body></html>