<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="runtimeconfig_v1beta1.html">Cloud Runtime Configuration API</a> . <a href="runtimeconfig_v1beta1.projects.html">projects</a> . <a href="runtimeconfig_v1beta1.projects.configs.html">configs</a> . <a href="runtimeconfig_v1beta1.projects.configs.waiters.html">waiters</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, requestId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a Waiter resource. This operation returns a long-running Operation</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the waiter with the specified name.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets information about a single waiter.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">List waiters within the given configuration.</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="#testIamPermissions">testIamPermissions(resource, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns permissions that a caller has on the specified resource.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body=None, requestId=None, x__xgafv=None)</code>
  <pre>Creates a Waiter resource. This operation returns a long-running Operation
resource which can be polled for completion. However, a waiter with the
given name will exist (and can be retrieved) prior to the operation
completing. If the operation fails, the failed Waiter resource will
still exist and must be deleted prior to subsequent creation attempts.

Args:
  parent: string, The path to the configuration that will own the waiter.
The configuration must exist beforehand; the path must be in the format:

`projects/[PROJECT_ID]/configs/[CONFIG_NAME]`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A Waiter resource waits for some end condition within a RuntimeConfig
      # resource to be met before it returns. For example, assume you have a
      # distributed system where each node writes to a Variable resource indicating
      # the node&#x27;s readiness as part of the startup process.
      # 
      # You then configure a Waiter resource with the success condition set to wait
      # until some number of nodes have checked in. Afterwards, your application
      # runs some arbitrary code after the condition has been met and the waiter
      # returns successfully.
      # 
      # Once created, a Waiter resource is immutable.
      # 
      # To learn more about using waiters, read the
      # [Creating a
      # Waiter](/deployment-manager/runtime-configurator/creating-a-waiter)
      # documentation.
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # Output only. If the waiter ended due to a failure or timeout, this value
        # will be set.
        # 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;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;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &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;failure&quot;: { # The condition that a Waiter resource is waiting for. # [Optional] The failure condition of this waiter. If this condition is met,
        # `done` will be set to `true` and the `error` code will be set to `ABORTED`.
        # The failure condition takes precedence over the success condition. If both
        # conditions are met, a failure will be indicated. This value is optional; if
        # no failure condition is set, the only failure scenario will be a timeout.
      &quot;cardinality&quot;: { # A Cardinality condition for the Waiter resource. A cardinality condition is # The cardinality of the `EndCondition`.
          # met when the number of variables under a specified path prefix reaches a
          # predefined number. For example, if you set a Cardinality condition where
          # the `path` is set to `/foo` and the number of paths is set to `2`, the
          # following variables would meet the condition in a RuntimeConfig resource:
          #
          # + `/foo/variable1 = &quot;value1&quot;`
          # + `/foo/variable2 = &quot;value2&quot;`
          # + `/bar/variable3 = &quot;value3&quot;`
          #
          # It would not satisfy the same condition with the `number` set to
          # `3`, however, because there is only 2 paths that start with `/foo`.
          # Cardinality conditions are recursive; all subtrees under the specific
          # path prefix are counted.
        &quot;path&quot;: &quot;A String&quot;, # The root of the variable subtree to monitor. For example, `/foo`.
        &quot;number&quot;: 42, # The number variables under the `path` that must exist to meet this
            # condition. Defaults to 1 if not specified.
      },
    },
    &quot;success&quot;: { # The condition that a Waiter resource is waiting for. # [Required] The success condition. If this condition is met, `done` will be
        # set to `true` and the `error` value will remain unset. The failure
        # condition takes precedence over the success condition. If both conditions
        # are met, a failure will be indicated.
      &quot;cardinality&quot;: { # A Cardinality condition for the Waiter resource. A cardinality condition is # The cardinality of the `EndCondition`.
          # met when the number of variables under a specified path prefix reaches a
          # predefined number. For example, if you set a Cardinality condition where
          # the `path` is set to `/foo` and the number of paths is set to `2`, the
          # following variables would meet the condition in a RuntimeConfig resource:
          #
          # + `/foo/variable1 = &quot;value1&quot;`
          # + `/foo/variable2 = &quot;value2&quot;`
          # + `/bar/variable3 = &quot;value3&quot;`
          #
          # It would not satisfy the same condition with the `number` set to
          # `3`, however, because there is only 2 paths that start with `/foo`.
          # Cardinality conditions are recursive; all subtrees under the specific
          # path prefix are counted.
        &quot;path&quot;: &quot;A String&quot;, # The root of the variable subtree to monitor. For example, `/foo`.
        &quot;number&quot;: 42, # The number variables under the `path` that must exist to meet this
            # condition. Defaults to 1 if not specified.
      },
    },
    &quot;done&quot;: True or False, # Output only. If the value is `false`, it means the waiter is still waiting
        # for one of its conditions to be met.
        # 
        # If true, the waiter has finished. If the waiter finished due to a timeout
        # or failure, `error` will be set.
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. The instant at which this Waiter resource was created. Adding
        # the value of `timeout` to this instant yields the timeout deadline for the
        # waiter.
    &quot;timeout&quot;: &quot;A String&quot;, # [Required] Specifies the timeout of the waiter in seconds, beginning from
        # the instant that `waiters().create` method is called. If this time elapses
        # before the success or failure conditions are met, the waiter fails and sets
        # the `error` code to `DEADLINE_EXCEEDED`.
    &quot;name&quot;: &quot;A String&quot;, # The name of the Waiter resource, in the format:
        # 
        #     projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]
        # 
        # The `[PROJECT_ID]` must be a valid Google Cloud project ID,
        # the `[CONFIG_NAME]` must be a valid RuntimeConfig resource, the
        # `[WAITER_NAME]` must match RFC 1035 segment specification, and the length
        # of `[WAITER_NAME]` must be less than 64 bytes.
        # 
        # After you create a Waiter resource, you cannot change the resource name.
  }

  requestId: string, An optional but recommended unique `request_id`. If the server
receives two `create()` requests  with the same
`request_id`, then the second request will be ignored and the
first resource created and stored in the backend is returned.
Empty `request_id` fields are ignored.

It is responsibility of the client to ensure uniqueness of the
`request_id` strings.

`request_id` strings are limited to 64 characters.
  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;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;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;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.
    },
    &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;error&quot;: { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # 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;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;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &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.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes the waiter with the specified name.

Args:
  name: string, The Waiter resource to delete, in the format:

 `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets information about a single waiter.

Args:
  name: string, The fully-qualified name of the Waiter resource object to retrieve, in the
format:

`projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Waiter resource waits for some end condition within a RuntimeConfig
        # resource to be met before it returns. For example, assume you have a
        # distributed system where each node writes to a Variable resource indicating
        # the node&#x27;s readiness as part of the startup process.
        #
        # You then configure a Waiter resource with the success condition set to wait
        # until some number of nodes have checked in. Afterwards, your application
        # runs some arbitrary code after the condition has been met and the waiter
        # returns successfully.
        #
        # Once created, a Waiter resource is immutable.
        #
        # To learn more about using waiters, read the
        # [Creating a
        # Waiter](/deployment-manager/runtime-configurator/creating-a-waiter)
        # documentation.
      &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # Output only. If the waiter ended due to a failure or timeout, this value
          # will be set.
          # 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;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;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
        &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;failure&quot;: { # The condition that a Waiter resource is waiting for. # [Optional] The failure condition of this waiter. If this condition is met,
          # `done` will be set to `true` and the `error` code will be set to `ABORTED`.
          # The failure condition takes precedence over the success condition. If both
          # conditions are met, a failure will be indicated. This value is optional; if
          # no failure condition is set, the only failure scenario will be a timeout.
        &quot;cardinality&quot;: { # A Cardinality condition for the Waiter resource. A cardinality condition is # The cardinality of the `EndCondition`.
            # met when the number of variables under a specified path prefix reaches a
            # predefined number. For example, if you set a Cardinality condition where
            # the `path` is set to `/foo` and the number of paths is set to `2`, the
            # following variables would meet the condition in a RuntimeConfig resource:
            #
            # + `/foo/variable1 = &quot;value1&quot;`
            # + `/foo/variable2 = &quot;value2&quot;`
            # + `/bar/variable3 = &quot;value3&quot;`
            #
            # It would not satisfy the same condition with the `number` set to
            # `3`, however, because there is only 2 paths that start with `/foo`.
            # Cardinality conditions are recursive; all subtrees under the specific
            # path prefix are counted.
          &quot;path&quot;: &quot;A String&quot;, # The root of the variable subtree to monitor. For example, `/foo`.
          &quot;number&quot;: 42, # The number variables under the `path` that must exist to meet this
              # condition. Defaults to 1 if not specified.
        },
      },
      &quot;success&quot;: { # The condition that a Waiter resource is waiting for. # [Required] The success condition. If this condition is met, `done` will be
          # set to `true` and the `error` value will remain unset. The failure
          # condition takes precedence over the success condition. If both conditions
          # are met, a failure will be indicated.
        &quot;cardinality&quot;: { # A Cardinality condition for the Waiter resource. A cardinality condition is # The cardinality of the `EndCondition`.
            # met when the number of variables under a specified path prefix reaches a
            # predefined number. For example, if you set a Cardinality condition where
            # the `path` is set to `/foo` and the number of paths is set to `2`, the
            # following variables would meet the condition in a RuntimeConfig resource:
            #
            # + `/foo/variable1 = &quot;value1&quot;`
            # + `/foo/variable2 = &quot;value2&quot;`
            # + `/bar/variable3 = &quot;value3&quot;`
            #
            # It would not satisfy the same condition with the `number` set to
            # `3`, however, because there is only 2 paths that start with `/foo`.
            # Cardinality conditions are recursive; all subtrees under the specific
            # path prefix are counted.
          &quot;path&quot;: &quot;A String&quot;, # The root of the variable subtree to monitor. For example, `/foo`.
          &quot;number&quot;: 42, # The number variables under the `path` that must exist to meet this
              # condition. Defaults to 1 if not specified.
        },
      },
      &quot;done&quot;: True or False, # Output only. If the value is `false`, it means the waiter is still waiting
          # for one of its conditions to be met.
          #
          # If true, the waiter has finished. If the waiter finished due to a timeout
          # or failure, `error` will be set.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The instant at which this Waiter resource was created. Adding
          # the value of `timeout` to this instant yields the timeout deadline for the
          # waiter.
      &quot;timeout&quot;: &quot;A String&quot;, # [Required] Specifies the timeout of the waiter in seconds, beginning from
          # the instant that `waiters().create` method is called. If this time elapses
          # before the success or failure conditions are met, the waiter fails and sets
          # the `error` code to `DEADLINE_EXCEEDED`.
      &quot;name&quot;: &quot;A String&quot;, # The name of the Waiter resource, in the format:
          #
          #     projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]
          #
          # The `[PROJECT_ID]` must be a valid Google Cloud project ID,
          # the `[CONFIG_NAME]` must be a valid RuntimeConfig resource, the
          # `[WAITER_NAME]` must match RFC 1035 segment specification, and the length
          # of `[WAITER_NAME]` must be less than 64 bytes.
          #
          # After you create a Waiter resource, you cannot change the resource name.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>List waiters within the given configuration.

Args:
  parent: string, The path to the configuration for which you want to get a list of waiters.
The configuration must exist beforehand; the path must be in the format:

`projects/[PROJECT_ID]/configs/[CONFIG_NAME]` (required)
  pageToken: string, Specifies a page token to use. Set `pageToken` to a `nextPageToken`
returned by a previous list request to get the next page of results.
  pageSize: integer, Specifies the number of results to return per page. If there are fewer
elements than the specified number, returns all elements.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for the `ListWaiters()` method.
      # Order of returned waiter objects is arbitrary.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # This token allows you to get the next page of results for list requests.
        # If the number of results is larger than `pageSize`, 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;waiters&quot;: [ # Found waiters in the project.
      { # A Waiter resource waits for some end condition within a RuntimeConfig
            # resource to be met before it returns. For example, assume you have a
            # distributed system where each node writes to a Variable resource indicating
            # the node&#x27;s readiness as part of the startup process.
            #
            # You then configure a Waiter resource with the success condition set to wait
            # until some number of nodes have checked in. Afterwards, your application
            # runs some arbitrary code after the condition has been met and the waiter
            # returns successfully.
            #
            # Once created, a Waiter resource is immutable.
            #
            # To learn more about using waiters, read the
            # [Creating a
            # Waiter](/deployment-manager/runtime-configurator/creating-a-waiter)
            # documentation.
          &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # Output only. If the waiter ended due to a failure or timeout, this value
              # will be set.
              # 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;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;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
            &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;failure&quot;: { # The condition that a Waiter resource is waiting for. # [Optional] The failure condition of this waiter. If this condition is met,
              # `done` will be set to `true` and the `error` code will be set to `ABORTED`.
              # The failure condition takes precedence over the success condition. If both
              # conditions are met, a failure will be indicated. This value is optional; if
              # no failure condition is set, the only failure scenario will be a timeout.
            &quot;cardinality&quot;: { # A Cardinality condition for the Waiter resource. A cardinality condition is # The cardinality of the `EndCondition`.
                # met when the number of variables under a specified path prefix reaches a
                # predefined number. For example, if you set a Cardinality condition where
                # the `path` is set to `/foo` and the number of paths is set to `2`, the
                # following variables would meet the condition in a RuntimeConfig resource:
                #
                # + `/foo/variable1 = &quot;value1&quot;`
                # + `/foo/variable2 = &quot;value2&quot;`
                # + `/bar/variable3 = &quot;value3&quot;`
                #
                # It would not satisfy the same condition with the `number` set to
                # `3`, however, because there is only 2 paths that start with `/foo`.
                # Cardinality conditions are recursive; all subtrees under the specific
                # path prefix are counted.
              &quot;path&quot;: &quot;A String&quot;, # The root of the variable subtree to monitor. For example, `/foo`.
              &quot;number&quot;: 42, # The number variables under the `path` that must exist to meet this
                  # condition. Defaults to 1 if not specified.
            },
          },
          &quot;success&quot;: { # The condition that a Waiter resource is waiting for. # [Required] The success condition. If this condition is met, `done` will be
              # set to `true` and the `error` value will remain unset. The failure
              # condition takes precedence over the success condition. If both conditions
              # are met, a failure will be indicated.
            &quot;cardinality&quot;: { # A Cardinality condition for the Waiter resource. A cardinality condition is # The cardinality of the `EndCondition`.
                # met when the number of variables under a specified path prefix reaches a
                # predefined number. For example, if you set a Cardinality condition where
                # the `path` is set to `/foo` and the number of paths is set to `2`, the
                # following variables would meet the condition in a RuntimeConfig resource:
                #
                # + `/foo/variable1 = &quot;value1&quot;`
                # + `/foo/variable2 = &quot;value2&quot;`
                # + `/bar/variable3 = &quot;value3&quot;`
                #
                # It would not satisfy the same condition with the `number` set to
                # `3`, however, because there is only 2 paths that start with `/foo`.
                # Cardinality conditions are recursive; all subtrees under the specific
                # path prefix are counted.
              &quot;path&quot;: &quot;A String&quot;, # The root of the variable subtree to monitor. For example, `/foo`.
              &quot;number&quot;: 42, # The number variables under the `path` that must exist to meet this
                  # condition. Defaults to 1 if not specified.
            },
          },
          &quot;done&quot;: True or False, # Output only. If the value is `false`, it means the waiter is still waiting
              # for one of its conditions to be met.
              #
              # If true, the waiter has finished. If the waiter finished due to a timeout
              # or failure, `error` will be set.
          &quot;createTime&quot;: &quot;A String&quot;, # Output only. The instant at which this Waiter resource was created. Adding
              # the value of `timeout` to this instant yields the timeout deadline for the
              # waiter.
          &quot;timeout&quot;: &quot;A String&quot;, # [Required] Specifies the timeout of the waiter in seconds, beginning from
              # the instant that `waiters().create` method is called. If this time elapses
              # before the success or failure conditions are met, the waiter fails and sets
              # the `error` code to `DEADLINE_EXCEEDED`.
          &quot;name&quot;: &quot;A String&quot;, # The name of the Waiter resource, in the format:
              #
              #     projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]
              #
              # The `[PROJECT_ID]` must be a valid Google Cloud project ID,
              # the `[CONFIG_NAME]` must be a valid RuntimeConfig resource, the
              # `[WAITER_NAME]` must match RFC 1035 segment specification, and the length
              # of `[WAITER_NAME]` must be less than 64 bytes.
              #
              # After you create a Waiter resource, you cannot change the resource name.
        },
    ],
  }</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="testIamPermissions">testIamPermissions(resource, body=None, x__xgafv=None)</code>
  <pre>Returns permissions that a caller has on the specified resource.
If the resource does not exist, this will return an empty set of
permissions, not a `NOT_FOUND` error.

Note: This operation is designed to be used for building permission-aware
UIs and command-line tools, not for authorization checking. This operation
may &quot;fail open&quot; without warning.

Args:
  resource: string, REQUIRED: The resource for which the policy detail is being requested.
See the operation documentation for the appropriate value for this field. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for `TestIamPermissions` method.
    &quot;permissions&quot;: [ # The set of permissions to check for the `resource`. Permissions with
        # wildcards (such as &#x27;*&#x27; or &#x27;storage.*&#x27;) are not allowed. For more
        # information see
        # [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).
      &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:

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

</body></html>