<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="apigee_v1.html">Apigee API</a> . <a href="apigee_v1.organizations.html">organizations</a> . <a href="apigee_v1.organizations.environments.html">environments</a> . <a href="apigee_v1.organizations.environments.sharedflows.html">sharedflows</a> . <a href="apigee_v1.organizations.environments.sharedflows.revisions.html">revisions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#deployments">deployments(name, x__xgafv=None)</a></code></p>
<p class="firstline">Undeploys a shared flow revision from an environment.</p>
<p class="toc_element">
  <code><a href="#getDeployments">getDeployments(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the deployment of a shared flow revision and actual state reported by</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="deployments">deployments(name, x__xgafv=None)</code>
  <pre>Undeploys a shared flow revision from an environment.

Args:
  name: string, Required. Name of the shared flow revision to undeploy in the following format:
  `organizations/{org}/environments/{env}/sharedflows/{sharedflow}/revisions/{rev}` (required)
  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);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="getDeployments">getDeployments(name, x__xgafv=None)</code>
  <pre>Gets the deployment of a shared flow revision and actual state reported by
runtime pods.

Args:
  name: string, Required. Name representing a shared flow in an environment in the following
format:
  `organizations/{org}/environments/{env}/sharedflows/{sharedflow}/revisions/{rev}` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;environment&quot;: &quot;A String&quot;, # Environment.
    &quot;revision&quot;: &quot;A String&quot;, # API proxy revision.
    &quot;instances&quot;: [ # Status reported by each runtime instance.
        # This field is not populated in List APIs.
      { # The status of a deployment as reported by a single instance.
        &quot;deployedRevisions&quot;: [ # Revisions currently deployed in MPs.
          { # Revisions deployed in the MPs.
            &quot;revision&quot;: &quot;A String&quot;, # The proxy revision reported as deployed.
            &quot;percentage&quot;: 42, # The percentage of MP replicas reporting this revision
          },
        ],
        &quot;deployedRoutes&quot;: [ # The current routes deployed in the ingress routing table. A route which is
            # missing will be shown with no destination environment.
          { # A route deployed in the ingress routing table.
            &quot;basepath&quot;: &quot;A String&quot;, # The basepath in the routing table.
            &quot;envgroup&quot;: &quot;A String&quot;, # The envgroup where this route is installed.
            &quot;environment&quot;: &quot;A String&quot;, # The destination environment. This will be empty if the route is not yet
                # reported.
            &quot;percentage&quot;: 42, # The percentage of ingress replicas reporting this route.
          },
        ],
        &quot;instance&quot;: &quot;A String&quot;, # ID of the instance reporting the status.
      },
    ],
    &quot;apiProxy&quot;: &quot;A String&quot;, # API proxy.
    &quot;errors&quot;: [ # Errors reported for this deployment. Populated only when state == ERROR.
        # This field is not populated in List APIs.
      { # 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).
        &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;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;pods&quot;: [ # Status reported by runtime pods. This field is not populated for List
        # APIs.
      {
        &quot;deploymentTime&quot;: &quot;A String&quot;, # Time the proxy was deployed in milliseconds since epoch.
        &quot;statusCodeDetails&quot;: &quot;A String&quot;, # Human-readable message associated with the status code.
        &quot;deploymentStatusTime&quot;: &quot;A String&quot;, # Time the deployment status was reported in milliseconds since epoch.
        &quot;podName&quot;: &quot;A String&quot;, # Name of the pod which is reporting the status.
        &quot;podStatus&quot;: &quot;A String&quot;, # Overall status of the pod (not this specific deployment). Valid values
            # include:
            # - `active`: Up to date.
            # - `stale` : Recently out of date.
            #
            # Pods that have not reported status in a
            # long time are excluded from the output.
        &quot;podStatusTime&quot;: &quot;A String&quot;, # Time the pod status was reported in milliseconds since epoch.
        &quot;appVersion&quot;: &quot;A String&quot;, # Version of the application running in the pod.
        &quot;deploymentStatus&quot;: &quot;A String&quot;, # Status of the deployment. Valid values
            # include:
            # - `deployed`: Successful.
            # - `error` : Failed.
            # - `pending` : Pod has not yet reported on the deployment.
        &quot;statusCode&quot;: &quot;A String&quot;, # Code associated with the deployment status.
      },
    ],
    &quot;state&quot;: &quot;A String&quot;, # Current state of the deployment.
        # This field is not populated in List APIs.
    &quot;deployStartTime&quot;: &quot;A String&quot;, # Time the API proxy was marked `deployed` in the control plane in
        # millisconds since epoch.
    &quot;basePath&quot;: &quot;A String&quot;, # Base path for the deployment.
    &quot;routeConflicts&quot;: [ # Conflicts in the desired state routing configuration. The presence of
        # conflicts does not cause the state to be ERROR, but it will mean that
        # some of the deployments basepaths are not routed to its environment. If
        # the conflicts change, the state will transition to PROGRESSING until the
        # latest configuration is rolled out to all instances.
        # This field is not populated in List APIs.
      { # Describes a routing conflict that may cause a deployment not to receive
          # traffic at some basepath.
        &quot;conflictingDeployment&quot;: { # A tuple representing a basepath and the deployment containing it. # The existing basepath/deployment causing the conflict.
          &quot;apiProxy&quot;: &quot;A String&quot;, # The name of the deployed proxy revision containing the basepath.
          &quot;environment&quot;: &quot;A String&quot;, # The name of the environment in which the proxy is deployed.
          &quot;revision&quot;: &quot;A String&quot;, # The name of the deployed proxy revision containing the basepath.
          &quot;basepath&quot;: &quot;A String&quot;, # The basepath receiving traffic.
        },
        &quot;description&quot;: &quot;A String&quot;, # A human-readable description of this conflict.
        &quot;environmentGroup&quot;: &quot;A String&quot;, # The name of the environment group in which this conflict exists.
      },
    ],
  }</pre>
</div>

</body></html>