<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="file_v1.html">Cloud Filestore API</a> . <a href="file_v1.projects.html">projects</a> . <a href="file_v1.projects.locations.html">locations</a> . <a href="file_v1.projects.locations.instances.html">instances</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="file_v1.projects.locations.instances.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="#create">create(parent, body=None, instanceId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates an instance. When creating from a backup, the capacity of the new instance needs to be equal to or larger than the capacity of the backup (and also equal to or larger than the minimum capacity of the tier).</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, force=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an instance.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the details of a specific instance.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all instances in a project for either a specified location or for all locations.</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">Updates the settings of a specific instance.</p>
<p class="toc_element">
  <code><a href="#restore">restore(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Restores an existing instance's file share from a backup. The capacity of the instance needs to be equal to or larger than the capacity of the backup (and also equal to or larger than the minimum capacity of the tier).</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="create">create(parent, body=None, instanceId=None, x__xgafv=None)</code>
  <pre>Creates an instance. When creating from a backup, the capacity of the new instance needs to be equal to or larger than the capacity of the backup (and also equal to or larger than the minimum capacity of the tier).

Args:
  parent: string, Required. The instance&#x27;s project and location, in the format `projects/{project_id}/locations/{location}`. In Cloud Filestore, locations map to GCP zones, for example **us-west1-b**. (required)
  body: object, The request body.
    The object takes the form of:

{ # A Cloud Filestore instance.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the instance was created.
  &quot;description&quot;: &quot;A String&quot;, # The description of the instance (2048 characters or less).
  &quot;etag&quot;: &quot;A String&quot;, # Server-specified ETag for the instance resource to prevent simultaneous updates from overwriting each other.
  &quot;fileShares&quot;: [ # File system shares on the instance. For this version, only a single file share is supported.
    { # File share configuration for the instance.
      &quot;capacityGb&quot;: &quot;A String&quot;, # File share capacity in gigabytes (GB). Cloud Filestore defines 1 GB as 1024^3 bytes.
      &quot;name&quot;: &quot;A String&quot;, # The name of the file share (must be 16 characters or less).
      &quot;nfsExportOptions&quot;: [ # Nfs Export Options. There is a limit of 10 export options per file share.
        { # NFS export options specifications.
          &quot;accessMode&quot;: &quot;A String&quot;, # Either READ_ONLY, for allowing only read requests on the exported directory, or READ_WRITE, for allowing both read and write requests. The default is READ_WRITE.
          &quot;anonGid&quot;: &quot;A String&quot;, # An integer representing the anonymous group id with a default value of 65534. Anon_gid may only be set with squash_mode of ROOT_SQUASH. An error will be returned if this field is specified for other squash_mode settings.
          &quot;anonUid&quot;: &quot;A String&quot;, # An integer representing the anonymous user id with a default value of 65534. Anon_uid may only be set with squash_mode of ROOT_SQUASH. An error will be returned if this field is specified for other squash_mode settings.
          &quot;ipRanges&quot;: [ # List of either an IPv4 addresses in the format `{octet1}.{octet2}.{octet3}.{octet4}` or CIDR ranges in the format `{octet1}.{octet2}.{octet3}.{octet4}/{mask size}` which may mount the file share. Overlapping IP ranges are not allowed, both within and across NfsExportOptions. An error will be returned. The limit is 64 IP ranges/addresses for each FileShareConfig among all NfsExportOptions.
            &quot;A String&quot;,
          ],
          &quot;squashMode&quot;: &quot;A String&quot;, # Either NO_ROOT_SQUASH, for allowing root access on the exported directory, or ROOT_SQUASH, for not allowing root access. The default is NO_ROOT_SQUASH.
        },
      ],
      &quot;sourceBackup&quot;: &quot;A String&quot;, # The resource name of the backup, in the format `projects/{project_number}/locations/{location_id}/backups/{backup_id}`, that this file share has been restored from.
    },
  ],
  &quot;kmsKeyName&quot;: &quot;A String&quot;, # KMS key name used for data encryption.
  &quot;labels&quot;: { # Resource labels to represent user provided metadata.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the instance, in the format `projects/{project}/locations/{location}/instances/{instance}`.
  &quot;networks&quot;: [ # VPC networks to which the instance is connected. For this version, only a single network is supported.
    { # Network configuration for the instance.
      &quot;connectMode&quot;: &quot;A String&quot;, # The network connect mode of the Filestore instance. If not provided, the connect mode defaults to DIRECT_PEERING.
      &quot;ipAddresses&quot;: [ # Output only. IPv4 addresses in the format `{octet1}.{octet2}.{octet3}.{octet4}` or IPv6 addresses in the format `{block1}:{block2}:{block3}:{block4}:{block5}:{block6}:{block7}:{block8}`.
        &quot;A String&quot;,
      ],
      &quot;modes&quot;: [ # Internet protocol versions for which the instance has IP addresses assigned. For this version, only MODE_IPV4 is supported.
        &quot;A String&quot;,
      ],
      &quot;network&quot;: &quot;A String&quot;, # The name of the Google Compute Engine [VPC network](https://cloud.google.com/vpc/docs/vpc) to which the instance is connected.
      &quot;reservedIpRange&quot;: &quot;A String&quot;, # Optional, reserved_ip_range can have one of the following two types of values. * CIDR range value when using DIRECT_PEERING connect mode. * [Allocated IP address range](https://cloud.google.com/compute/docs/ip-addresses/reserve-static-internal-ip-address) when using PRIVATE_SERVICE_ACCESS connect mode. When the name of an allocated IP address range is specified, it must be one of the ranges associated with the private service access connection. When specified as a direct CIDR value, it must be a /29 CIDR block for Basic tier or a /24 CIDR block for High Scale or Enterprise tier in one of the [internal IP address ranges](https://www.arin.net/reference/research/statistics/address_filters/) that identifies the range of IP addresses reserved for this instance. For example, 10.0.0.0/29 or 192.168.0.0/24. The range you specify can&#x27;t overlap with either existing subnets or assigned IP address ranges for other Cloud Filestore instances in the selected VPC network.
    },
  ],
  &quot;satisfiesPzs&quot;: True or False, # Output only. Reserved for future use.
  &quot;state&quot;: &quot;A String&quot;, # Output only. The instance state.
  &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the instance state, if available.
  &quot;suspensionReasons&quot;: [ # Output only. field indicates all the reasons the instance is in &quot;SUSPENDED&quot; state.
    &quot;A String&quot;,
  ],
  &quot;tier&quot;: &quot;A String&quot;, # The service tier of the instance.
}

  instanceId: string, Required. The name of the instance to create. The name must be unique for the specified project and location.
  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>

<div class="method">
    <code class="details" id="delete">delete(name, force=None, x__xgafv=None)</code>
  <pre>Deletes an instance.

Args:
  name: string, Required. The instance resource name, in the format `projects/{project_id}/locations/{location}/instances/{instance_id}` (required)
  force: boolean, If set to true, all snapshots of the instance will also be deleted. (Otherwise, the request will only work if the instance has no snapshots.)
  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>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets the details of a specific instance.

Args:
  name: string, Required. The instance resource name, in the format `projects/{project_id}/locations/{location}/instances/{instance_id}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Cloud Filestore instance.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the instance was created.
  &quot;description&quot;: &quot;A String&quot;, # The description of the instance (2048 characters or less).
  &quot;etag&quot;: &quot;A String&quot;, # Server-specified ETag for the instance resource to prevent simultaneous updates from overwriting each other.
  &quot;fileShares&quot;: [ # File system shares on the instance. For this version, only a single file share is supported.
    { # File share configuration for the instance.
      &quot;capacityGb&quot;: &quot;A String&quot;, # File share capacity in gigabytes (GB). Cloud Filestore defines 1 GB as 1024^3 bytes.
      &quot;name&quot;: &quot;A String&quot;, # The name of the file share (must be 16 characters or less).
      &quot;nfsExportOptions&quot;: [ # Nfs Export Options. There is a limit of 10 export options per file share.
        { # NFS export options specifications.
          &quot;accessMode&quot;: &quot;A String&quot;, # Either READ_ONLY, for allowing only read requests on the exported directory, or READ_WRITE, for allowing both read and write requests. The default is READ_WRITE.
          &quot;anonGid&quot;: &quot;A String&quot;, # An integer representing the anonymous group id with a default value of 65534. Anon_gid may only be set with squash_mode of ROOT_SQUASH. An error will be returned if this field is specified for other squash_mode settings.
          &quot;anonUid&quot;: &quot;A String&quot;, # An integer representing the anonymous user id with a default value of 65534. Anon_uid may only be set with squash_mode of ROOT_SQUASH. An error will be returned if this field is specified for other squash_mode settings.
          &quot;ipRanges&quot;: [ # List of either an IPv4 addresses in the format `{octet1}.{octet2}.{octet3}.{octet4}` or CIDR ranges in the format `{octet1}.{octet2}.{octet3}.{octet4}/{mask size}` which may mount the file share. Overlapping IP ranges are not allowed, both within and across NfsExportOptions. An error will be returned. The limit is 64 IP ranges/addresses for each FileShareConfig among all NfsExportOptions.
            &quot;A String&quot;,
          ],
          &quot;squashMode&quot;: &quot;A String&quot;, # Either NO_ROOT_SQUASH, for allowing root access on the exported directory, or ROOT_SQUASH, for not allowing root access. The default is NO_ROOT_SQUASH.
        },
      ],
      &quot;sourceBackup&quot;: &quot;A String&quot;, # The resource name of the backup, in the format `projects/{project_number}/locations/{location_id}/backups/{backup_id}`, that this file share has been restored from.
    },
  ],
  &quot;kmsKeyName&quot;: &quot;A String&quot;, # KMS key name used for data encryption.
  &quot;labels&quot;: { # Resource labels to represent user provided metadata.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the instance, in the format `projects/{project}/locations/{location}/instances/{instance}`.
  &quot;networks&quot;: [ # VPC networks to which the instance is connected. For this version, only a single network is supported.
    { # Network configuration for the instance.
      &quot;connectMode&quot;: &quot;A String&quot;, # The network connect mode of the Filestore instance. If not provided, the connect mode defaults to DIRECT_PEERING.
      &quot;ipAddresses&quot;: [ # Output only. IPv4 addresses in the format `{octet1}.{octet2}.{octet3}.{octet4}` or IPv6 addresses in the format `{block1}:{block2}:{block3}:{block4}:{block5}:{block6}:{block7}:{block8}`.
        &quot;A String&quot;,
      ],
      &quot;modes&quot;: [ # Internet protocol versions for which the instance has IP addresses assigned. For this version, only MODE_IPV4 is supported.
        &quot;A String&quot;,
      ],
      &quot;network&quot;: &quot;A String&quot;, # The name of the Google Compute Engine [VPC network](https://cloud.google.com/vpc/docs/vpc) to which the instance is connected.
      &quot;reservedIpRange&quot;: &quot;A String&quot;, # Optional, reserved_ip_range can have one of the following two types of values. * CIDR range value when using DIRECT_PEERING connect mode. * [Allocated IP address range](https://cloud.google.com/compute/docs/ip-addresses/reserve-static-internal-ip-address) when using PRIVATE_SERVICE_ACCESS connect mode. When the name of an allocated IP address range is specified, it must be one of the ranges associated with the private service access connection. When specified as a direct CIDR value, it must be a /29 CIDR block for Basic tier or a /24 CIDR block for High Scale or Enterprise tier in one of the [internal IP address ranges](https://www.arin.net/reference/research/statistics/address_filters/) that identifies the range of IP addresses reserved for this instance. For example, 10.0.0.0/29 or 192.168.0.0/24. The range you specify can&#x27;t overlap with either existing subnets or assigned IP address ranges for other Cloud Filestore instances in the selected VPC network.
    },
  ],
  &quot;satisfiesPzs&quot;: True or False, # Output only. Reserved for future use.
  &quot;state&quot;: &quot;A String&quot;, # Output only. The instance state.
  &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the instance state, if available.
  &quot;suspensionReasons&quot;: [ # Output only. field indicates all the reasons the instance is in &quot;SUSPENDED&quot; state.
    &quot;A String&quot;,
  ],
  &quot;tier&quot;: &quot;A String&quot;, # The service tier of the instance.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists all instances in a project for either a specified location or for all locations.

Args:
  parent: string, Required. The project and location for which to retrieve instance information, in the format `projects/{project_id}/locations/{location}`. In Cloud Filestore, locations map to GCP zones, for example **us-west1-b**. To retrieve instance information for all locations, use &quot;-&quot; for the `{location}` value. (required)
  filter: string, List filter.
  orderBy: string, Sort results. Supported values are &quot;name&quot;, &quot;name desc&quot; or &quot;&quot; (unsorted).
  pageSize: integer, The maximum number of items to return.
  pageToken: string, The next_page_token value to use if there are additional results to retrieve for this list request.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # ListInstancesResponse is the result of ListInstancesRequest.
  &quot;instances&quot;: [ # A list of instances in the project for the specified location. If the `{location}` value in the request is &quot;-&quot;, the response contains a list of instances from all locations. If any location is unreachable, the response will only return instances in reachable locations and the &quot;unreachable&quot; field will be populated with a list of unreachable locations.
    { # A Cloud Filestore instance.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the instance was created.
      &quot;description&quot;: &quot;A String&quot;, # The description of the instance (2048 characters or less).
      &quot;etag&quot;: &quot;A String&quot;, # Server-specified ETag for the instance resource to prevent simultaneous updates from overwriting each other.
      &quot;fileShares&quot;: [ # File system shares on the instance. For this version, only a single file share is supported.
        { # File share configuration for the instance.
          &quot;capacityGb&quot;: &quot;A String&quot;, # File share capacity in gigabytes (GB). Cloud Filestore defines 1 GB as 1024^3 bytes.
          &quot;name&quot;: &quot;A String&quot;, # The name of the file share (must be 16 characters or less).
          &quot;nfsExportOptions&quot;: [ # Nfs Export Options. There is a limit of 10 export options per file share.
            { # NFS export options specifications.
              &quot;accessMode&quot;: &quot;A String&quot;, # Either READ_ONLY, for allowing only read requests on the exported directory, or READ_WRITE, for allowing both read and write requests. The default is READ_WRITE.
              &quot;anonGid&quot;: &quot;A String&quot;, # An integer representing the anonymous group id with a default value of 65534. Anon_gid may only be set with squash_mode of ROOT_SQUASH. An error will be returned if this field is specified for other squash_mode settings.
              &quot;anonUid&quot;: &quot;A String&quot;, # An integer representing the anonymous user id with a default value of 65534. Anon_uid may only be set with squash_mode of ROOT_SQUASH. An error will be returned if this field is specified for other squash_mode settings.
              &quot;ipRanges&quot;: [ # List of either an IPv4 addresses in the format `{octet1}.{octet2}.{octet3}.{octet4}` or CIDR ranges in the format `{octet1}.{octet2}.{octet3}.{octet4}/{mask size}` which may mount the file share. Overlapping IP ranges are not allowed, both within and across NfsExportOptions. An error will be returned. The limit is 64 IP ranges/addresses for each FileShareConfig among all NfsExportOptions.
                &quot;A String&quot;,
              ],
              &quot;squashMode&quot;: &quot;A String&quot;, # Either NO_ROOT_SQUASH, for allowing root access on the exported directory, or ROOT_SQUASH, for not allowing root access. The default is NO_ROOT_SQUASH.
            },
          ],
          &quot;sourceBackup&quot;: &quot;A String&quot;, # The resource name of the backup, in the format `projects/{project_number}/locations/{location_id}/backups/{backup_id}`, that this file share has been restored from.
        },
      ],
      &quot;kmsKeyName&quot;: &quot;A String&quot;, # KMS key name used for data encryption.
      &quot;labels&quot;: { # Resource labels to represent user provided metadata.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the instance, in the format `projects/{project}/locations/{location}/instances/{instance}`.
      &quot;networks&quot;: [ # VPC networks to which the instance is connected. For this version, only a single network is supported.
        { # Network configuration for the instance.
          &quot;connectMode&quot;: &quot;A String&quot;, # The network connect mode of the Filestore instance. If not provided, the connect mode defaults to DIRECT_PEERING.
          &quot;ipAddresses&quot;: [ # Output only. IPv4 addresses in the format `{octet1}.{octet2}.{octet3}.{octet4}` or IPv6 addresses in the format `{block1}:{block2}:{block3}:{block4}:{block5}:{block6}:{block7}:{block8}`.
            &quot;A String&quot;,
          ],
          &quot;modes&quot;: [ # Internet protocol versions for which the instance has IP addresses assigned. For this version, only MODE_IPV4 is supported.
            &quot;A String&quot;,
          ],
          &quot;network&quot;: &quot;A String&quot;, # The name of the Google Compute Engine [VPC network](https://cloud.google.com/vpc/docs/vpc) to which the instance is connected.
          &quot;reservedIpRange&quot;: &quot;A String&quot;, # Optional, reserved_ip_range can have one of the following two types of values. * CIDR range value when using DIRECT_PEERING connect mode. * [Allocated IP address range](https://cloud.google.com/compute/docs/ip-addresses/reserve-static-internal-ip-address) when using PRIVATE_SERVICE_ACCESS connect mode. When the name of an allocated IP address range is specified, it must be one of the ranges associated with the private service access connection. When specified as a direct CIDR value, it must be a /29 CIDR block for Basic tier or a /24 CIDR block for High Scale or Enterprise tier in one of the [internal IP address ranges](https://www.arin.net/reference/research/statistics/address_filters/) that identifies the range of IP addresses reserved for this instance. For example, 10.0.0.0/29 or 192.168.0.0/24. The range you specify can&#x27;t overlap with either existing subnets or assigned IP address ranges for other Cloud Filestore instances in the selected VPC network.
        },
      ],
      &quot;satisfiesPzs&quot;: True or False, # Output only. Reserved for future use.
      &quot;state&quot;: &quot;A String&quot;, # Output only. The instance state.
      &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the instance state, if available.
      &quot;suspensionReasons&quot;: [ # Output only. field indicates all the reasons the instance is in &quot;SUSPENDED&quot; state.
        &quot;A String&quot;,
      ],
      &quot;tier&quot;: &quot;A String&quot;, # The service tier of the instance.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The token you can use to retrieve the next page of results. Not returned if there are no more results in the list.
  &quot;unreachable&quot;: [ # Locations that could not be reached.
    &quot;A String&quot;,
  ],
}</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>Updates the settings of a specific instance.

Args:
  name: string, Output only. The resource name of the instance, in the format `projects/{project}/locations/{location}/instances/{instance}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A Cloud Filestore instance.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the instance was created.
  &quot;description&quot;: &quot;A String&quot;, # The description of the instance (2048 characters or less).
  &quot;etag&quot;: &quot;A String&quot;, # Server-specified ETag for the instance resource to prevent simultaneous updates from overwriting each other.
  &quot;fileShares&quot;: [ # File system shares on the instance. For this version, only a single file share is supported.
    { # File share configuration for the instance.
      &quot;capacityGb&quot;: &quot;A String&quot;, # File share capacity in gigabytes (GB). Cloud Filestore defines 1 GB as 1024^3 bytes.
      &quot;name&quot;: &quot;A String&quot;, # The name of the file share (must be 16 characters or less).
      &quot;nfsExportOptions&quot;: [ # Nfs Export Options. There is a limit of 10 export options per file share.
        { # NFS export options specifications.
          &quot;accessMode&quot;: &quot;A String&quot;, # Either READ_ONLY, for allowing only read requests on the exported directory, or READ_WRITE, for allowing both read and write requests. The default is READ_WRITE.
          &quot;anonGid&quot;: &quot;A String&quot;, # An integer representing the anonymous group id with a default value of 65534. Anon_gid may only be set with squash_mode of ROOT_SQUASH. An error will be returned if this field is specified for other squash_mode settings.
          &quot;anonUid&quot;: &quot;A String&quot;, # An integer representing the anonymous user id with a default value of 65534. Anon_uid may only be set with squash_mode of ROOT_SQUASH. An error will be returned if this field is specified for other squash_mode settings.
          &quot;ipRanges&quot;: [ # List of either an IPv4 addresses in the format `{octet1}.{octet2}.{octet3}.{octet4}` or CIDR ranges in the format `{octet1}.{octet2}.{octet3}.{octet4}/{mask size}` which may mount the file share. Overlapping IP ranges are not allowed, both within and across NfsExportOptions. An error will be returned. The limit is 64 IP ranges/addresses for each FileShareConfig among all NfsExportOptions.
            &quot;A String&quot;,
          ],
          &quot;squashMode&quot;: &quot;A String&quot;, # Either NO_ROOT_SQUASH, for allowing root access on the exported directory, or ROOT_SQUASH, for not allowing root access. The default is NO_ROOT_SQUASH.
        },
      ],
      &quot;sourceBackup&quot;: &quot;A String&quot;, # The resource name of the backup, in the format `projects/{project_number}/locations/{location_id}/backups/{backup_id}`, that this file share has been restored from.
    },
  ],
  &quot;kmsKeyName&quot;: &quot;A String&quot;, # KMS key name used for data encryption.
  &quot;labels&quot;: { # Resource labels to represent user provided metadata.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the instance, in the format `projects/{project}/locations/{location}/instances/{instance}`.
  &quot;networks&quot;: [ # VPC networks to which the instance is connected. For this version, only a single network is supported.
    { # Network configuration for the instance.
      &quot;connectMode&quot;: &quot;A String&quot;, # The network connect mode of the Filestore instance. If not provided, the connect mode defaults to DIRECT_PEERING.
      &quot;ipAddresses&quot;: [ # Output only. IPv4 addresses in the format `{octet1}.{octet2}.{octet3}.{octet4}` or IPv6 addresses in the format `{block1}:{block2}:{block3}:{block4}:{block5}:{block6}:{block7}:{block8}`.
        &quot;A String&quot;,
      ],
      &quot;modes&quot;: [ # Internet protocol versions for which the instance has IP addresses assigned. For this version, only MODE_IPV4 is supported.
        &quot;A String&quot;,
      ],
      &quot;network&quot;: &quot;A String&quot;, # The name of the Google Compute Engine [VPC network](https://cloud.google.com/vpc/docs/vpc) to which the instance is connected.
      &quot;reservedIpRange&quot;: &quot;A String&quot;, # Optional, reserved_ip_range can have one of the following two types of values. * CIDR range value when using DIRECT_PEERING connect mode. * [Allocated IP address range](https://cloud.google.com/compute/docs/ip-addresses/reserve-static-internal-ip-address) when using PRIVATE_SERVICE_ACCESS connect mode. When the name of an allocated IP address range is specified, it must be one of the ranges associated with the private service access connection. When specified as a direct CIDR value, it must be a /29 CIDR block for Basic tier or a /24 CIDR block for High Scale or Enterprise tier in one of the [internal IP address ranges](https://www.arin.net/reference/research/statistics/address_filters/) that identifies the range of IP addresses reserved for this instance. For example, 10.0.0.0/29 or 192.168.0.0/24. The range you specify can&#x27;t overlap with either existing subnets or assigned IP address ranges for other Cloud Filestore instances in the selected VPC network.
    },
  ],
  &quot;satisfiesPzs&quot;: True or False, # Output only. Reserved for future use.
  &quot;state&quot;: &quot;A String&quot;, # Output only. The instance state.
  &quot;statusMessage&quot;: &quot;A String&quot;, # Output only. Additional information about the instance state, if available.
  &quot;suspensionReasons&quot;: [ # Output only. field indicates all the reasons the instance is in &quot;SUSPENDED&quot; state.
    &quot;A String&quot;,
  ],
  &quot;tier&quot;: &quot;A String&quot;, # The service tier of the instance.
}

  updateMask: string, Mask of fields to update. At least one path must be supplied in this field. The elements of the repeated paths field may only include these fields: * &quot;description&quot; * &quot;file_shares&quot; * &quot;labels&quot;
  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>

<div class="method">
    <code class="details" id="restore">restore(name, body=None, x__xgafv=None)</code>
  <pre>Restores an existing instance&#x27;s file share from a backup. The capacity of the instance needs to be equal to or larger than the capacity of the backup (and also equal to or larger than the minimum capacity of the tier).

Args:
  name: string, Required. The resource name of the instance, in the format `projects/{project_number}/locations/{location_id}/instances/{instance_id}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # RestoreInstanceRequest restores an existing instance&#x27;s file share from a backup.
  &quot;fileShare&quot;: &quot;A String&quot;, # Required. Name of the file share in the Cloud Filestore instance that the backup is being restored to.
  &quot;sourceBackup&quot;: &quot;A String&quot;, # The resource name of the backup, in the format `projects/{project_number}/locations/{location_id}/backups/{backup_id}`.
}

  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>