<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="saasservicemgmt_v1beta1.html">SaaS Runtime API</a> . <a href="saasservicemgmt_v1beta1.projects.html">projects</a> . <a href="saasservicemgmt_v1beta1.projects.locations.html">locations</a> . <a href="saasservicemgmt_v1beta1.projects.locations.releases.html">releases</a></h1>
<h2>Instance Methods</h2>
<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, releaseId=None, requestId=None, validateOnly=None, x__xgafv=None)</a></code></p>
<p class="firstline">Create a new release.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, etag=None, requestId=None, validateOnly=None, x__xgafv=None)</a></code></p>
<p class="firstline">Delete a single release.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieve a single release.</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">Retrieve a collection of releases.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</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, requestId=None, updateMask=None, validateOnly=None, x__xgafv=None)</a></code></p>
<p class="firstline">Update a single release.</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, releaseId=None, requestId=None, validateOnly=None, x__xgafv=None)</code>
  <pre>Create a new release.

Args:
  parent: string, Required. The parent of the release. (required)
  body: object, The request body.
    The object takes the form of:

{ # A new version to be propagated and deployed to units. This includes pointers to packaged blueprints for actuation (e.g Helm or Terraform configuration packages) via artifact registry.
  &quot;annotations&quot;: { # Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;blueprint&quot;: { # Blueprints are OCI Images that contain all of the artifacts needed to provision a unit. Metadata such as, type of the engine used to actuate the blueprint (e.g. terraform, helm etc) and version will come from the image manifest. If the hostname is omitted, it will be assumed to be the regional path to Artifact Registry (eg. us-east1-docker.pkg.dev). # Optional. Blueprints are OCI Images that contain all of the artifacts needed to provision a unit.
    &quot;engine&quot;: &quot;A String&quot;, # Output only. Type of the engine used to actuate the blueprint. e.g. terraform, helm etc.
    &quot;package&quot;: &quot;A String&quot;, # Optional. Immutable. URI to a blueprint used by the Unit (required unless unitKind or release is set).
    &quot;version&quot;: &quot;A String&quot;, # Output only. Version metadata if present on the blueprint.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the resource was created.
  &quot;etag&quot;: &quot;A String&quot;, # Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.
  &quot;inputVariableDefaults&quot;: [ # Optional. Mapping of input variables to default values. Maximum 100
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;inputVariables&quot;: [ # Optional. Output only. List of input variables declared on the blueprint and can be present with their values on the unit spec
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;labels&quot;: { # Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Identifier. The resource name (full URI of the resource) following the standard naming scheme: &quot;projects/{project}/locations/{location}/releases/{release}&quot;
  &quot;outputVariables&quot;: [ # Optional. Output only. List of output variables declared on the blueprint and can be present with their values on the unit status
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;releaseRequirements&quot;: { # Set of requirements to be fulfilled on the Unit when using this Release. # Optional. Set of requirements to be fulfilled on the Unit when using this Release.
    &quot;upgradeableFromReleases&quot;: [ # Optional. A list of releases from which a unit can be upgraded to this one (optional). If left empty no constraints will be applied. When provided, unit upgrade requests to this release will check and enforce this constraint.
      &quot;A String&quot;,
    ],
  },
  &quot;uid&quot;: &quot;A String&quot;, # Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.
  &quot;unitKind&quot;: &quot;A String&quot;, # Required. Immutable. Reference to the UnitKind this Release corresponds to (required and immutable once created).
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.
}

  releaseId: string, Required. The ID value for the new release.
  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).
  validateOnly: boolean, If &quot;validate_only&quot; is set to true, the service will try to validate that this request would succeed, but will not actually make changes.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A new version to be propagated and deployed to units. This includes pointers to packaged blueprints for actuation (e.g Helm or Terraform configuration packages) via artifact registry.
  &quot;annotations&quot;: { # Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;blueprint&quot;: { # Blueprints are OCI Images that contain all of the artifacts needed to provision a unit. Metadata such as, type of the engine used to actuate the blueprint (e.g. terraform, helm etc) and version will come from the image manifest. If the hostname is omitted, it will be assumed to be the regional path to Artifact Registry (eg. us-east1-docker.pkg.dev). # Optional. Blueprints are OCI Images that contain all of the artifacts needed to provision a unit.
    &quot;engine&quot;: &quot;A String&quot;, # Output only. Type of the engine used to actuate the blueprint. e.g. terraform, helm etc.
    &quot;package&quot;: &quot;A String&quot;, # Optional. Immutable. URI to a blueprint used by the Unit (required unless unitKind or release is set).
    &quot;version&quot;: &quot;A String&quot;, # Output only. Version metadata if present on the blueprint.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the resource was created.
  &quot;etag&quot;: &quot;A String&quot;, # Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.
  &quot;inputVariableDefaults&quot;: [ # Optional. Mapping of input variables to default values. Maximum 100
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;inputVariables&quot;: [ # Optional. Output only. List of input variables declared on the blueprint and can be present with their values on the unit spec
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;labels&quot;: { # Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Identifier. The resource name (full URI of the resource) following the standard naming scheme: &quot;projects/{project}/locations/{location}/releases/{release}&quot;
  &quot;outputVariables&quot;: [ # Optional. Output only. List of output variables declared on the blueprint and can be present with their values on the unit status
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;releaseRequirements&quot;: { # Set of requirements to be fulfilled on the Unit when using this Release. # Optional. Set of requirements to be fulfilled on the Unit when using this Release.
    &quot;upgradeableFromReleases&quot;: [ # Optional. A list of releases from which a unit can be upgraded to this one (optional). If left empty no constraints will be applied. When provided, unit upgrade requests to this release will check and enforce this constraint.
      &quot;A String&quot;,
    ],
  },
  &quot;uid&quot;: &quot;A String&quot;, # Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.
  &quot;unitKind&quot;: &quot;A String&quot;, # Required. Immutable. Reference to the UnitKind this Release corresponds to (required and immutable once created).
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, etag=None, requestId=None, validateOnly=None, x__xgafv=None)</code>
  <pre>Delete a single release.

Args:
  name: string, Required. The resource name of the resource within a service. (required)
  etag: string, The etag known to the client for the expected state of the release. This is used with state-changing methods to prevent accidental overwrites when multiple user agents might be acting in parallel on the same resource. An etag wildcard provide optimistic concurrency based on the expected existence of the release. The Any wildcard (`*`) requires that the resource must already exists, and the Not Any wildcard (`!*`) requires that it must not.
  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).
  validateOnly: boolean, If &quot;validate_only&quot; is set to true, the service will try to validate that this request would succeed, but will not actually make changes.
  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); }
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Retrieve a single release.

Args:
  name: string, Required. The resource name of the resource within a service. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A new version to be propagated and deployed to units. This includes pointers to packaged blueprints for actuation (e.g Helm or Terraform configuration packages) via artifact registry.
  &quot;annotations&quot;: { # Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;blueprint&quot;: { # Blueprints are OCI Images that contain all of the artifacts needed to provision a unit. Metadata such as, type of the engine used to actuate the blueprint (e.g. terraform, helm etc) and version will come from the image manifest. If the hostname is omitted, it will be assumed to be the regional path to Artifact Registry (eg. us-east1-docker.pkg.dev). # Optional. Blueprints are OCI Images that contain all of the artifacts needed to provision a unit.
    &quot;engine&quot;: &quot;A String&quot;, # Output only. Type of the engine used to actuate the blueprint. e.g. terraform, helm etc.
    &quot;package&quot;: &quot;A String&quot;, # Optional. Immutable. URI to a blueprint used by the Unit (required unless unitKind or release is set).
    &quot;version&quot;: &quot;A String&quot;, # Output only. Version metadata if present on the blueprint.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the resource was created.
  &quot;etag&quot;: &quot;A String&quot;, # Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.
  &quot;inputVariableDefaults&quot;: [ # Optional. Mapping of input variables to default values. Maximum 100
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;inputVariables&quot;: [ # Optional. Output only. List of input variables declared on the blueprint and can be present with their values on the unit spec
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;labels&quot;: { # Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Identifier. The resource name (full URI of the resource) following the standard naming scheme: &quot;projects/{project}/locations/{location}/releases/{release}&quot;
  &quot;outputVariables&quot;: [ # Optional. Output only. List of output variables declared on the blueprint and can be present with their values on the unit status
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;releaseRequirements&quot;: { # Set of requirements to be fulfilled on the Unit when using this Release. # Optional. Set of requirements to be fulfilled on the Unit when using this Release.
    &quot;upgradeableFromReleases&quot;: [ # Optional. A list of releases from which a unit can be upgraded to this one (optional). If left empty no constraints will be applied. When provided, unit upgrade requests to this release will check and enforce this constraint.
      &quot;A String&quot;,
    ],
  },
  &quot;uid&quot;: &quot;A String&quot;, # Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.
  &quot;unitKind&quot;: &quot;A String&quot;, # Required. Immutable. Reference to the UnitKind this Release corresponds to (required and immutable once created).
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.
}</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>Retrieve a collection of releases.

Args:
  parent: string, Required. The parent of the release. (required)
  filter: string, Filter the list as specified in https://google.aip.dev/160.
  orderBy: string, Order results as specified in https://google.aip.dev/132.
  pageSize: integer, The maximum number of releases to send per page.
  pageToken: string, The page token: If the next_page_token from a previous response is provided, this request will send the subsequent page.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response structure for the ListReleases method.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # If present, the next page token can be provided to a subsequent ListReleases call to list the next page. If empty, there are no more pages.
  &quot;releases&quot;: [ # The resulting releases.
    { # A new version to be propagated and deployed to units. This includes pointers to packaged blueprints for actuation (e.g Helm or Terraform configuration packages) via artifact registry.
      &quot;annotations&quot;: { # Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;blueprint&quot;: { # Blueprints are OCI Images that contain all of the artifacts needed to provision a unit. Metadata such as, type of the engine used to actuate the blueprint (e.g. terraform, helm etc) and version will come from the image manifest. If the hostname is omitted, it will be assumed to be the regional path to Artifact Registry (eg. us-east1-docker.pkg.dev). # Optional. Blueprints are OCI Images that contain all of the artifacts needed to provision a unit.
        &quot;engine&quot;: &quot;A String&quot;, # Output only. Type of the engine used to actuate the blueprint. e.g. terraform, helm etc.
        &quot;package&quot;: &quot;A String&quot;, # Optional. Immutable. URI to a blueprint used by the Unit (required unless unitKind or release is set).
        &quot;version&quot;: &quot;A String&quot;, # Output only. Version metadata if present on the blueprint.
      },
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the resource was created.
      &quot;etag&quot;: &quot;A String&quot;, # Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.
      &quot;inputVariableDefaults&quot;: [ # Optional. Mapping of input variables to default values. Maximum 100
        { # UnitVariable describes a parameter for a Unit.
          &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
          &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
          &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
        },
      ],
      &quot;inputVariables&quot;: [ # Optional. Output only. List of input variables declared on the blueprint and can be present with their values on the unit spec
        { # UnitVariable describes a parameter for a Unit.
          &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
          &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
          &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
        },
      ],
      &quot;labels&quot;: { # Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;name&quot;: &quot;A String&quot;, # Identifier. The resource name (full URI of the resource) following the standard naming scheme: &quot;projects/{project}/locations/{location}/releases/{release}&quot;
      &quot;outputVariables&quot;: [ # Optional. Output only. List of output variables declared on the blueprint and can be present with their values on the unit status
        { # UnitVariable describes a parameter for a Unit.
          &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
          &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
          &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
        },
      ],
      &quot;releaseRequirements&quot;: { # Set of requirements to be fulfilled on the Unit when using this Release. # Optional. Set of requirements to be fulfilled on the Unit when using this Release.
        &quot;upgradeableFromReleases&quot;: [ # Optional. A list of releases from which a unit can be upgraded to this one (optional). If left empty no constraints will be applied. When provided, unit upgrade requests to this release will check and enforce this constraint.
          &quot;A String&quot;,
        ],
      },
      &quot;uid&quot;: &quot;A String&quot;, # Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.
      &quot;unitKind&quot;: &quot;A String&quot;, # Required. Immutable. Reference to the UnitKind this Release corresponds to (required and immutable once created).
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.
    },
  ],
  &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()</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, requestId=None, updateMask=None, validateOnly=None, x__xgafv=None)</code>
  <pre>Update a single release.

Args:
  name: string, Identifier. The resource name (full URI of the resource) following the standard naming scheme: &quot;projects/{project}/locations/{location}/releases/{release}&quot; (required)
  body: object, The request body.
    The object takes the form of:

{ # A new version to be propagated and deployed to units. This includes pointers to packaged blueprints for actuation (e.g Helm or Terraform configuration packages) via artifact registry.
  &quot;annotations&quot;: { # Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;blueprint&quot;: { # Blueprints are OCI Images that contain all of the artifacts needed to provision a unit. Metadata such as, type of the engine used to actuate the blueprint (e.g. terraform, helm etc) and version will come from the image manifest. If the hostname is omitted, it will be assumed to be the regional path to Artifact Registry (eg. us-east1-docker.pkg.dev). # Optional. Blueprints are OCI Images that contain all of the artifacts needed to provision a unit.
    &quot;engine&quot;: &quot;A String&quot;, # Output only. Type of the engine used to actuate the blueprint. e.g. terraform, helm etc.
    &quot;package&quot;: &quot;A String&quot;, # Optional. Immutable. URI to a blueprint used by the Unit (required unless unitKind or release is set).
    &quot;version&quot;: &quot;A String&quot;, # Output only. Version metadata if present on the blueprint.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the resource was created.
  &quot;etag&quot;: &quot;A String&quot;, # Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.
  &quot;inputVariableDefaults&quot;: [ # Optional. Mapping of input variables to default values. Maximum 100
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;inputVariables&quot;: [ # Optional. Output only. List of input variables declared on the blueprint and can be present with their values on the unit spec
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;labels&quot;: { # Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Identifier. The resource name (full URI of the resource) following the standard naming scheme: &quot;projects/{project}/locations/{location}/releases/{release}&quot;
  &quot;outputVariables&quot;: [ # Optional. Output only. List of output variables declared on the blueprint and can be present with their values on the unit status
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;releaseRequirements&quot;: { # Set of requirements to be fulfilled on the Unit when using this Release. # Optional. Set of requirements to be fulfilled on the Unit when using this Release.
    &quot;upgradeableFromReleases&quot;: [ # Optional. A list of releases from which a unit can be upgraded to this one (optional). If left empty no constraints will be applied. When provided, unit upgrade requests to this release will check and enforce this constraint.
      &quot;A String&quot;,
    ],
  },
  &quot;uid&quot;: &quot;A String&quot;, # Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.
  &quot;unitKind&quot;: &quot;A String&quot;, # Required. Immutable. Reference to the UnitKind this Release corresponds to (required and immutable once created).
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.
}

  requestId: string, An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. The server will guarantee that for at least 60 minutes since the first request. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported (00000000-0000-0000-0000-000000000000).
  updateMask: string, Field mask is used to specify the fields to be overwritten in the Release resource by the update. The fields specified in the update_mask are relative to the resource, not the full request. A field will be overwritten if it is in the mask. If the user does not provide a mask then all fields in the Release will be overwritten.
  validateOnly: boolean, If &quot;validate_only&quot; is set to true, the service will try to validate that this request would succeed, but will not actually make changes.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A new version to be propagated and deployed to units. This includes pointers to packaged blueprints for actuation (e.g Helm or Terraform configuration packages) via artifact registry.
  &quot;annotations&quot;: { # Optional. Annotations is an unstructured key-value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: https://kubernetes.io/docs/user-guide/annotations
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;blueprint&quot;: { # Blueprints are OCI Images that contain all of the artifacts needed to provision a unit. Metadata such as, type of the engine used to actuate the blueprint (e.g. terraform, helm etc) and version will come from the image manifest. If the hostname is omitted, it will be assumed to be the regional path to Artifact Registry (eg. us-east1-docker.pkg.dev). # Optional. Blueprints are OCI Images that contain all of the artifacts needed to provision a unit.
    &quot;engine&quot;: &quot;A String&quot;, # Output only. Type of the engine used to actuate the blueprint. e.g. terraform, helm etc.
    &quot;package&quot;: &quot;A String&quot;, # Optional. Immutable. URI to a blueprint used by the Unit (required unless unitKind or release is set).
    &quot;version&quot;: &quot;A String&quot;, # Output only. Version metadata if present on the blueprint.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the resource was created.
  &quot;etag&quot;: &quot;A String&quot;, # Output only. An opaque value that uniquely identifies a version or generation of a resource. It can be used to confirm that the client and server agree on the ordering of a resource being written.
  &quot;inputVariableDefaults&quot;: [ # Optional. Mapping of input variables to default values. Maximum 100
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;inputVariables&quot;: [ # Optional. Output only. List of input variables declared on the blueprint and can be present with their values on the unit spec
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;labels&quot;: { # Optional. The labels on the resource, which can be used for categorization. similar to Kubernetes resource labels.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Identifier. The resource name (full URI of the resource) following the standard naming scheme: &quot;projects/{project}/locations/{location}/releases/{release}&quot;
  &quot;outputVariables&quot;: [ # Optional. Output only. List of output variables declared on the blueprint and can be present with their values on the unit status
    { # UnitVariable describes a parameter for a Unit.
      &quot;type&quot;: &quot;A String&quot;, # Optional. Immutable. Name of a supported variable type. Supported types are string, int, bool.
      &quot;value&quot;: &quot;A String&quot;, # Optional. String encoded value for the variable.
      &quot;variable&quot;: &quot;A String&quot;, # Required. Immutable. Name of the variable from actuation configs.
    },
  ],
  &quot;releaseRequirements&quot;: { # Set of requirements to be fulfilled on the Unit when using this Release. # Optional. Set of requirements to be fulfilled on the Unit when using this Release.
    &quot;upgradeableFromReleases&quot;: [ # Optional. A list of releases from which a unit can be upgraded to this one (optional). If left empty no constraints will be applied. When provided, unit upgrade requests to this release will check and enforce this constraint.
      &quot;A String&quot;,
    ],
  },
  &quot;uid&quot;: &quot;A String&quot;, # Output only. The unique identifier of the resource. UID is unique in the time and space for this resource within the scope of the service. It is typically generated by the server on successful creation of a resource and must not be changed. UID is used to uniquely identify resources with resource name reuses. This should be a UUID4.
  &quot;unitKind&quot;: &quot;A String&quot;, # Required. Immutable. Reference to the UnitKind this Release corresponds to (required and immutable once created).
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The timestamp when the resource was last updated. Any change to the resource made by users must refresh this value. Changes to a resource made by the service should refresh this value.
}</pre>
</div>

</body></html>