<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="servicemanagement_v1.html">Service Management API</a> . <a href="servicemanagement_v1.services.html">services</a> . <a href="servicemanagement_v1.services.rollouts.html">rollouts</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(serviceName, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new service configuration rollout. Based on rollout, the Google Service Management will roll out the service configurations to different backend services. For example, the logging configuration will be pushed to Google Cloud Logging. Please note that any previous pending and running Rollouts and associated Operations will be automatically cancelled so that the latest Rollout will not be blocked by previous Rollouts. Only the 100 most recent (in any state) and the last 10 successful (if not already part of the set of 100 most recent) rollouts are kept for each service. The rest will be deleted eventually. Operation</p>
<p class="toc_element">
  <code><a href="#get">get(serviceName, rolloutId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a service configuration rollout.</p>
<p class="toc_element">
  <code><a href="#list">list(serviceName, filter=None, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the history of the service configuration rollouts for a managed service, from the newest to the oldest.</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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(serviceName, body=None, x__xgafv=None)</code>
  <pre>Creates a new service configuration rollout. Based on rollout, the Google Service Management will roll out the service configurations to different backend services. For example, the logging configuration will be pushed to Google Cloud Logging. Please note that any previous pending and running Rollouts and associated Operations will be automatically cancelled so that the latest Rollout will not be blocked by previous Rollouts. Only the 100 most recent (in any state) and the last 10 successful (if not already part of the set of 100 most recent) rollouts are kept for each service. The rest will be deleted eventually. Operation

Args:
  serviceName: string, Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A rollout resource that defines how service configuration versions are pushed to control plane systems. Typically, you create a new version of the service config, and then create a Rollout to push the service config.
    &quot;rolloutId&quot;: &quot;A String&quot;, # Optional. Unique identifier of this Rollout. Must be no longer than 63 characters and only lower case letters, digits, &#x27;.&#x27;, &#x27;_&#x27; and &#x27;-&#x27; are allowed. If not specified by client, the server will generate one. The generated id will have the form of , where &quot;date&quot; is the create date in ISO 8601 format. &quot;revision number&quot; is a monotonically increasing positive number that is reset every day for each service. An example of the generated rollout_id is &#x27;2016-02-16r1&#x27;
    &quot;createdBy&quot;: &quot;A String&quot;, # This field is deprecated and will be deleted. Please remove usage of this field.
    &quot;trafficPercentStrategy&quot;: { # Strategy that specifies how clients of Google Service Controller want to send traffic to use different config versions. This is generally used by API proxy to split traffic based on your configured percentage for each config version. One example of how to gradually rollout a new service configuration using this strategy: Day 1 Rollout { id: &quot;example.googleapis.com/rollout_20160206&quot; traffic_percent_strategy { percentages: { &quot;example.googleapis.com/20160201&quot;: 70.00 &quot;example.googleapis.com/20160206&quot;: 30.00 } } } Day 2 Rollout { id: &quot;example.googleapis.com/rollout_20160207&quot; traffic_percent_strategy: { percentages: { &quot;example.googleapis.com/20160206&quot;: 100.00 } } } # Google Service Control selects service configurations based on traffic percentage.
      &quot;percentages&quot;: { # Maps service configuration IDs to their corresponding traffic percentage. Key is the service configuration ID, Value is the traffic percentage which must be greater than 0.0 and the sum must equal to 100.0.
        &quot;a_key&quot;: 3.14,
      },
    },
    &quot;status&quot;: &quot;A String&quot;, # The status of this rollout. Readonly. In case of a failed rollout, the system will automatically rollback to the current Rollout version. Readonly.
    &quot;deleteServiceStrategy&quot;: { # Strategy used to delete a service. This strategy is a placeholder only used by the system generated rollout to delete a service. # The strategy associated with a rollout to delete a `ManagedService`. Readonly.
    },
    &quot;createTime&quot;: &quot;A String&quot;, # Creation time of the rollout. Readonly.
    &quot;serviceName&quot;: &quot;A String&quot;, # The name of the service associated with this Rollout.
  }

  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;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;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.
    },
    &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;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.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(serviceName, rolloutId, x__xgafv=None)</code>
  <pre>Gets a service configuration rollout.

Args:
  serviceName: string, Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`. (required)
  rolloutId: string, Required. The id of the rollout resource. (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 that defines how service configuration versions are pushed to control plane systems. Typically, you create a new version of the service config, and then create a Rollout to push the service config.
      &quot;rolloutId&quot;: &quot;A String&quot;, # Optional. Unique identifier of this Rollout. Must be no longer than 63 characters and only lower case letters, digits, &#x27;.&#x27;, &#x27;_&#x27; and &#x27;-&#x27; are allowed. If not specified by client, the server will generate one. The generated id will have the form of , where &quot;date&quot; is the create date in ISO 8601 format. &quot;revision number&quot; is a monotonically increasing positive number that is reset every day for each service. An example of the generated rollout_id is &#x27;2016-02-16r1&#x27;
      &quot;createdBy&quot;: &quot;A String&quot;, # This field is deprecated and will be deleted. Please remove usage of this field.
      &quot;trafficPercentStrategy&quot;: { # Strategy that specifies how clients of Google Service Controller want to send traffic to use different config versions. This is generally used by API proxy to split traffic based on your configured percentage for each config version. One example of how to gradually rollout a new service configuration using this strategy: Day 1 Rollout { id: &quot;example.googleapis.com/rollout_20160206&quot; traffic_percent_strategy { percentages: { &quot;example.googleapis.com/20160201&quot;: 70.00 &quot;example.googleapis.com/20160206&quot;: 30.00 } } } Day 2 Rollout { id: &quot;example.googleapis.com/rollout_20160207&quot; traffic_percent_strategy: { percentages: { &quot;example.googleapis.com/20160206&quot;: 100.00 } } } # Google Service Control selects service configurations based on traffic percentage.
        &quot;percentages&quot;: { # Maps service configuration IDs to their corresponding traffic percentage. Key is the service configuration ID, Value is the traffic percentage which must be greater than 0.0 and the sum must equal to 100.0.
          &quot;a_key&quot;: 3.14,
        },
      },
      &quot;status&quot;: &quot;A String&quot;, # The status of this rollout. Readonly. In case of a failed rollout, the system will automatically rollback to the current Rollout version. Readonly.
      &quot;deleteServiceStrategy&quot;: { # Strategy used to delete a service. This strategy is a placeholder only used by the system generated rollout to delete a service. # The strategy associated with a rollout to delete a `ManagedService`. Readonly.
      },
      &quot;createTime&quot;: &quot;A String&quot;, # Creation time of the rollout. Readonly.
      &quot;serviceName&quot;: &quot;A String&quot;, # The name of the service associated with this Rollout.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(serviceName, filter=None, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists the history of the service configuration rollouts for a managed service, from the newest to the oldest.

Args:
  serviceName: string, Required. The name of the service. See the [overview](/service-management/overview) for naming requirements. For example: `example.googleapis.com`. (required)
  filter: string, Required. Use `filter` to return subset of rollouts. The following filters are supported: -- To limit the results to only those in [status](google.api.servicemanagement.v1.RolloutStatus) &#x27;SUCCESS&#x27;, use filter=&#x27;status=SUCCESS&#x27; -- To limit the results to those in [status](google.api.servicemanagement.v1.RolloutStatus) &#x27;CANCELLED&#x27; or &#x27;FAILED&#x27;, use filter=&#x27;status=CANCELLED OR status=FAILED&#x27;
  pageToken: string, The token of the page to retrieve.
  pageSize: integer, The max number of items to include in the response list. Page size is 50 if not specified. Maximum value is 100.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for ListServiceRollouts method.
    &quot;rollouts&quot;: [ # The list of rollout resources.
      { # A rollout resource that defines how service configuration versions are pushed to control plane systems. Typically, you create a new version of the service config, and then create a Rollout to push the service config.
          &quot;rolloutId&quot;: &quot;A String&quot;, # Optional. Unique identifier of this Rollout. Must be no longer than 63 characters and only lower case letters, digits, &#x27;.&#x27;, &#x27;_&#x27; and &#x27;-&#x27; are allowed. If not specified by client, the server will generate one. The generated id will have the form of , where &quot;date&quot; is the create date in ISO 8601 format. &quot;revision number&quot; is a monotonically increasing positive number that is reset every day for each service. An example of the generated rollout_id is &#x27;2016-02-16r1&#x27;
          &quot;createdBy&quot;: &quot;A String&quot;, # This field is deprecated and will be deleted. Please remove usage of this field.
          &quot;trafficPercentStrategy&quot;: { # Strategy that specifies how clients of Google Service Controller want to send traffic to use different config versions. This is generally used by API proxy to split traffic based on your configured percentage for each config version. One example of how to gradually rollout a new service configuration using this strategy: Day 1 Rollout { id: &quot;example.googleapis.com/rollout_20160206&quot; traffic_percent_strategy { percentages: { &quot;example.googleapis.com/20160201&quot;: 70.00 &quot;example.googleapis.com/20160206&quot;: 30.00 } } } Day 2 Rollout { id: &quot;example.googleapis.com/rollout_20160207&quot; traffic_percent_strategy: { percentages: { &quot;example.googleapis.com/20160206&quot;: 100.00 } } } # Google Service Control selects service configurations based on traffic percentage.
            &quot;percentages&quot;: { # Maps service configuration IDs to their corresponding traffic percentage. Key is the service configuration ID, Value is the traffic percentage which must be greater than 0.0 and the sum must equal to 100.0.
              &quot;a_key&quot;: 3.14,
            },
          },
          &quot;status&quot;: &quot;A String&quot;, # The status of this rollout. Readonly. In case of a failed rollout, the system will automatically rollback to the current Rollout version. Readonly.
          &quot;deleteServiceStrategy&quot;: { # Strategy used to delete a service. This strategy is a placeholder only used by the system generated rollout to delete a service. # The strategy associated with a rollout to delete a `ManagedService`. Readonly.
          },
          &quot;createTime&quot;: &quot;A String&quot;, # Creation time of the rollout. Readonly.
          &quot;serviceName&quot;: &quot;A String&quot;, # The name of the service associated with this Rollout.
        },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The token of the next page of results.
  }</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>