<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="clouddeploy_v1.html">Google Cloud Deploy API</a> . <a href="clouddeploy_v1.projects.html">projects</a> . <a href="clouddeploy_v1.projects.locations.html">locations</a> . <a href="clouddeploy_v1.projects.locations.deliveryPipelines.html">deliveryPipelines</a> . <a href="clouddeploy_v1.projects.locations.deliveryPipelines.releases.html">releases</a> . <a href="clouddeploy_v1.projects.locations.deliveryPipelines.releases.rollouts.html">rollouts</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#approve">approve(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Approves a Rollout.</p>
<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, requestId=None, rolloutId=None, validateOnly=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new Rollout in a given project and location.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets details of a single Rollout.</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">Lists Rollouts in a given project and location.</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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="approve">approve(name, body=None, x__xgafv=None)</code>
  <pre>Approves a Rollout.

Args:
  name: string, Required. Name of the Rollout. Format is projects/{project}/locations/{location}/deliveryPipelines/{deliveryPipeline}/ releases/{release}/rollouts/{rollout}. (required)
  body: object, The request body.
    The object takes the form of:

{ # The request object used by `ApproveRollout`.
  &quot;approved&quot;: True or False, # Required. True = approve; false = reject
}

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

Returns:
  An object of the form:

    { # The response object from `ApproveRollout`.
}</pre>
</div>

<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, requestId=None, rolloutId=None, validateOnly=None, x__xgafv=None)</code>
  <pre>Creates a new Rollout in a given project and location.

Args:
  parent: string, Required. The parent collection in which the `Rollout` should be created. Format should be projects/{project_id}/locations/{location_name}/deliveryPipelines/{pipeline_name}/releases/{release_name}. (required)
  body: object, The request body.
    The object takes the form of:

{ # A `Rollout` resource in the Google Cloud Deploy API. A `Rollout` contains information around a specific deployment to a `Target`.
  &quot;annotations&quot;: { # User annotations. These attributes can only be set and used by the user, and not by Google Cloud Deploy. See https://google.aip.dev/128#annotations for more details such as format and size limitations.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;approvalState&quot;: &quot;A String&quot;, # Output only. Approval state of the `Rollout`.
  &quot;approveTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` was approved.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` was created.
  &quot;deployEndTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` finished deploying.
  &quot;deployFailureCause&quot;: &quot;A String&quot;, # Output only. The reason this deploy failed. This will always be unspecified while the deploy in progress.
  &quot;deployStartTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` started deploying.
  &quot;deployingBuild&quot;: &quot;A String&quot;, # Output only. The resource name of the Cloud Build `Build` object that is used to deploy the Rollout. Format is `projects/{project}/locations/{location}/builds/{build}`.
  &quot;description&quot;: &quot;A String&quot;, # Description of the `Rollout` for user purposes. Max length is 255 characters.
  &quot;enqueueTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` was enqueued.
  &quot;etag&quot;: &quot;A String&quot;, # This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding.
  &quot;failureReason&quot;: &quot;A String&quot;, # Output only. Reason the build failed. Empty if the build succeeded.
  &quot;labels&quot;: { # Labels are attributes that can be set and used by both the user and by Google Cloud Deploy. Labels must meet the following constraints: * Keys and values can contain only lowercase letters, numeric characters, underscores, and dashes. * All characters must use UTF-8 encoding, and international characters are allowed. * Keys must start with a lowercase letter or international character. * Each resource is limited to a maximum of 64 labels. Both keys and values are additionally constrained to be &lt;= 128 bytes.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Optional. Name of the `Rollout`. Format is projects/{project}/ locations/{location}/deliveryPipelines/{deliveryPipeline}/ releases/{release}/rollouts/a-z{0,62}.
  &quot;state&quot;: &quot;A String&quot;, # Output only. Current state of the `Rollout`.
  &quot;targetId&quot;: &quot;A String&quot;, # Required. The ID of Target to which this `Rollout` is deploying.
  &quot;uid&quot;: &quot;A String&quot;, # Output only. Unique identifier of the `Rollout`.
}

  requestId: string, Optional. A 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).
  rolloutId: string, Required. ID of the `Rollout`.
  validateOnly: boolean, Optional. If set to true, the request is validated and the user is provided with an expected result, but no actual change is made.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

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

Args:
  name: string, Required. Name of the `Rollout`. Format must be projects/{project_id}/locations/{location_name}/deliveryPipelines/{pipeline_name}/releases/{release_name}/rollouts/{rollout_name}. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A `Rollout` resource in the Google Cloud Deploy API. A `Rollout` contains information around a specific deployment to a `Target`.
  &quot;annotations&quot;: { # User annotations. These attributes can only be set and used by the user, and not by Google Cloud Deploy. See https://google.aip.dev/128#annotations for more details such as format and size limitations.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;approvalState&quot;: &quot;A String&quot;, # Output only. Approval state of the `Rollout`.
  &quot;approveTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` was approved.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` was created.
  &quot;deployEndTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` finished deploying.
  &quot;deployFailureCause&quot;: &quot;A String&quot;, # Output only. The reason this deploy failed. This will always be unspecified while the deploy in progress.
  &quot;deployStartTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` started deploying.
  &quot;deployingBuild&quot;: &quot;A String&quot;, # Output only. The resource name of the Cloud Build `Build` object that is used to deploy the Rollout. Format is `projects/{project}/locations/{location}/builds/{build}`.
  &quot;description&quot;: &quot;A String&quot;, # Description of the `Rollout` for user purposes. Max length is 255 characters.
  &quot;enqueueTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` was enqueued.
  &quot;etag&quot;: &quot;A String&quot;, # This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding.
  &quot;failureReason&quot;: &quot;A String&quot;, # Output only. Reason the build failed. Empty if the build succeeded.
  &quot;labels&quot;: { # Labels are attributes that can be set and used by both the user and by Google Cloud Deploy. Labels must meet the following constraints: * Keys and values can contain only lowercase letters, numeric characters, underscores, and dashes. * All characters must use UTF-8 encoding, and international characters are allowed. * Keys must start with a lowercase letter or international character. * Each resource is limited to a maximum of 64 labels. Both keys and values are additionally constrained to be &lt;= 128 bytes.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Optional. Name of the `Rollout`. Format is projects/{project}/ locations/{location}/deliveryPipelines/{deliveryPipeline}/ releases/{release}/rollouts/a-z{0,62}.
  &quot;state&quot;: &quot;A String&quot;, # Output only. Current state of the `Rollout`.
  &quot;targetId&quot;: &quot;A String&quot;, # Required. The ID of Target to which this `Rollout` is deploying.
  &quot;uid&quot;: &quot;A String&quot;, # Output only. Unique identifier of the `Rollout`.
}</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>Lists Rollouts in a given project and location.

Args:
  parent: string, Required. The `Release` which owns this collection of `Rollout` objects. (required)
  filter: string, Optional. Filter builds to be returned. See https://google.aip.dev/160 for more details.
  orderBy: string, Optional. Field to sort by. See https://google.aip.dev/132#ordering for more details.
  pageSize: integer, Optional. The maximum number of `Rollout` objects to return. The service may return fewer than this value. If unspecified, at most 50 `Rollout` objects will be returned. The maximum value is 1000; values above 1000 will be set to 1000.
  pageToken: string, Optional. A page token, received from a previous `ListRollouts` call. Provide this to retrieve the subsequent page. When paginating, all other provided parameters match the call that provided the page token.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # ListRolloutsResponse is the response object reutrned by `ListRollouts`.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.
  &quot;rollouts&quot;: [ # The `Rollout` objects.
    { # A `Rollout` resource in the Google Cloud Deploy API. A `Rollout` contains information around a specific deployment to a `Target`.
      &quot;annotations&quot;: { # User annotations. These attributes can only be set and used by the user, and not by Google Cloud Deploy. See https://google.aip.dev/128#annotations for more details such as format and size limitations.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;approvalState&quot;: &quot;A String&quot;, # Output only. Approval state of the `Rollout`.
      &quot;approveTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` was approved.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` was created.
      &quot;deployEndTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` finished deploying.
      &quot;deployFailureCause&quot;: &quot;A String&quot;, # Output only. The reason this deploy failed. This will always be unspecified while the deploy in progress.
      &quot;deployStartTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` started deploying.
      &quot;deployingBuild&quot;: &quot;A String&quot;, # Output only. The resource name of the Cloud Build `Build` object that is used to deploy the Rollout. Format is `projects/{project}/locations/{location}/builds/{build}`.
      &quot;description&quot;: &quot;A String&quot;, # Description of the `Rollout` for user purposes. Max length is 255 characters.
      &quot;enqueueTime&quot;: &quot;A String&quot;, # Output only. Time at which the `Rollout` was enqueued.
      &quot;etag&quot;: &quot;A String&quot;, # This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding.
      &quot;failureReason&quot;: &quot;A String&quot;, # Output only. Reason the build failed. Empty if the build succeeded.
      &quot;labels&quot;: { # Labels are attributes that can be set and used by both the user and by Google Cloud Deploy. Labels must meet the following constraints: * Keys and values can contain only lowercase letters, numeric characters, underscores, and dashes. * All characters must use UTF-8 encoding, and international characters are allowed. * Keys must start with a lowercase letter or international character. * Each resource is limited to a maximum of 64 labels. Both keys and values are additionally constrained to be &lt;= 128 bytes.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;name&quot;: &quot;A String&quot;, # Optional. Name of the `Rollout`. Format is projects/{project}/ locations/{location}/deliveryPipelines/{deliveryPipeline}/ releases/{release}/rollouts/a-z{0,62}.
      &quot;state&quot;: &quot;A String&quot;, # Output only. Current state of the `Rollout`.
      &quot;targetId&quot;: &quot;A String&quot;, # Required. The ID of Target to which this `Rollout` is deploying.
      &quot;uid&quot;: &quot;A String&quot;, # Output only. Unique identifier of the `Rollout`.
    },
  ],
  &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(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>