<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">Google 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, 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, 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.

Operation<response: Rollout>

Args:
  serviceName: string, 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. (required)
    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.
    "status": "A String", # The status of this rollout. Readonly. In case of a failed rollout,
        # the system will automatically rollback to the current Rollout
        # version. Readonly.
    "trafficPercentStrategy": { # Strategy that specifies how Google Service Control should select # Google Service Control selects service configurations based on
        # traffic percentage.
        # different
        # versions of service configurations based on traffic percentage.
        #
        # One example of how to gradually rollout a new service configuration using
        # this
        # strategy:
        # Day 1
        #
        #     Rollout {
        #       id: "example.googleapis.com/rollout_20160206"
        #       traffic_percent_strategy {
        #         percentages: {
        #           "example.googleapis.com/20160201": 70.00
        #           "example.googleapis.com/20160206": 30.00
        #         }
        #       }
        #     }
        #
        # Day 2
        #
        #     Rollout {
        #       id: "example.googleapis.com/rollout_20160207"
        #       traffic_percent_strategy: {
        #         percentages: {
        #           "example.googleapis.com/20160206": 100.00
        #         }
        #       }
        #     }
      "percentages": { # 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.
        "a_key": 3.14,
      },
    },
    "rolloutId": "A String", # Optional unique identifier of this Rollout. Only lower case letters, digits
        #  and '-' are allowed.
        # 
        # If not specified by client, the server will generate one. The generated id
        # will have the form of <date><revision number>, where "date" is the create
        # date in ISO 8601 format.  "revision number" is a monotonically increasing
        # positive number that is reset every day for each service.
        # An example of the generated rollout_id is '2016-02-16r1'
    "serviceName": "A String", # The name of the service associated with this Rollout.
    "createdBy": "A String", # The user who created the Rollout. Readonly.
    "deleteServiceStrategy": { # 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.
    },
    "createTime": "A String", # Creation time of the rollout. Readonly.
  }

  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.
    "error": { # The `Status` type defines a logical error model that is suitable for different # The error result of the operation in case of failure or cancellation.
        # programming environments, including REST APIs and RPC APIs. It is used by
        # [gRPC](https://github.com/grpc). The error model is designed to be:
        #
        # - Simple to use and understand for most users
        # - Flexible enough to meet unexpected needs
        #
        # # Overview
        #
        # The `Status` message contains three pieces of data: error code, error message,
        # and error details. The error code should be an enum value of
        # google.rpc.Code, but it may accept additional error codes if needed.  The
        # error message should be a developer-facing English message that helps
        # developers *understand* and *resolve* the error. If a localized user-facing
        # error message is needed, put the localized message in the error details or
        # localize it in the client. The optional error details may contain arbitrary
        # information about the error. There is a predefined set of error detail types
        # in the package `google.rpc` that can be used for common error conditions.
        #
        # # Language mapping
        #
        # The `Status` message is the logical representation of the error model, but it
        # is not necessarily the actual wire format. When the `Status` message is
        # exposed in different client libraries and different wire protocols, it can be
        # mapped differently. For example, it will likely be mapped to some exceptions
        # in Java, but more likely mapped to some error codes in C.
        #
        # # Other uses
        #
        # The error model and the `Status` message can be used in a variety of
        # environments, either with or without APIs, to provide a
        # consistent developer experience across different environments.
        #
        # Example uses of this error model include:
        #
        # - Partial errors. If a service needs to return partial errors to the client,
        #     it may embed the `Status` in the normal response to indicate the partial
        #     errors.
        #
        # - Workflow errors. A typical workflow has multiple steps. Each step may
        #     have a `Status` message for error reporting.
        #
        # - Batch operations. If a client uses batch request and batch response, the
        #     `Status` message should be used directly inside batch response, one for
        #     each error sub-response.
        #
        # - Asynchronous operations. If an API call embeds asynchronous operation
        #     results in its response, the status of those operations should be
        #     represented directly using the `Status` message.
        #
        # - Logging. If some API errors are stored in logs, the message `Status` could
        #     be used directly after any stripping needed for security/privacy reasons.
      "message": "A String", # 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.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There will be a
          # common set of message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": 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.
    "response": { # 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`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # 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 have the format of `operations/some/unique/name`.
    "metadata": { # 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.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
  }</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, The name of the service.  See the [overview](/service-management/overview)
for naming requirements.  For example: `example.googleapis.com`. (required)
  rolloutId: string, 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.
      "status": "A String", # The status of this rollout. Readonly. In case of a failed rollout,
          # the system will automatically rollback to the current Rollout
          # version. Readonly.
      "trafficPercentStrategy": { # Strategy that specifies how Google Service Control should select # Google Service Control selects service configurations based on
          # traffic percentage.
          # different
          # versions of service configurations based on traffic percentage.
          #
          # One example of how to gradually rollout a new service configuration using
          # this
          # strategy:
          # Day 1
          #
          #     Rollout {
          #       id: "example.googleapis.com/rollout_20160206"
          #       traffic_percent_strategy {
          #         percentages: {
          #           "example.googleapis.com/20160201": 70.00
          #           "example.googleapis.com/20160206": 30.00
          #         }
          #       }
          #     }
          #
          # Day 2
          #
          #     Rollout {
          #       id: "example.googleapis.com/rollout_20160207"
          #       traffic_percent_strategy: {
          #         percentages: {
          #           "example.googleapis.com/20160206": 100.00
          #         }
          #       }
          #     }
        "percentages": { # 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.
          "a_key": 3.14,
        },
      },
      "rolloutId": "A String", # Optional unique identifier of this Rollout. Only lower case letters, digits
          #  and '-' are allowed.
          #
          # If not specified by client, the server will generate one. The generated id
          # will have the form of <date><revision number>, where "date" is the create
          # date in ISO 8601 format.  "revision number" is a monotonically increasing
          # positive number that is reset every day for each service.
          # An example of the generated rollout_id is '2016-02-16r1'
      "serviceName": "A String", # The name of the service associated with this Rollout.
      "createdBy": "A String", # The user who created the Rollout. Readonly.
      "deleteServiceStrategy": { # 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.
      },
      "createTime": "A String", # Creation time of the rollout. Readonly.
    }</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, 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.
  filter: string, 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) 'SUCCESS',
     use filter='status=SUCCESS'
  -- To limit the results to those in
     [status](google.api.servicemanagement.v1.RolloutStatus) 'CANCELLED'
     or 'FAILED', use filter='status=CANCELLED OR status=FAILED'
  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.
    "nextPageToken": "A String", # The token of the next page of results.
    "rollouts": [ # 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.
          "status": "A String", # The status of this rollout. Readonly. In case of a failed rollout,
              # the system will automatically rollback to the current Rollout
              # version. Readonly.
          "trafficPercentStrategy": { # Strategy that specifies how Google Service Control should select # Google Service Control selects service configurations based on
              # traffic percentage.
              # different
              # versions of service configurations based on traffic percentage.
              #
              # One example of how to gradually rollout a new service configuration using
              # this
              # strategy:
              # Day 1
              #
              #     Rollout {
              #       id: "example.googleapis.com/rollout_20160206"
              #       traffic_percent_strategy {
              #         percentages: {
              #           "example.googleapis.com/20160201": 70.00
              #           "example.googleapis.com/20160206": 30.00
              #         }
              #       }
              #     }
              #
              # Day 2
              #
              #     Rollout {
              #       id: "example.googleapis.com/rollout_20160207"
              #       traffic_percent_strategy: {
              #         percentages: {
              #           "example.googleapis.com/20160206": 100.00
              #         }
              #       }
              #     }
            "percentages": { # 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.
              "a_key": 3.14,
            },
          },
          "rolloutId": "A String", # Optional unique identifier of this Rollout. Only lower case letters, digits
              #  and '-' are allowed.
              #
              # If not specified by client, the server will generate one. The generated id
              # will have the form of <date><revision number>, where "date" is the create
              # date in ISO 8601 format.  "revision number" is a monotonically increasing
              # positive number that is reset every day for each service.
              # An example of the generated rollout_id is '2016-02-16r1'
          "serviceName": "A String", # The name of the service associated with this Rollout.
          "createdBy": "A String", # The user who created the Rollout. Readonly.
          "deleteServiceStrategy": { # 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.
          },
          "createTime": "A String", # Creation time of the rollout. Readonly.
        },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

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

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

</body></html>