<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_v1alpha1.html">Bare Metal Solution API</a> . <a href="baremetalsolution_v1alpha1.projects.html">projects</a> . <a href="baremetalsolution_v1alpha1.projects.locations.html">locations</a> . <a href="baremetalsolution_v1alpha1.projects.locations.luns.html">luns</a></h1>
<h2>Instance Methods</h2>
<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 for a specific named Lun.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List Luns.</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>
<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 for a specific named Lun.

Args:
  name: string, Required. The name of the Lun to retrieve. (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 Lun.
  &quot;isBoot&quot;: True or False, # Whether this Lun is a boot Lun.
  &quot;multiprotocolType&quot;: &quot;A String&quot;, # The multiprotocol type of this Lun.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The name of this Lun.
  &quot;remoteVolume&quot;: { # Volume registered in the project. # The storage volume that this Lun is attached to.
    &quot;autoGrownSizeGb&quot;: &quot;A String&quot;, # The size, in GB, that this Volume has expanded as a result of an auto grow policy.
    &quot;currentSizeGb&quot;: &quot;A String&quot;, # The current size of this Volume, in GB, including space reserved for snapshots. This size may be different than the requested size if the Volume has been configured with auto grow or auto shrink.
    &quot;name&quot;: &quot;A String&quot;, # Output only. The name of this Volume.
    &quot;remainingSpaceGb&quot;: &quot;A String&quot;, # The space remaining in the Volume for new LUNs, in GB, excluding space reserved for snapshots.
    &quot;requestedSizeGb&quot;: &quot;A String&quot;, # The requested size of this Volume, in GB.
    &quot;snapshotReservedSpacePercent&quot;: 42, # The percent of space on this Volume reserved for snapshots.
    &quot;snapshotReservedSpaceRemainingGb&quot;: &quot;A String&quot;, # The amount, in GB, of space available in this Volume&#x27;s reserved snapshot space.
    &quot;snapshotReservedSpaceUsedPercent&quot;: 42, # The percent of reserved snapshot space on this Volume that is actually used by snapshot copies. This may be higher than 100% if snapshot copies are occupying more space than has been reserved on the Volume.
    &quot;state&quot;: &quot;A String&quot;, # The state of this Volume.
    &quot;type&quot;: &quot;A String&quot;, # The type of this Volume.
  },
  &quot;shareable&quot;: True or False, # Whether this Lun is allowed to be shared between multiple physical servers.
  &quot;sizeGb&quot;: &quot;A String&quot;, # The size of this Lun, in gigabytes.
  &quot;state&quot;: &quot;A String&quot;, # The state of this Lun.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>List Luns.

Args:
  parent: string, Required. The location to list Luns in. (required)
  pageSize: integer, The maximum number of items to return.
  pageToken: string, The next_page_token value returned from a previous List request, if any.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for ListLuns.
  &quot;luns&quot;: [ # The Luns in this project.
    { # A storage Lun.
      &quot;isBoot&quot;: True or False, # Whether this Lun is a boot Lun.
      &quot;multiprotocolType&quot;: &quot;A String&quot;, # The multiprotocol type of this Lun.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The name of this Lun.
      &quot;remoteVolume&quot;: { # Volume registered in the project. # The storage volume that this Lun is attached to.
        &quot;autoGrownSizeGb&quot;: &quot;A String&quot;, # The size, in GB, that this Volume has expanded as a result of an auto grow policy.
        &quot;currentSizeGb&quot;: &quot;A String&quot;, # The current size of this Volume, in GB, including space reserved for snapshots. This size may be different than the requested size if the Volume has been configured with auto grow or auto shrink.
        &quot;name&quot;: &quot;A String&quot;, # Output only. The name of this Volume.
        &quot;remainingSpaceGb&quot;: &quot;A String&quot;, # The space remaining in the Volume for new LUNs, in GB, excluding space reserved for snapshots.
        &quot;requestedSizeGb&quot;: &quot;A String&quot;, # The requested size of this Volume, in GB.
        &quot;snapshotReservedSpacePercent&quot;: 42, # The percent of space on this Volume reserved for snapshots.
        &quot;snapshotReservedSpaceRemainingGb&quot;: &quot;A String&quot;, # The amount, in GB, of space available in this Volume&#x27;s reserved snapshot space.
        &quot;snapshotReservedSpaceUsedPercent&quot;: 42, # The percent of reserved snapshot space on this Volume that is actually used by snapshot copies. This may be higher than 100% if snapshot copies are occupying more space than has been reserved on the Volume.
        &quot;state&quot;: &quot;A String&quot;, # The state of this Volume.
        &quot;type&quot;: &quot;A String&quot;, # The type of this Volume.
      },
      &quot;shareable&quot;: True or False, # Whether this Lun is allowed to be shared between multiple physical servers.
      &quot;sizeGb&quot;: &quot;A String&quot;, # The size of this Lun, in gigabytes.
      &quot;state&quot;: &quot;A String&quot;, # The state of this Lun.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
}</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>

</body></html>