<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="#create">create(serviceName, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new service configuration rollout. Based on rollout, the</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, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the history of the service configuration rollouts for a managed</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="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&lt;response: Rollout&gt;

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;serviceName&quot;: &quot;A String&quot;, # The name of the service associated with this Rollout.
  &quot;createdBy&quot;: &quot;A String&quot;, # This field is deprecated and will be deleted. Please remove usage of
      # this field.
  &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 &lt;date&gt;&lt;revision number&gt;, 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;createTime&quot;: &quot;A String&quot;, # Creation time of the rollout. Readonly.
  &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 # The strategy associated with a rollout to delete a `ManagedService`.
      # Readonly.
      # used by the system generated rollout to delete a service.
  },
  &quot;trafficPercentStrategy&quot;: { # Strategy that specifies how clients of Google Service Controller want to # Google Service Control selects service configurations based on
      # traffic percentage.
      # 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
      #         }
      #       }
      #     }
    &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,
    },
  },
}

  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 # The error result of the operation in case of failure or cancellation.
        # 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).
      &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;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &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;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;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}`.
  }</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;serviceName&quot;: &quot;A String&quot;, # The name of the service associated with this Rollout.
    &quot;createdBy&quot;: &quot;A String&quot;, # This field is deprecated and will be deleted. Please remove usage of
        # this field.
    &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 &lt;date&gt;&lt;revision number&gt;, 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;createTime&quot;: &quot;A String&quot;, # Creation time of the rollout. Readonly.
    &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 # The strategy associated with a rollout to delete a `ManagedService`.
        # Readonly.
        # used by the system generated rollout to delete a service.
    },
    &quot;trafficPercentStrategy&quot;: { # Strategy that specifies how clients of Google Service Controller want to # Google Service Control selects service configurations based on
        # traffic percentage.
        # 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
        #         }
        #       }
        #     }
      &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,
      },
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(serviceName, pageSize=None, filter=None, pageToken=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)
  pageSize: integer, The max number of items to include in the response list. Page size is 50
if not specified. Maximum value is 100.
  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.
  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;nextPageToken&quot;: &quot;A String&quot;, # The token of the next page of results.
    &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;serviceName&quot;: &quot;A String&quot;, # The name of the service associated with this Rollout.
        &quot;createdBy&quot;: &quot;A String&quot;, # This field is deprecated and will be deleted. Please remove usage of
            # this field.
        &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 &lt;date&gt;&lt;revision number&gt;, 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;createTime&quot;: &quot;A String&quot;, # Creation time of the rollout. Readonly.
        &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 # The strategy associated with a rollout to delete a `ManagedService`.
            # Readonly.
            # used by the system generated rollout to delete a service.
        },
        &quot;trafficPercentStrategy&quot;: { # Strategy that specifies how clients of Google Service Controller want to # Google Service Control selects service configurations based on
            # traffic percentage.
            # 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
            #         }
            #       }
            #     }
          &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,
          },
        },
      },
    ],
  }</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>