<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 RuntimeConfig 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=None, body, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a variable within the given configuration.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, recursive=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes variable or variables.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the variable resource object.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists variables within given RuntimeConfig object, matching optionally</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="#update">update(name=None, 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">WatchVariable watches for a variable to change and then returns the new</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent=None, body, x__xgafv=None)</code>
  <pre>Creates a variable within the given configuration.
Create variable will create all required intermediate path elements.
It is a FAILED_PRECONDITION error to create a variable with a name that is
a prefix of an existing variable name, or that has an existing variable
name as a prefix.

Args:
  parent: string, The configuration parent, that will own the variable.
Required, must a valid configuration name within project_id. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Variable message describes a single variable within a Configuration object.
    # name denotes the hierarchical variable name, e.g.
    # ports/serving_port within flags configuration object.
    # Value is an opaque string and only leaf variables can have values.
  "updateTime": "A String", # [Output Only] The time of the last variable update.
  "state": "A String", # [Ouput only] The current state of the variable.
      # State denotes the outcome of the Watch call and is unset by the Get/List
      # calls.
  "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
      # value must be Base64 encoded.
  "name": "A String", # Name of the variable resource.
      # It has format of
      # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
      # Where `project_id` must be a valid Google Cloud project ID, `config_id`
      # must be a valid RuntimeConfig object and `variable_id` follows Unix
      # file system file path naming.
      # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
      # Slashes are used as path element separators and are not part of the
      # `variable_id` itself, so `variable_id` 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.
      # `len(variable_id)` must be less than 256 bytes.
      # The name is assigned by the client, but will be validated on the server
      # side to adhere to the format.
      # Name is immutable and cannot be changed.
}

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

Returns:
  An object of the form:

    { # Variable message describes a single variable within a Configuration object.
      # name denotes the hierarchical variable name, e.g.
      # ports/serving_port within flags configuration object.
      # Value is an opaque string and only leaf variables can have values.
    "updateTime": "A String", # [Output Only] The time of the last variable update.
    "state": "A String", # [Ouput only] The current state of the variable.
        # State denotes the outcome of the Watch call and is unset by the Get/List
        # calls.
    "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
        # value must be Base64 encoded.
    "name": "A String", # Name of the variable resource.
        # It has format of
        # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
        # Where `project_id` must be a valid Google Cloud project ID, `config_id`
        # must be a valid RuntimeConfig object and `variable_id` follows Unix
        # file system file path naming.
        # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
        # Slashes are used as path element separators and are not part of the
        # `variable_id` itself, so `variable_id` 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.
        # `len(variable_id)` must be less than 256 bytes.
        # The name is assigned by the client, but will be validated on the server
        # side to adhere to the format.
        # Name is immutable and cannot be changed.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, recursive=None, x__xgafv=None)</code>
  <pre>Deletes variable or variables.
If name denotes a variable, that variable is deleted. If name is a prefix
and recursive is true, then all variables with that prefix are deleted,
it's a FAILED_PRECONDITION to delete a prefix without recursive being true.

Args:
  name: string, The name of the variable to delete. (required)
  recursive: boolean, If recursive is false and name is a prefix of other variables, then
the request will fail.
  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 the variable resource object.

Args:
  name: string, What variable to return. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Variable message describes a single variable within a Configuration object.
      # name denotes the hierarchical variable name, e.g.
      # ports/serving_port within flags configuration object.
      # Value is an opaque string and only leaf variables can have values.
    "updateTime": "A String", # [Output Only] The time of the last variable update.
    "state": "A String", # [Ouput only] The current state of the variable.
        # State denotes the outcome of the Watch call and is unset by the Get/List
        # calls.
    "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
        # value must be Base64 encoded.
    "name": "A String", # Name of the variable resource.
        # It has format of
        # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
        # Where `project_id` must be a valid Google Cloud project ID, `config_id`
        # must be a valid RuntimeConfig object and `variable_id` follows Unix
        # file system file path naming.
        # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
        # Slashes are used as path element separators and are not part of the
        # `variable_id` itself, so `variable_id` 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.
        # `len(variable_id)` must be less than 256 bytes.
        # The name is assigned by the client, but will be validated on the server
        # side to adhere to the format.
        # Name is immutable and cannot be changed.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists variables within given RuntimeConfig object, matching optionally
provided filter.
List contains only variable metadata, but not values.

Args:
  parent: string, Which RuntimeConfig object to list for variables. (required)
  pageSize: integer, List pagination support.
The size of the page to return. We may return fewer elements.
  filter: string, List only variables matching filter prefix exactly.
e.g. `projects/{project_id}/config/{config_id}/variables/{variable/id}`.
  pageToken: string, The token for pagination.
  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.
      # Order of returned variable objects is arbitrary.
    "nextPageToken": "A String", # Pagination support.
    "variables": [ # Matched variables and their values.
      { # Variable message describes a single variable within a Configuration object.
          # name denotes the hierarchical variable name, e.g.
          # ports/serving_port within flags configuration object.
          # Value is an opaque string and only leaf variables can have values.
        "updateTime": "A String", # [Output Only] The time of the last variable update.
        "state": "A String", # [Ouput only] The current state of the variable.
            # State denotes the outcome of the Watch call and is unset by the Get/List
            # calls.
        "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
            # value must be Base64 encoded.
        "name": "A String", # Name of the variable resource.
            # It has format of
            # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
            # Where `project_id` must be a valid Google Cloud project ID, `config_id`
            # must be a valid RuntimeConfig object and `variable_id` follows Unix
            # file system file path naming.
            # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
            # Slashes are used as path element separators and are not part of the
            # `variable_id` itself, so `variable_id` 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.
            # `len(variable_id)` must be less than 256 bytes.
            # The name is assigned by the client, but will be validated on the server
            # side to adhere to the format.
            # Name is immutable and cannot be changed.
      },
    ],
  }</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="update">update(name=None, 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 of:
"projects/{project_id}/configs/{config_id}/variables/{variable_id}" (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Variable message describes a single variable within a Configuration object.
    # name denotes the hierarchical variable name, e.g.
    # ports/serving_port within flags configuration object.
    # Value is an opaque string and only leaf variables can have values.
  "updateTime": "A String", # [Output Only] The time of the last variable update.
  "state": "A String", # [Ouput only] The current state of the variable.
      # State denotes the outcome of the Watch call and is unset by the Get/List
      # calls.
  "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
      # value must be Base64 encoded.
  "name": "A String", # Name of the variable resource.
      # It has format of
      # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
      # Where `project_id` must be a valid Google Cloud project ID, `config_id`
      # must be a valid RuntimeConfig object and `variable_id` follows Unix
      # file system file path naming.
      # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
      # Slashes are used as path element separators and are not part of the
      # `variable_id` itself, so `variable_id` 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.
      # `len(variable_id)` must be less than 256 bytes.
      # The name is assigned by the client, but will be validated on the server
      # side to adhere to the format.
      # Name is immutable and cannot be changed.
}

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

Returns:
  An object of the form:

    { # Variable message describes a single variable within a Configuration object.
      # name denotes the hierarchical variable name, e.g.
      # ports/serving_port within flags configuration object.
      # Value is an opaque string and only leaf variables can have values.
    "updateTime": "A String", # [Output Only] The time of the last variable update.
    "state": "A String", # [Ouput only] The current state of the variable.
        # State denotes the outcome of the Watch call and is unset by the Get/List
        # calls.
    "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
        # value must be Base64 encoded.
    "name": "A String", # Name of the variable resource.
        # It has format of
        # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
        # Where `project_id` must be a valid Google Cloud project ID, `config_id`
        # must be a valid RuntimeConfig object and `variable_id` follows Unix
        # file system file path naming.
        # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
        # Slashes are used as path element separators and are not part of the
        # `variable_id` itself, so `variable_id` 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.
        # `len(variable_id)` must be less than 256 bytes.
        # The name is assigned by the client, but will be validated on the server
        # side to adhere to the format.
        # Name is immutable and cannot be changed.
  }</pre>
</div>

<div class="method">
    <code class="details" id="watch">watch(name, body, x__xgafv=None)</code>
  <pre>WatchVariable watches for a variable to change and then returns the new
value or times out.
If variable is deleted while being watched, VariableState will be DELETED
and the Value will contain the last known value.
If the operation deadline is set to a larger value than internal timeout
existing, current variable value will be returned and Variable state will
be VARIABLE_STATE_UNSPECIFIED.

Args:
  name: string, The name of the variable to retrieve. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request for the `WatchVariable()` method.
    "newerThan": "A String", # If backend has a variable that has a newer value than this timestamp, then
        # request will return immediately with current value.
        # If not specified or variable has an older timestamp, will wait for the new
        # value.
  }

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

Returns:
  An object of the form:

    { # Variable message describes a single variable within a Configuration object.
      # name denotes the hierarchical variable name, e.g.
      # ports/serving_port within flags configuration object.
      # Value is an opaque string and only leaf variables can have values.
    "updateTime": "A String", # [Output Only] The time of the last variable update.
    "state": "A String", # [Ouput only] The current state of the variable.
        # State denotes the outcome of the Watch call and is unset by the Get/List
        # calls.
    "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
        # value must be Base64 encoded.
    "name": "A String", # Name of the variable resource.
        # It has format of
        # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
        # Where `project_id` must be a valid Google Cloud project ID, `config_id`
        # must be a valid RuntimeConfig object and `variable_id` follows Unix
        # file system file path naming.
        # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
        # Slashes are used as path element separators and are not part of the
        # `variable_id` itself, so `variable_id` 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.
        # `len(variable_id)` must be less than 256 bytes.
        # The name is assigned by the client, but will be validated on the server
        # side to adhere to the format.
        # Name is immutable and cannot be changed.
  }</pre>
</div>

</body></html>