<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></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="runtimeconfig_v1beta1.projects.configs.operations.html">operations()</a></code>
</p>
<p class="firstline">Returns the operations Resource.</p>

<p class="toc_element">
  <code><a href="runtimeconfig_v1beta1.projects.configs.variables.html">variables()</a></code>
</p>
<p class="firstline">Returns the variables Resource.</p>

<p class="toc_element">
  <code><a href="runtimeconfig_v1beta1.projects.configs.waiters.html">waiters()</a></code>
</p>
<p class="firstline">Returns the waiters Resource.</p>

<p class="toc_element">
  <code><a href="#create">create(parent=None, body, x__xgafv=None)</a></code></p>
<p class="firstline">CreateConfig creates a new config resource object.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the config object.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the config resource object.</p>
<p class="toc_element">
  <code><a href="#list">list(parent=None, pageToken=None, x__xgafv=None, pageSize=None)</a></code></p>
<p class="firstline">Lists all the config objects within project.</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 the config resource object.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent=None, body, x__xgafv=None)</code>
  <pre>CreateConfig creates a new config resource object.
The configuration name must be unique within project.

Args:
  parent: string, The cloud project to which configuration belongs.
Required. Must be a valid GCP project. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # RuntimeConfig is the primary resource in the Configuration service.
      # It consists of metadata and a hierarchy of variables.
    "description": "A String", # Description of the configuration object.
        # `len(description)` must be less than 256.
    "name": "A String", # The resource name of a runtime config.
        # It has the format of "projects/{project_id}/configs/{config_id}",
        # where `project_id` is a valid Google cloud project ID, and the
        # `config_id` must match RFC 1035 segment specification, and
        # `len(config_id)` must be less than 64 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:

    { # RuntimeConfig is the primary resource in the Configuration service.
        # It consists of metadata and a hierarchy of variables.
      "description": "A String", # Description of the configuration object.
          # `len(description)` must be less than 256.
      "name": "A String", # The resource name of a runtime config.
          # It has the format of "projects/{project_id}/configs/{config_id}",
          # where `project_id` is a valid Google cloud project ID, and the
          # `config_id` must match RFC 1035 segment specification, and
          # `len(config_id)` must be less than 64 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=None, x__xgafv=None)</code>
  <pre>Deletes the config object.

Args:
  name: string, The configuration resource object to delete.
Required. Must be a valid GCP project. (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 the config resource object.

Args:
  name: string, The name of the RuntimeConfig resource object to retrieve. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # RuntimeConfig is the primary resource in the Configuration service.
        # It consists of metadata and a hierarchy of variables.
      "description": "A String", # Description of the configuration object.
          # `len(description)` must be less than 256.
      "name": "A String", # The resource name of a runtime config.
          # It has the format of "projects/{project_id}/configs/{config_id}",
          # where `project_id` is a valid Google cloud project ID, and the
          # `config_id` must match RFC 1035 segment specification, and
          # `len(config_id)` must be less than 64 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=None, pageToken=None, x__xgafv=None, pageSize=None)</code>
  <pre>Lists all the config objects within project.

Args:
  parent: string, The cloud project, whose configuration resources we want to list.
Required. Must be a valid GCP project. (required)
  pageToken: string, The token for pagination.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  pageSize: integer, List pagination support.
The size of the page to return. We may return fewer elements.

Returns:
  An object of the form:

    { # Response for the `ListConfigs()` method.
      # Order of returned configuration objects is arbitrary.
    "nextPageToken": "A String", # Pagination support.
    "configs": [ # Found configurations in the project.
      { # RuntimeConfig is the primary resource in the Configuration service.
            # It consists of metadata and a hierarchy of variables.
          "description": "A String", # Description of the configuration object.
              # `len(description)` must be less than 256.
          "name": "A String", # The resource name of a runtime config.
              # It has the format of "projects/{project_id}/configs/{config_id}",
              # where `project_id` is a valid Google cloud project ID, and the
              # `config_id` must match RFC 1035 segment specification, and
              # `len(config_id)` must be less than 64 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 the config resource object.
RuntimeConfig object must already exist.

Args:
  name: string, The name of the config resource to update.
Required. Must be a valid config resource. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # RuntimeConfig is the primary resource in the Configuration service.
      # It consists of metadata and a hierarchy of variables.
    "description": "A String", # Description of the configuration object.
        # `len(description)` must be less than 256.
    "name": "A String", # The resource name of a runtime config.
        # It has the format of "projects/{project_id}/configs/{config_id}",
        # where `project_id` is a valid Google cloud project ID, and the
        # `config_id` must match RFC 1035 segment specification, and
        # `len(config_id)` must be less than 64 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:

    { # RuntimeConfig is the primary resource in the Configuration service.
        # It consists of metadata and a hierarchy of variables.
      "description": "A String", # Description of the configuration object.
          # `len(description)` must be less than 256.
      "name": "A String", # The resource name of a runtime config.
          # It has the format of "projects/{project_id}/configs/{config_id}",
          # where `project_id` is a valid Google cloud project ID, and the
          # `config_id` must match RFC 1035 segment specification, and
          # `len(config_id)` must be less than 64 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>