<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">Google 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.variables.html">variables</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body, requestId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a variable within the given configuration. You cannot create</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, recursive=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a variable or multiple variables.</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 variable.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, returnValues=None, filter=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists variables within given a configuration, matching any provided filters.</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, x__xgafv=None)</a></code></p>
<p class="firstline">Returns permissions that a caller has on the specified resource.</p>
<p class="toc_element">
  <code><a href="#update">update(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing variable with a new value.</p>
<p class="toc_element">
  <code><a href="#watch">watch(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Watches a specific variable and waits for a change in the variable's value.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body, requestId=None, x__xgafv=None)</code>
  <pre>Creates a variable within the given configuration. You cannot create
a variable with a name that is a prefix of an existing variable name, or a
name that has an existing variable name as a prefix.

To learn more about creating a variable, read the
[Setting and Getting Data](/deployment-manager/runtime-configurator/set-and-get-variables)
documentation.

Args:
  parent: string, The path to the RutimeConfig resource that this variable should belong to.
The configuration must exist beforehand; the path must by in the format:

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

{ # Describes a single variable within a RuntimeConfig resource.
    # The name denotes the hierarchical variable name. For example,
    # `ports/serving_port` is a valid variable name. The variable value is an
    # opaque string and only leaf variables can have values (that is, variables
    # that do not have any child variables).
  "text": "A String", # The string value of the variable. The length of the value must be less
      # than 4096 bytes. Empty values are also accepted. For example,
      # `text: "my text value"`. The string must be valid UTF-8.
  "updateTime": "A String", # [Output Only] The time of the last variable update.
  "state": "A String", # [Ouput only] The current state of the variable. The variable state indicates
      # the outcome of the `variables().watch` call and is visible through the
      # `get` and `list` calls.
  "value": "A String", # The binary value of the variable. The length of the value must be less
      # than 4096 bytes. Empty values are also accepted. The value must be
      # base64 encoded. Only one of `value` or `text` can be set.
  "name": "A String", # The name of the variable resource, in the format:
      # 
      #     projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]
      # 
      # The `[PROJECT_ID]` must be a valid project ID, `[CONFIG_NAME]` must be a
      # valid RuntimeConfig reource and `[VARIABLE_NAME]` follows Unix file system
      # file path naming.
      # 
      # The `[VARIABLE_NAME]` can contain ASCII letters, numbers, slashes and
      # dashes. Slashes are used as path element separators and are not part of the
      # `[VARIABLE_NAME]` itself, so `[VARIABLE_NAME]` must contain at least one
      # non-slash character. Multiple slashes are coalesced into single slash
      # character. Each path segment should follow RFC 1035 segment specification.
      # The length of a `[VARIABLE_NAME]` must be less than 256 bytes.
      # 
      # Once you create a variable, you cannot change the variable 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:

    { # Describes a single variable within a RuntimeConfig resource.
      # The name denotes the hierarchical variable name. For example,
      # `ports/serving_port` is a valid variable name. The variable value is an
      # opaque string and only leaf variables can have values (that is, variables
      # that do not have any child variables).
    "text": "A String", # The string value of the variable. The length of the value must be less
        # than 4096 bytes. Empty values are also accepted. For example,
        # `text: "my text value"`. The string must be valid UTF-8.
    "updateTime": "A String", # [Output Only] The time of the last variable update.
    "state": "A String", # [Ouput only] The current state of the variable. The variable state indicates
        # the outcome of the `variables().watch` call and is visible through the
        # `get` and `list` calls.
    "value": "A String", # The binary value of the variable. The length of the value must be less
        # than 4096 bytes. Empty values are also accepted. The value must be
        # base64 encoded. Only one of `value` or `text` can be set.
    "name": "A String", # The name of the variable resource, in the format:
        #
        #     projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]
        #
        # The `[PROJECT_ID]` must be a valid project ID, `[CONFIG_NAME]` must be a
        # valid RuntimeConfig reource and `[VARIABLE_NAME]` follows Unix file system
        # file path naming.
        #
        # The `[VARIABLE_NAME]` can contain ASCII letters, numbers, slashes and
        # dashes. Slashes are used as path element separators and are not part of the
        # `[VARIABLE_NAME]` itself, so `[VARIABLE_NAME]` must contain at least one
        # non-slash character. Multiple slashes are coalesced into single slash
        # character. Each path segment should follow RFC 1035 segment specification.
        # The length of a `[VARIABLE_NAME]` must be less than 256 bytes.
        #
        # Once you create a variable, you cannot change the variable name.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, recursive=None, x__xgafv=None)</code>
  <pre>Deletes a variable or multiple variables.

If you specify a variable name, then that variable is deleted. If you
specify a prefix and `recursive` is true, then all variables with that
prefix are deleted. You must set a `recursive` to true if you delete
variables by prefix.

Args:
  name: string, The name of the variable to delete, in the format:

`projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]` (required)
  recursive: boolean, Set to `true` to recursively delete multiple variables with the same
prefix.
  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 variable.

Args:
  name: string, The name of the variable to return, in the format:

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

Returns:
  An object of the form:

    { # Describes a single variable within a RuntimeConfig resource.
      # The name denotes the hierarchical variable name. For example,
      # `ports/serving_port` is a valid variable name. The variable value is an
      # opaque string and only leaf variables can have values (that is, variables
      # that do not have any child variables).
    "text": "A String", # The string value of the variable. The length of the value must be less
        # than 4096 bytes. Empty values are also accepted. For example,
        # `text: "my text value"`. The string must be valid UTF-8.
    "updateTime": "A String", # [Output Only] The time of the last variable update.
    "state": "A String", # [Ouput only] The current state of the variable. The variable state indicates
        # the outcome of the `variables().watch` call and is visible through the
        # `get` and `list` calls.
    "value": "A String", # The binary value of the variable. The length of the value must be less
        # than 4096 bytes. Empty values are also accepted. The value must be
        # base64 encoded. Only one of `value` or `text` can be set.
    "name": "A String", # The name of the variable resource, in the format:
        #
        #     projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]
        #
        # The `[PROJECT_ID]` must be a valid project ID, `[CONFIG_NAME]` must be a
        # valid RuntimeConfig reource and `[VARIABLE_NAME]` follows Unix file system
        # file path naming.
        #
        # The `[VARIABLE_NAME]` can contain ASCII letters, numbers, slashes and
        # dashes. Slashes are used as path element separators and are not part of the
        # `[VARIABLE_NAME]` itself, so `[VARIABLE_NAME]` must contain at least one
        # non-slash character. Multiple slashes are coalesced into single slash
        # character. Each path segment should follow RFC 1035 segment specification.
        # The length of a `[VARIABLE_NAME]` must be less than 256 bytes.
        #
        # Once you create a variable, you cannot change the variable name.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, returnValues=None, filter=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists variables within given a configuration, matching any provided filters.
This only lists variable names, not the values, unless `return_values` is
true, in which case only variables that user has IAM permission to GetVariable
will be returned.

Args:
  parent: string, The path to the RuntimeConfig resource for which you want to list variables.
The configuration must exist beforehand; the path must by in the format:

`projects/[PROJECT_ID]/configs/[CONFIG_NAME]` (required)
  pageSize: integer, Specifies the number of results to return per page. If there are fewer
elements than the specified number, returns all elements.
  returnValues: boolean, The flag indicates whether the user wants to return values of variables.
If true, then only those variables that user has IAM GetVariable permission
will be returned along with their values.
  filter: string, Filters variables by matching the specified filter. For example:

`projects/example-project/config/[CONFIG_NAME]/variables/example-variable`.
  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.
  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 `ListVariables()` method.
    "nextPageToken": "A String", # 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
    "variables": [ # A list of variables and their values. The order of returned variable
        # objects is arbitrary.
      { # Describes a single variable within a RuntimeConfig resource.
          # The name denotes the hierarchical variable name. For example,
          # `ports/serving_port` is a valid variable name. The variable value is an
          # opaque string and only leaf variables can have values (that is, variables
          # that do not have any child variables).
        "text": "A String", # The string value of the variable. The length of the value must be less
            # than 4096 bytes. Empty values are also accepted. For example,
            # `text: "my text value"`. The string must be valid UTF-8.
        "updateTime": "A String", # [Output Only] The time of the last variable update.
        "state": "A String", # [Ouput only] The current state of the variable. The variable state indicates
            # the outcome of the `variables().watch` call and is visible through the
            # `get` and `list` calls.
        "value": "A String", # The binary value of the variable. The length of the value must be less
            # than 4096 bytes. Empty values are also accepted. The value must be
            # base64 encoded. Only one of `value` or `text` can be set.
        "name": "A String", # The name of the variable resource, in the format:
            #
            #     projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]
            #
            # The `[PROJECT_ID]` must be a valid project ID, `[CONFIG_NAME]` must be a
            # valid RuntimeConfig reource and `[VARIABLE_NAME]` follows Unix file system
            # file path naming.
            #
            # The `[VARIABLE_NAME]` can contain ASCII letters, numbers, slashes and
            # dashes. Slashes are used as path element separators and are not part of the
            # `[VARIABLE_NAME]` itself, so `[VARIABLE_NAME]` must contain at least one
            # non-slash character. Multiple slashes are coalesced into single slash
            # character. Each path segment should follow RFC 1035 segment specification.
            # The length of a `[VARIABLE_NAME]` must be less than 256 bytes.
            #
            # Once you create a variable, you cannot change the variable 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 'execute()' 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, 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 "fail open" 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. (required)
    The object takes the form of:

{ # Request message for `TestIamPermissions` method.
    "permissions": [ # The set of permissions to check for the `resource`. Permissions with
        # wildcards (such as '*' or 'storage.*') are not allowed. For more
        # information see
        # [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).
      "A String",
    ],
  }

  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.
    "permissions": [ # A subset of `TestPermissionsRequest.permissions` that the caller is
        # allowed.
      "A String",
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(name, body, x__xgafv=None)</code>
  <pre>Updates an existing variable with a new value.

Args:
  name: string, The name of the variable to update, in the format:

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

{ # Describes a single variable within a RuntimeConfig resource.
    # The name denotes the hierarchical variable name. For example,
    # `ports/serving_port` is a valid variable name. The variable value is an
    # opaque string and only leaf variables can have values (that is, variables
    # that do not have any child variables).
  "text": "A String", # The string value of the variable. The length of the value must be less
      # than 4096 bytes. Empty values are also accepted. For example,
      # `text: "my text value"`. The string must be valid UTF-8.
  "updateTime": "A String", # [Output Only] The time of the last variable update.
  "state": "A String", # [Ouput only] The current state of the variable. The variable state indicates
      # the outcome of the `variables().watch` call and is visible through the
      # `get` and `list` calls.
  "value": "A String", # The binary value of the variable. The length of the value must be less
      # than 4096 bytes. Empty values are also accepted. The value must be
      # base64 encoded. Only one of `value` or `text` can be set.
  "name": "A String", # The name of the variable resource, in the format:
      # 
      #     projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]
      # 
      # The `[PROJECT_ID]` must be a valid project ID, `[CONFIG_NAME]` must be a
      # valid RuntimeConfig reource and `[VARIABLE_NAME]` follows Unix file system
      # file path naming.
      # 
      # The `[VARIABLE_NAME]` can contain ASCII letters, numbers, slashes and
      # dashes. Slashes are used as path element separators and are not part of the
      # `[VARIABLE_NAME]` itself, so `[VARIABLE_NAME]` must contain at least one
      # non-slash character. Multiple slashes are coalesced into single slash
      # character. Each path segment should follow RFC 1035 segment specification.
      # The length of a `[VARIABLE_NAME]` must be less than 256 bytes.
      # 
      # Once you create a variable, you cannot change the variable name.
}

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

Returns:
  An object of the form:

    { # Describes a single variable within a RuntimeConfig resource.
      # The name denotes the hierarchical variable name. For example,
      # `ports/serving_port` is a valid variable name. The variable value is an
      # opaque string and only leaf variables can have values (that is, variables
      # that do not have any child variables).
    "text": "A String", # The string value of the variable. The length of the value must be less
        # than 4096 bytes. Empty values are also accepted. For example,
        # `text: "my text value"`. The string must be valid UTF-8.
    "updateTime": "A String", # [Output Only] The time of the last variable update.
    "state": "A String", # [Ouput only] The current state of the variable. The variable state indicates
        # the outcome of the `variables().watch` call and is visible through the
        # `get` and `list` calls.
    "value": "A String", # The binary value of the variable. The length of the value must be less
        # than 4096 bytes. Empty values are also accepted. The value must be
        # base64 encoded. Only one of `value` or `text` can be set.
    "name": "A String", # The name of the variable resource, in the format:
        #
        #     projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]
        #
        # The `[PROJECT_ID]` must be a valid project ID, `[CONFIG_NAME]` must be a
        # valid RuntimeConfig reource and `[VARIABLE_NAME]` follows Unix file system
        # file path naming.
        #
        # The `[VARIABLE_NAME]` can contain ASCII letters, numbers, slashes and
        # dashes. Slashes are used as path element separators and are not part of the
        # `[VARIABLE_NAME]` itself, so `[VARIABLE_NAME]` must contain at least one
        # non-slash character. Multiple slashes are coalesced into single slash
        # character. Each path segment should follow RFC 1035 segment specification.
        # The length of a `[VARIABLE_NAME]` must be less than 256 bytes.
        #
        # Once you create a variable, you cannot change the variable name.
  }</pre>
</div>

<div class="method">
    <code class="details" id="watch">watch(name, body, x__xgafv=None)</code>
  <pre>Watches a specific variable and waits for a change in the variable's value.
When there is a change, this method returns the new value or times out.

If a variable is deleted while being watched, the `variableState` state is
set to `DELETED` and the method returns the last known variable `value`.

If you set the deadline for watching to a larger value than internal timeout
(60 seconds), the current variable value is returned and the `variableState`
will be `VARIABLE_STATE_UNSPECIFIED`.

To learn more about creating a watcher, read the
[Watching a Variable for Changes](/deployment-manager/runtime-configurator/watching-a-variable)
documentation.

Args:
  name: string, The name of the variable to watch, in the format:

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

{ # Request for the `WatchVariable()` method.
    "newerThan": "A String", # If specified, checks the current timestamp of the variable and if the
        # current timestamp is newer than `newerThan` timestamp, the method returns
        # immediately.
        # 
        # If not specified or the variable has an older timestamp, the watcher waits
        # for a the value to change before returning.
  }

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

Returns:
  An object of the form:

    { # Describes a single variable within a RuntimeConfig resource.
      # The name denotes the hierarchical variable name. For example,
      # `ports/serving_port` is a valid variable name. The variable value is an
      # opaque string and only leaf variables can have values (that is, variables
      # that do not have any child variables).
    "text": "A String", # The string value of the variable. The length of the value must be less
        # than 4096 bytes. Empty values are also accepted. For example,
        # `text: "my text value"`. The string must be valid UTF-8.
    "updateTime": "A String", # [Output Only] The time of the last variable update.
    "state": "A String", # [Ouput only] The current state of the variable. The variable state indicates
        # the outcome of the `variables().watch` call and is visible through the
        # `get` and `list` calls.
    "value": "A String", # The binary value of the variable. The length of the value must be less
        # than 4096 bytes. Empty values are also accepted. The value must be
        # base64 encoded. Only one of `value` or `text` can be set.
    "name": "A String", # The name of the variable resource, in the format:
        #
        #     projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]
        #
        # The `[PROJECT_ID]` must be a valid project ID, `[CONFIG_NAME]` must be a
        # valid RuntimeConfig reource and `[VARIABLE_NAME]` follows Unix file system
        # file path naming.
        #
        # The `[VARIABLE_NAME]` can contain ASCII letters, numbers, slashes and
        # dashes. Slashes are used as path element separators and are not part of the
        # `[VARIABLE_NAME]` itself, so `[VARIABLE_NAME]` must contain at least one
        # non-slash character. Multiple slashes are coalesced into single slash
        # character. Each path segment should follow RFC 1035 segment specification.
        # The length of a `[VARIABLE_NAME]` must be less than 256 bytes.
        #
        # Once you create a variable, you cannot change the variable name.
  }</pre>
</div>

</body></html>