<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="recommender_v1.html">Recommender API</a> . <a href="recommender_v1.projects.html">projects</a> . <a href="recommender_v1.projects.locations.html">locations</a> . <a href="recommender_v1.projects.locations.recommenders.html">recommenders</a> . <a href="recommender_v1.projects.locations.recommenders.recommendations.html">recommendations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the requested recommendation. Requires the recommender.*.get</p>
<p class="toc_element">
  <code><a href="#list">list(parent, filter=None, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists recommendations for a Cloud project. Requires the recommender.*.list</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>
<p class="toc_element">
  <code><a href="#markClaimed">markClaimed(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Marks the Recommendation State as Claimed. Users can use this method to</p>
<p class="toc_element">
  <code><a href="#markFailed">markFailed(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Marks the Recommendation State as Failed. Users can use this method to</p>
<p class="toc_element">
  <code><a href="#markSucceeded">markSucceeded(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Marks the Recommendation State as Succeeded. Users can use this method to</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets the requested recommendation. Requires the recommender.*.get
IAM permission for the specified recommender.

Args:
  name: string, Required. Name of the recommendation. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A recommendation along with a suggested action. E.g., a rightsizing
      # recommendation for an underutilized VM, IAM role recommendations, etc
    &quot;primaryImpact&quot;: { # Contains the impact a recommendation can have for a given category. # The primary impact that this recommendation can have while trying to
        # optimize for one category.
      &quot;costProjection&quot;: { # Contains metadata about how much money a recommendation can save or incur. # Use with CategoryType.COST
        &quot;duration&quot;: &quot;A String&quot;, # Duration for which this cost applies.
        &quot;cost&quot;: { # Represents an amount of money with its currency type. # An approximate projection on amount saved or amount incurred. Negative cost
            # units indicate cost savings and positive cost units indicate increase.
            # See google.type.Money documentation for positive/negative units.
          &quot;currencyCode&quot;: &quot;A String&quot;, # The 3-letter currency code defined in ISO 4217.
          &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount.
              # For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
        },
      },
      &quot;category&quot;: &quot;A String&quot;, # Category that is being targeted.
    },
    &quot;lastRefreshTime&quot;: &quot;A String&quot;, # Last time this recommendation was refreshed by the system that created it
        # in the first place.
    &quot;recommenderSubtype&quot;: &quot;A String&quot;, # Contains an identifier for a subtype of recommendations produced for the
        # same recommender. Subtype is a function of content and impact, meaning a
        # new subtype might be added when significant changes to `content` or
        # `primary_impact.category` are introduced. See the Recommenders section
        # to see a list of subtypes for a given Recommender.
        #
        # Examples:
        #   For recommender = &quot;google.iam.policy.Recommender&quot;,
        #   recommender_subtype can be one of &quot;REMOVE_ROLE&quot;/&quot;REPLACE_ROLE&quot;
    &quot;description&quot;: &quot;A String&quot;, # Free-form human readable summary in English. The maximum length is 500
        # characters.
    &quot;content&quot;: { # Contains what resources are changing and how they are changing. # Content of the recommendation describing recommended changes to resources.
      &quot;operationGroups&quot;: [ # Operations to one or more Google Cloud resources grouped in such a way
          # that, all operations within one group are expected to be performed
          # atomically and in an order.
        { # Group of operations that need to be performed atomically.
          &quot;operations&quot;: [ # List of operations across one or more resources that belong to this group.
              # Loosely based on RFC6902 and should be performed in the order they appear.
            { # Contains an operation for a resource loosely based on the JSON-PATCH format
                # with support for:
                #
                # * Custom filters for describing partial array patch.
                # * Extended path values for describing nested arrays.
                # * Custom fields for describing the resource for which the operation is being
                #   described.
                # * Allows extension to custom operations not natively supported by RFC6902.
                # See https://tools.ietf.org/html/rfc6902 for details on the original RFC.
              &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path`
                  # field referes to array elements. This is meant to support value matching
                  # beyond exact match. To perform exact match, use path_filters.
                  # When both path_filters and path_value_matchers are set, an implicit AND
                  # must be performed.
                &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                  &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the
                      # Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be
                      # used with RE2::FullMatch
                },
              },
              &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array
                  # elements in order to narrow down to a single unique element that is being
                  # tested/modified.
                  # This is intended to be an exact match per filter. To perform advanced
                  # matching, use path_value_matchers.
                  #
                  # * Example: {
                  #   &quot;/versions/*/name&quot; : &quot;it-123&quot;
                  #   &quot;/versions/*/targetSize/percent&quot;: 20
                  #  }
                  # * Example: {
                  #   &quot;/bindings/*/role&quot;: &quot;roles/admin&quot;
                  #   &quot;/bindings/*/condition&quot; : null
                  #  }
                  # * Example: {
                  #   &quot;/bindings/*/role&quot;: &quot;roles/admin&quot;
                  #   &quot;/bindings/*/members/*&quot; : [&quot;x@google.com&quot;, &quot;y@google.com&quot;]
                  #  }
                  # When both path_filters and path_value_matchers are set, an implicit AND
                  # must be performed.
                &quot;a_key&quot;: &quot;&quot;,
              },
              &quot;action&quot;: &quot;A String&quot;, # Type of this operation. Contains one of &#x27;and&#x27;, &#x27;remove&#x27;, &#x27;replace&#x27;, &#x27;move&#x27;,
                  # &#x27;copy&#x27;, &#x27;test&#x27; and custom operations. This field is case-insensitive and
                  # always populated.
              &quot;resourceType&quot;: &quot;A String&quot;, # Type of GCP resource being modified/tested. This field is always populated.
                  # Example: cloudresourcemanager.googleapis.com/Project,
                  # compute.googleapis.com/Instance
              &quot;sourcePath&quot;: &quot;A String&quot;, # Can be set with action &#x27;copy&#x27; or &#x27;move&#x27; to indicate the source field within
                  # resource or source_resource, ignored if provided for other operation types.
              &quot;valueMatcher&quot;: { # Contains various matching options for values for a GCP resource field. # Can be set for action &#x27;test&#x27; for advanced matching for the value of
                  # &#x27;path&#x27; field. Either this or `value` will be set for &#x27;test&#x27; operation.
                &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the
                    # Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be
                    # used with RE2::FullMatch
              },
              &quot;value&quot;: &quot;&quot;, # Value for the `path` field. Will be set for actions:&#x27;add&#x27;/&#x27;replace&#x27;.
                  # Maybe set for action: &#x27;test&#x27;. Either this or `value_matcher` will be set
                  # for &#x27;test&#x27; operation. An exact match must be performed.
              &quot;sourceResource&quot;: &quot;A String&quot;, # Can be set with action &#x27;copy&#x27; to copy resource configuration across
                  # different resources of the same type. Example: A resource clone can be
                  # done via action = &#x27;copy&#x27;, path = &quot;/&quot;, from = &quot;/&quot;,
                  # source_resource = &lt;source&gt; and resource_name = &lt;target&gt;.
                  # This field is empty for all other values of `action`.
              &quot;resource&quot;: &quot;A String&quot;, # Contains the fully qualified resource name. This field is always populated.
                  # ex: //cloudresourcemanager.googleapis.com/projects/foo.
              &quot;path&quot;: &quot;A String&quot;, # Path to the target field being operated on. If the operation is at the
                  # resource level, then path should be &quot;/&quot;. This field is always populated.
            },
          ],
        },
      ],
    },
    &quot;additionalImpact&quot;: [ # Optional set of additional impact that this recommendation may have when
        # trying to optimize for the primary category. These may be positive
        # or negative.
      { # Contains the impact a recommendation can have for a given category.
        &quot;costProjection&quot;: { # Contains metadata about how much money a recommendation can save or incur. # Use with CategoryType.COST
          &quot;duration&quot;: &quot;A String&quot;, # Duration for which this cost applies.
          &quot;cost&quot;: { # Represents an amount of money with its currency type. # An approximate projection on amount saved or amount incurred. Negative cost
              # units indicate cost savings and positive cost units indicate increase.
              # See google.type.Money documentation for positive/negative units.
            &quot;currencyCode&quot;: &quot;A String&quot;, # The 3-letter currency code defined in ISO 4217.
            &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount.
                # For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
          },
        },
        &quot;category&quot;: &quot;A String&quot;, # Category that is being targeted.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # Name of recommendation.
    &quot;etag&quot;: &quot;A String&quot;, # Fingerprint of the Recommendation. Provides optimistic locking when
        # updating states.
    &quot;stateInfo&quot;: { # Information for state. Contains state and metadata. # Information for state. Contains state and metadata.
      &quot;stateMetadata&quot;: { # A map of metadata for the state, provided by user or automations systems.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;state&quot;: &quot;A String&quot;, # The state of the recommendation, Eg ACTIVE, SUCCEEDED, FAILED.
    },
    &quot;associatedInsights&quot;: [ # Insights that led to this recommendation.
      { # Reference to an associated insight.
        &quot;insight&quot;: &quot;A String&quot;, # Insight resource name, e.g.
            # projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/insights/[INSIGHT_ID]
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists recommendations for a Cloud project. Requires the recommender.*.list
IAM permission for the specified recommender.

Args:
  parent: string, Required. The container resource on which to execute the request.
Acceptable formats:

1.
&quot;projects/[PROJECT_NUMBER]/locations/[LOCATION]/recommenders/[RECOMMENDER_ID]&quot;,

LOCATION here refers to GCP Locations:
https://cloud.google.com/about/locations/ (required)
  filter: string, Filter expression to restrict the recommendations returned. Supported
filter fields: state_info.state
Eg: `state_info.state:&quot;DISMISSED&quot; or state_info.state:&quot;FAILED&quot;
  pageToken: string, Optional. If present, retrieves the next batch of results from the preceding call to
this method. `page_token` must be the value of `next_page_token` from the
previous response. The values of other method parameters must be identical
to those in the previous call.
  pageSize: integer, Optional. The maximum number of results to return from this request.  Non-positive
values are ignored. If not specified, the server will determine the number
of results to return.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response to the `ListRecommendations` method.
    &quot;recommendations&quot;: [ # The set of recommendations for the `parent` resource.
      { # A recommendation along with a suggested action. E.g., a rightsizing
          # recommendation for an underutilized VM, IAM role recommendations, etc
        &quot;primaryImpact&quot;: { # Contains the impact a recommendation can have for a given category. # The primary impact that this recommendation can have while trying to
            # optimize for one category.
          &quot;costProjection&quot;: { # Contains metadata about how much money a recommendation can save or incur. # Use with CategoryType.COST
            &quot;duration&quot;: &quot;A String&quot;, # Duration for which this cost applies.
            &quot;cost&quot;: { # Represents an amount of money with its currency type. # An approximate projection on amount saved or amount incurred. Negative cost
                # units indicate cost savings and positive cost units indicate increase.
                # See google.type.Money documentation for positive/negative units.
              &quot;currencyCode&quot;: &quot;A String&quot;, # The 3-letter currency code defined in ISO 4217.
              &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount.
                  # For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
            },
          },
          &quot;category&quot;: &quot;A String&quot;, # Category that is being targeted.
        },
        &quot;lastRefreshTime&quot;: &quot;A String&quot;, # Last time this recommendation was refreshed by the system that created it
            # in the first place.
        &quot;recommenderSubtype&quot;: &quot;A String&quot;, # Contains an identifier for a subtype of recommendations produced for the
            # same recommender. Subtype is a function of content and impact, meaning a
            # new subtype might be added when significant changes to `content` or
            # `primary_impact.category` are introduced. See the Recommenders section
            # to see a list of subtypes for a given Recommender.
            #
            # Examples:
            #   For recommender = &quot;google.iam.policy.Recommender&quot;,
            #   recommender_subtype can be one of &quot;REMOVE_ROLE&quot;/&quot;REPLACE_ROLE&quot;
        &quot;description&quot;: &quot;A String&quot;, # Free-form human readable summary in English. The maximum length is 500
            # characters.
        &quot;content&quot;: { # Contains what resources are changing and how they are changing. # Content of the recommendation describing recommended changes to resources.
          &quot;operationGroups&quot;: [ # Operations to one or more Google Cloud resources grouped in such a way
              # that, all operations within one group are expected to be performed
              # atomically and in an order.
            { # Group of operations that need to be performed atomically.
              &quot;operations&quot;: [ # List of operations across one or more resources that belong to this group.
                  # Loosely based on RFC6902 and should be performed in the order they appear.
                { # Contains an operation for a resource loosely based on the JSON-PATCH format
                    # with support for:
                    #
                    # * Custom filters for describing partial array patch.
                    # * Extended path values for describing nested arrays.
                    # * Custom fields for describing the resource for which the operation is being
                    #   described.
                    # * Allows extension to custom operations not natively supported by RFC6902.
                    # See https://tools.ietf.org/html/rfc6902 for details on the original RFC.
                  &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path`
                      # field referes to array elements. This is meant to support value matching
                      # beyond exact match. To perform exact match, use path_filters.
                      # When both path_filters and path_value_matchers are set, an implicit AND
                      # must be performed.
                    &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                      &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the
                          # Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be
                          # used with RE2::FullMatch
                    },
                  },
                  &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array
                      # elements in order to narrow down to a single unique element that is being
                      # tested/modified.
                      # This is intended to be an exact match per filter. To perform advanced
                      # matching, use path_value_matchers.
                      #
                      # * Example: {
                      #   &quot;/versions/*/name&quot; : &quot;it-123&quot;
                      #   &quot;/versions/*/targetSize/percent&quot;: 20
                      #  }
                      # * Example: {
                      #   &quot;/bindings/*/role&quot;: &quot;roles/admin&quot;
                      #   &quot;/bindings/*/condition&quot; : null
                      #  }
                      # * Example: {
                      #   &quot;/bindings/*/role&quot;: &quot;roles/admin&quot;
                      #   &quot;/bindings/*/members/*&quot; : [&quot;x@google.com&quot;, &quot;y@google.com&quot;]
                      #  }
                      # When both path_filters and path_value_matchers are set, an implicit AND
                      # must be performed.
                    &quot;a_key&quot;: &quot;&quot;,
                  },
                  &quot;action&quot;: &quot;A String&quot;, # Type of this operation. Contains one of &#x27;and&#x27;, &#x27;remove&#x27;, &#x27;replace&#x27;, &#x27;move&#x27;,
                      # &#x27;copy&#x27;, &#x27;test&#x27; and custom operations. This field is case-insensitive and
                      # always populated.
                  &quot;resourceType&quot;: &quot;A String&quot;, # Type of GCP resource being modified/tested. This field is always populated.
                      # Example: cloudresourcemanager.googleapis.com/Project,
                      # compute.googleapis.com/Instance
                  &quot;sourcePath&quot;: &quot;A String&quot;, # Can be set with action &#x27;copy&#x27; or &#x27;move&#x27; to indicate the source field within
                      # resource or source_resource, ignored if provided for other operation types.
                  &quot;valueMatcher&quot;: { # Contains various matching options for values for a GCP resource field. # Can be set for action &#x27;test&#x27; for advanced matching for the value of
                      # &#x27;path&#x27; field. Either this or `value` will be set for &#x27;test&#x27; operation.
                    &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the
                        # Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be
                        # used with RE2::FullMatch
                  },
                  &quot;value&quot;: &quot;&quot;, # Value for the `path` field. Will be set for actions:&#x27;add&#x27;/&#x27;replace&#x27;.
                      # Maybe set for action: &#x27;test&#x27;. Either this or `value_matcher` will be set
                      # for &#x27;test&#x27; operation. An exact match must be performed.
                  &quot;sourceResource&quot;: &quot;A String&quot;, # Can be set with action &#x27;copy&#x27; to copy resource configuration across
                      # different resources of the same type. Example: A resource clone can be
                      # done via action = &#x27;copy&#x27;, path = &quot;/&quot;, from = &quot;/&quot;,
                      # source_resource = &lt;source&gt; and resource_name = &lt;target&gt;.
                      # This field is empty for all other values of `action`.
                  &quot;resource&quot;: &quot;A String&quot;, # Contains the fully qualified resource name. This field is always populated.
                      # ex: //cloudresourcemanager.googleapis.com/projects/foo.
                  &quot;path&quot;: &quot;A String&quot;, # Path to the target field being operated on. If the operation is at the
                      # resource level, then path should be &quot;/&quot;. This field is always populated.
                },
              ],
            },
          ],
        },
        &quot;additionalImpact&quot;: [ # Optional set of additional impact that this recommendation may have when
            # trying to optimize for the primary category. These may be positive
            # or negative.
          { # Contains the impact a recommendation can have for a given category.
            &quot;costProjection&quot;: { # Contains metadata about how much money a recommendation can save or incur. # Use with CategoryType.COST
              &quot;duration&quot;: &quot;A String&quot;, # Duration for which this cost applies.
              &quot;cost&quot;: { # Represents an amount of money with its currency type. # An approximate projection on amount saved or amount incurred. Negative cost
                  # units indicate cost savings and positive cost units indicate increase.
                  # See google.type.Money documentation for positive/negative units.
                &quot;currencyCode&quot;: &quot;A String&quot;, # The 3-letter currency code defined in ISO 4217.
                &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount.
                    # For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
              },
            },
            &quot;category&quot;: &quot;A String&quot;, # Category that is being targeted.
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # Name of recommendation.
        &quot;etag&quot;: &quot;A String&quot;, # Fingerprint of the Recommendation. Provides optimistic locking when
            # updating states.
        &quot;stateInfo&quot;: { # Information for state. Contains state and metadata. # Information for state. Contains state and metadata.
          &quot;stateMetadata&quot;: { # A map of metadata for the state, provided by user or automations systems.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;state&quot;: &quot;A String&quot;, # The state of the recommendation, Eg ACTIVE, SUCCEEDED, FAILED.
        },
        &quot;associatedInsights&quot;: [ # Insights that led to this recommendation.
          { # Reference to an associated insight.
            &quot;insight&quot;: &quot;A String&quot;, # Insight resource name, e.g.
                # projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/insights/[INSIGHT_ID]
          },
        ],
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A token that can be used to request the next page of results. This field is
        # empty if there are no additional 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>

<div class="method">
    <code class="details" id="markClaimed">markClaimed(name, body=None, x__xgafv=None)</code>
  <pre>Marks the Recommendation State as Claimed. Users can use this method to
indicate to the Recommender API that they are starting to apply the
recommendation themselves. This stops the recommendation content from being
updated. Associated insights are frozen and placed in the ACCEPTED state.

MarkRecommendationClaimed can be applied to recommendations in CLAIMED,
SUCCEEDED, FAILED, or ACTIVE state.

Requires the recommender.*.update IAM permission for the specified
recommender.

Args:
  name: string, Required. Name of the recommendation. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request for the `MarkRecommendationClaimed` Method.
    &quot;etag&quot;: &quot;A String&quot;, # Required. Fingerprint of the Recommendation. Provides optimistic locking.
    &quot;stateMetadata&quot;: { # State properties to include with this state. Overwrites any existing
        # `state_metadata`.
        # Keys must match the regex /^a-z0-9{0,62}$/.
        # Values must match the regex /^[a-zA-Z0-9_./-]{0,255}$/.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
  }

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

Returns:
  An object of the form:

    { # A recommendation along with a suggested action. E.g., a rightsizing
      # recommendation for an underutilized VM, IAM role recommendations, etc
    &quot;primaryImpact&quot;: { # Contains the impact a recommendation can have for a given category. # The primary impact that this recommendation can have while trying to
        # optimize for one category.
      &quot;costProjection&quot;: { # Contains metadata about how much money a recommendation can save or incur. # Use with CategoryType.COST
        &quot;duration&quot;: &quot;A String&quot;, # Duration for which this cost applies.
        &quot;cost&quot;: { # Represents an amount of money with its currency type. # An approximate projection on amount saved or amount incurred. Negative cost
            # units indicate cost savings and positive cost units indicate increase.
            # See google.type.Money documentation for positive/negative units.
          &quot;currencyCode&quot;: &quot;A String&quot;, # The 3-letter currency code defined in ISO 4217.
          &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount.
              # For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
        },
      },
      &quot;category&quot;: &quot;A String&quot;, # Category that is being targeted.
    },
    &quot;lastRefreshTime&quot;: &quot;A String&quot;, # Last time this recommendation was refreshed by the system that created it
        # in the first place.
    &quot;recommenderSubtype&quot;: &quot;A String&quot;, # Contains an identifier for a subtype of recommendations produced for the
        # same recommender. Subtype is a function of content and impact, meaning a
        # new subtype might be added when significant changes to `content` or
        # `primary_impact.category` are introduced. See the Recommenders section
        # to see a list of subtypes for a given Recommender.
        #
        # Examples:
        #   For recommender = &quot;google.iam.policy.Recommender&quot;,
        #   recommender_subtype can be one of &quot;REMOVE_ROLE&quot;/&quot;REPLACE_ROLE&quot;
    &quot;description&quot;: &quot;A String&quot;, # Free-form human readable summary in English. The maximum length is 500
        # characters.
    &quot;content&quot;: { # Contains what resources are changing and how they are changing. # Content of the recommendation describing recommended changes to resources.
      &quot;operationGroups&quot;: [ # Operations to one or more Google Cloud resources grouped in such a way
          # that, all operations within one group are expected to be performed
          # atomically and in an order.
        { # Group of operations that need to be performed atomically.
          &quot;operations&quot;: [ # List of operations across one or more resources that belong to this group.
              # Loosely based on RFC6902 and should be performed in the order they appear.
            { # Contains an operation for a resource loosely based on the JSON-PATCH format
                # with support for:
                #
                # * Custom filters for describing partial array patch.
                # * Extended path values for describing nested arrays.
                # * Custom fields for describing the resource for which the operation is being
                #   described.
                # * Allows extension to custom operations not natively supported by RFC6902.
                # See https://tools.ietf.org/html/rfc6902 for details on the original RFC.
              &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path`
                  # field referes to array elements. This is meant to support value matching
                  # beyond exact match. To perform exact match, use path_filters.
                  # When both path_filters and path_value_matchers are set, an implicit AND
                  # must be performed.
                &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                  &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the
                      # Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be
                      # used with RE2::FullMatch
                },
              },
              &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array
                  # elements in order to narrow down to a single unique element that is being
                  # tested/modified.
                  # This is intended to be an exact match per filter. To perform advanced
                  # matching, use path_value_matchers.
                  #
                  # * Example: {
                  #   &quot;/versions/*/name&quot; : &quot;it-123&quot;
                  #   &quot;/versions/*/targetSize/percent&quot;: 20
                  #  }
                  # * Example: {
                  #   &quot;/bindings/*/role&quot;: &quot;roles/admin&quot;
                  #   &quot;/bindings/*/condition&quot; : null
                  #  }
                  # * Example: {
                  #   &quot;/bindings/*/role&quot;: &quot;roles/admin&quot;
                  #   &quot;/bindings/*/members/*&quot; : [&quot;x@google.com&quot;, &quot;y@google.com&quot;]
                  #  }
                  # When both path_filters and path_value_matchers are set, an implicit AND
                  # must be performed.
                &quot;a_key&quot;: &quot;&quot;,
              },
              &quot;action&quot;: &quot;A String&quot;, # Type of this operation. Contains one of &#x27;and&#x27;, &#x27;remove&#x27;, &#x27;replace&#x27;, &#x27;move&#x27;,
                  # &#x27;copy&#x27;, &#x27;test&#x27; and custom operations. This field is case-insensitive and
                  # always populated.
              &quot;resourceType&quot;: &quot;A String&quot;, # Type of GCP resource being modified/tested. This field is always populated.
                  # Example: cloudresourcemanager.googleapis.com/Project,
                  # compute.googleapis.com/Instance
              &quot;sourcePath&quot;: &quot;A String&quot;, # Can be set with action &#x27;copy&#x27; or &#x27;move&#x27; to indicate the source field within
                  # resource or source_resource, ignored if provided for other operation types.
              &quot;valueMatcher&quot;: { # Contains various matching options for values for a GCP resource field. # Can be set for action &#x27;test&#x27; for advanced matching for the value of
                  # &#x27;path&#x27; field. Either this or `value` will be set for &#x27;test&#x27; operation.
                &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the
                    # Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be
                    # used with RE2::FullMatch
              },
              &quot;value&quot;: &quot;&quot;, # Value for the `path` field. Will be set for actions:&#x27;add&#x27;/&#x27;replace&#x27;.
                  # Maybe set for action: &#x27;test&#x27;. Either this or `value_matcher` will be set
                  # for &#x27;test&#x27; operation. An exact match must be performed.
              &quot;sourceResource&quot;: &quot;A String&quot;, # Can be set with action &#x27;copy&#x27; to copy resource configuration across
                  # different resources of the same type. Example: A resource clone can be
                  # done via action = &#x27;copy&#x27;, path = &quot;/&quot;, from = &quot;/&quot;,
                  # source_resource = &lt;source&gt; and resource_name = &lt;target&gt;.
                  # This field is empty for all other values of `action`.
              &quot;resource&quot;: &quot;A String&quot;, # Contains the fully qualified resource name. This field is always populated.
                  # ex: //cloudresourcemanager.googleapis.com/projects/foo.
              &quot;path&quot;: &quot;A String&quot;, # Path to the target field being operated on. If the operation is at the
                  # resource level, then path should be &quot;/&quot;. This field is always populated.
            },
          ],
        },
      ],
    },
    &quot;additionalImpact&quot;: [ # Optional set of additional impact that this recommendation may have when
        # trying to optimize for the primary category. These may be positive
        # or negative.
      { # Contains the impact a recommendation can have for a given category.
        &quot;costProjection&quot;: { # Contains metadata about how much money a recommendation can save or incur. # Use with CategoryType.COST
          &quot;duration&quot;: &quot;A String&quot;, # Duration for which this cost applies.
          &quot;cost&quot;: { # Represents an amount of money with its currency type. # An approximate projection on amount saved or amount incurred. Negative cost
              # units indicate cost savings and positive cost units indicate increase.
              # See google.type.Money documentation for positive/negative units.
            &quot;currencyCode&quot;: &quot;A String&quot;, # The 3-letter currency code defined in ISO 4217.
            &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount.
                # For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
          },
        },
        &quot;category&quot;: &quot;A String&quot;, # Category that is being targeted.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # Name of recommendation.
    &quot;etag&quot;: &quot;A String&quot;, # Fingerprint of the Recommendation. Provides optimistic locking when
        # updating states.
    &quot;stateInfo&quot;: { # Information for state. Contains state and metadata. # Information for state. Contains state and metadata.
      &quot;stateMetadata&quot;: { # A map of metadata for the state, provided by user or automations systems.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;state&quot;: &quot;A String&quot;, # The state of the recommendation, Eg ACTIVE, SUCCEEDED, FAILED.
    },
    &quot;associatedInsights&quot;: [ # Insights that led to this recommendation.
      { # Reference to an associated insight.
        &quot;insight&quot;: &quot;A String&quot;, # Insight resource name, e.g.
            # projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/insights/[INSIGHT_ID]
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="markFailed">markFailed(name, body=None, x__xgafv=None)</code>
  <pre>Marks the Recommendation State as Failed. Users can use this method to
indicate to the Recommender API that they have applied the recommendation
themselves, and the operation failed. This stops the recommendation content
from being updated. Associated insights are frozen and placed in the
ACCEPTED state.

MarkRecommendationFailed can be applied to recommendations in ACTIVE,
CLAIMED, SUCCEEDED, or FAILED state.

Requires the recommender.*.update IAM permission for the specified
recommender.

Args:
  name: string, Required. Name of the recommendation. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request for the `MarkRecommendationFailed` Method.
    &quot;stateMetadata&quot;: { # State properties to include with this state. Overwrites any existing
        # `state_metadata`.
        # Keys must match the regex /^a-z0-9{0,62}$/.
        # Values must match the regex /^[a-zA-Z0-9_./-]{0,255}$/.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;etag&quot;: &quot;A String&quot;, # Required. Fingerprint of the Recommendation. Provides optimistic locking.
  }

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

Returns:
  An object of the form:

    { # A recommendation along with a suggested action. E.g., a rightsizing
      # recommendation for an underutilized VM, IAM role recommendations, etc
    &quot;primaryImpact&quot;: { # Contains the impact a recommendation can have for a given category. # The primary impact that this recommendation can have while trying to
        # optimize for one category.
      &quot;costProjection&quot;: { # Contains metadata about how much money a recommendation can save or incur. # Use with CategoryType.COST
        &quot;duration&quot;: &quot;A String&quot;, # Duration for which this cost applies.
        &quot;cost&quot;: { # Represents an amount of money with its currency type. # An approximate projection on amount saved or amount incurred. Negative cost
            # units indicate cost savings and positive cost units indicate increase.
            # See google.type.Money documentation for positive/negative units.
          &quot;currencyCode&quot;: &quot;A String&quot;, # The 3-letter currency code defined in ISO 4217.
          &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount.
              # For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
        },
      },
      &quot;category&quot;: &quot;A String&quot;, # Category that is being targeted.
    },
    &quot;lastRefreshTime&quot;: &quot;A String&quot;, # Last time this recommendation was refreshed by the system that created it
        # in the first place.
    &quot;recommenderSubtype&quot;: &quot;A String&quot;, # Contains an identifier for a subtype of recommendations produced for the
        # same recommender. Subtype is a function of content and impact, meaning a
        # new subtype might be added when significant changes to `content` or
        # `primary_impact.category` are introduced. See the Recommenders section
        # to see a list of subtypes for a given Recommender.
        #
        # Examples:
        #   For recommender = &quot;google.iam.policy.Recommender&quot;,
        #   recommender_subtype can be one of &quot;REMOVE_ROLE&quot;/&quot;REPLACE_ROLE&quot;
    &quot;description&quot;: &quot;A String&quot;, # Free-form human readable summary in English. The maximum length is 500
        # characters.
    &quot;content&quot;: { # Contains what resources are changing and how they are changing. # Content of the recommendation describing recommended changes to resources.
      &quot;operationGroups&quot;: [ # Operations to one or more Google Cloud resources grouped in such a way
          # that, all operations within one group are expected to be performed
          # atomically and in an order.
        { # Group of operations that need to be performed atomically.
          &quot;operations&quot;: [ # List of operations across one or more resources that belong to this group.
              # Loosely based on RFC6902 and should be performed in the order they appear.
            { # Contains an operation for a resource loosely based on the JSON-PATCH format
                # with support for:
                #
                # * Custom filters for describing partial array patch.
                # * Extended path values for describing nested arrays.
                # * Custom fields for describing the resource for which the operation is being
                #   described.
                # * Allows extension to custom operations not natively supported by RFC6902.
                # See https://tools.ietf.org/html/rfc6902 for details on the original RFC.
              &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path`
                  # field referes to array elements. This is meant to support value matching
                  # beyond exact match. To perform exact match, use path_filters.
                  # When both path_filters and path_value_matchers are set, an implicit AND
                  # must be performed.
                &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                  &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the
                      # Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be
                      # used with RE2::FullMatch
                },
              },
              &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array
                  # elements in order to narrow down to a single unique element that is being
                  # tested/modified.
                  # This is intended to be an exact match per filter. To perform advanced
                  # matching, use path_value_matchers.
                  #
                  # * Example: {
                  #   &quot;/versions/*/name&quot; : &quot;it-123&quot;
                  #   &quot;/versions/*/targetSize/percent&quot;: 20
                  #  }
                  # * Example: {
                  #   &quot;/bindings/*/role&quot;: &quot;roles/admin&quot;
                  #   &quot;/bindings/*/condition&quot; : null
                  #  }
                  # * Example: {
                  #   &quot;/bindings/*/role&quot;: &quot;roles/admin&quot;
                  #   &quot;/bindings/*/members/*&quot; : [&quot;x@google.com&quot;, &quot;y@google.com&quot;]
                  #  }
                  # When both path_filters and path_value_matchers are set, an implicit AND
                  # must be performed.
                &quot;a_key&quot;: &quot;&quot;,
              },
              &quot;action&quot;: &quot;A String&quot;, # Type of this operation. Contains one of &#x27;and&#x27;, &#x27;remove&#x27;, &#x27;replace&#x27;, &#x27;move&#x27;,
                  # &#x27;copy&#x27;, &#x27;test&#x27; and custom operations. This field is case-insensitive and
                  # always populated.
              &quot;resourceType&quot;: &quot;A String&quot;, # Type of GCP resource being modified/tested. This field is always populated.
                  # Example: cloudresourcemanager.googleapis.com/Project,
                  # compute.googleapis.com/Instance
              &quot;sourcePath&quot;: &quot;A String&quot;, # Can be set with action &#x27;copy&#x27; or &#x27;move&#x27; to indicate the source field within
                  # resource or source_resource, ignored if provided for other operation types.
              &quot;valueMatcher&quot;: { # Contains various matching options for values for a GCP resource field. # Can be set for action &#x27;test&#x27; for advanced matching for the value of
                  # &#x27;path&#x27; field. Either this or `value` will be set for &#x27;test&#x27; operation.
                &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the
                    # Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be
                    # used with RE2::FullMatch
              },
              &quot;value&quot;: &quot;&quot;, # Value for the `path` field. Will be set for actions:&#x27;add&#x27;/&#x27;replace&#x27;.
                  # Maybe set for action: &#x27;test&#x27;. Either this or `value_matcher` will be set
                  # for &#x27;test&#x27; operation. An exact match must be performed.
              &quot;sourceResource&quot;: &quot;A String&quot;, # Can be set with action &#x27;copy&#x27; to copy resource configuration across
                  # different resources of the same type. Example: A resource clone can be
                  # done via action = &#x27;copy&#x27;, path = &quot;/&quot;, from = &quot;/&quot;,
                  # source_resource = &lt;source&gt; and resource_name = &lt;target&gt;.
                  # This field is empty for all other values of `action`.
              &quot;resource&quot;: &quot;A String&quot;, # Contains the fully qualified resource name. This field is always populated.
                  # ex: //cloudresourcemanager.googleapis.com/projects/foo.
              &quot;path&quot;: &quot;A String&quot;, # Path to the target field being operated on. If the operation is at the
                  # resource level, then path should be &quot;/&quot;. This field is always populated.
            },
          ],
        },
      ],
    },
    &quot;additionalImpact&quot;: [ # Optional set of additional impact that this recommendation may have when
        # trying to optimize for the primary category. These may be positive
        # or negative.
      { # Contains the impact a recommendation can have for a given category.
        &quot;costProjection&quot;: { # Contains metadata about how much money a recommendation can save or incur. # Use with CategoryType.COST
          &quot;duration&quot;: &quot;A String&quot;, # Duration for which this cost applies.
          &quot;cost&quot;: { # Represents an amount of money with its currency type. # An approximate projection on amount saved or amount incurred. Negative cost
              # units indicate cost savings and positive cost units indicate increase.
              # See google.type.Money documentation for positive/negative units.
            &quot;currencyCode&quot;: &quot;A String&quot;, # The 3-letter currency code defined in ISO 4217.
            &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount.
                # For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
          },
        },
        &quot;category&quot;: &quot;A String&quot;, # Category that is being targeted.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # Name of recommendation.
    &quot;etag&quot;: &quot;A String&quot;, # Fingerprint of the Recommendation. Provides optimistic locking when
        # updating states.
    &quot;stateInfo&quot;: { # Information for state. Contains state and metadata. # Information for state. Contains state and metadata.
      &quot;stateMetadata&quot;: { # A map of metadata for the state, provided by user or automations systems.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;state&quot;: &quot;A String&quot;, # The state of the recommendation, Eg ACTIVE, SUCCEEDED, FAILED.
    },
    &quot;associatedInsights&quot;: [ # Insights that led to this recommendation.
      { # Reference to an associated insight.
        &quot;insight&quot;: &quot;A String&quot;, # Insight resource name, e.g.
            # projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/insights/[INSIGHT_ID]
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="markSucceeded">markSucceeded(name, body=None, x__xgafv=None)</code>
  <pre>Marks the Recommendation State as Succeeded. Users can use this method to
indicate to the Recommender API that they have applied the recommendation
themselves, and the operation was successful. This stops the recommendation
content from being updated. Associated insights are frozen and placed in
the ACCEPTED state.

MarkRecommendationSucceeded can be applied to recommendations in ACTIVE,
CLAIMED, SUCCEEDED, or FAILED state.

Requires the recommender.*.update IAM permission for the specified
recommender.

Args:
  name: string, Required. Name of the recommendation. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request for the `MarkRecommendationSucceeded` Method.
    &quot;etag&quot;: &quot;A String&quot;, # Required. Fingerprint of the Recommendation. Provides optimistic locking.
    &quot;stateMetadata&quot;: { # State properties to include with this state. Overwrites any existing
        # `state_metadata`.
        # Keys must match the regex /^a-z0-9{0,62}$/.
        # Values must match the regex /^[a-zA-Z0-9_./-]{0,255}$/.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
  }

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

Returns:
  An object of the form:

    { # A recommendation along with a suggested action. E.g., a rightsizing
      # recommendation for an underutilized VM, IAM role recommendations, etc
    &quot;primaryImpact&quot;: { # Contains the impact a recommendation can have for a given category. # The primary impact that this recommendation can have while trying to
        # optimize for one category.
      &quot;costProjection&quot;: { # Contains metadata about how much money a recommendation can save or incur. # Use with CategoryType.COST
        &quot;duration&quot;: &quot;A String&quot;, # Duration for which this cost applies.
        &quot;cost&quot;: { # Represents an amount of money with its currency type. # An approximate projection on amount saved or amount incurred. Negative cost
            # units indicate cost savings and positive cost units indicate increase.
            # See google.type.Money documentation for positive/negative units.
          &quot;currencyCode&quot;: &quot;A String&quot;, # The 3-letter currency code defined in ISO 4217.
          &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount.
              # For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
        },
      },
      &quot;category&quot;: &quot;A String&quot;, # Category that is being targeted.
    },
    &quot;lastRefreshTime&quot;: &quot;A String&quot;, # Last time this recommendation was refreshed by the system that created it
        # in the first place.
    &quot;recommenderSubtype&quot;: &quot;A String&quot;, # Contains an identifier for a subtype of recommendations produced for the
        # same recommender. Subtype is a function of content and impact, meaning a
        # new subtype might be added when significant changes to `content` or
        # `primary_impact.category` are introduced. See the Recommenders section
        # to see a list of subtypes for a given Recommender.
        #
        # Examples:
        #   For recommender = &quot;google.iam.policy.Recommender&quot;,
        #   recommender_subtype can be one of &quot;REMOVE_ROLE&quot;/&quot;REPLACE_ROLE&quot;
    &quot;description&quot;: &quot;A String&quot;, # Free-form human readable summary in English. The maximum length is 500
        # characters.
    &quot;content&quot;: { # Contains what resources are changing and how they are changing. # Content of the recommendation describing recommended changes to resources.
      &quot;operationGroups&quot;: [ # Operations to one or more Google Cloud resources grouped in such a way
          # that, all operations within one group are expected to be performed
          # atomically and in an order.
        { # Group of operations that need to be performed atomically.
          &quot;operations&quot;: [ # List of operations across one or more resources that belong to this group.
              # Loosely based on RFC6902 and should be performed in the order they appear.
            { # Contains an operation for a resource loosely based on the JSON-PATCH format
                # with support for:
                #
                # * Custom filters for describing partial array patch.
                # * Extended path values for describing nested arrays.
                # * Custom fields for describing the resource for which the operation is being
                #   described.
                # * Allows extension to custom operations not natively supported by RFC6902.
                # See https://tools.ietf.org/html/rfc6902 for details on the original RFC.
              &quot;pathValueMatchers&quot;: { # Similar to path_filters, this contains set of filters to apply if `path`
                  # field referes to array elements. This is meant to support value matching
                  # beyond exact match. To perform exact match, use path_filters.
                  # When both path_filters and path_value_matchers are set, an implicit AND
                  # must be performed.
                &quot;a_key&quot;: { # Contains various matching options for values for a GCP resource field.
                  &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the
                      # Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be
                      # used with RE2::FullMatch
                },
              },
              &quot;pathFilters&quot;: { # Set of filters to apply if `path` refers to array elements or nested array
                  # elements in order to narrow down to a single unique element that is being
                  # tested/modified.
                  # This is intended to be an exact match per filter. To perform advanced
                  # matching, use path_value_matchers.
                  #
                  # * Example: {
                  #   &quot;/versions/*/name&quot; : &quot;it-123&quot;
                  #   &quot;/versions/*/targetSize/percent&quot;: 20
                  #  }
                  # * Example: {
                  #   &quot;/bindings/*/role&quot;: &quot;roles/admin&quot;
                  #   &quot;/bindings/*/condition&quot; : null
                  #  }
                  # * Example: {
                  #   &quot;/bindings/*/role&quot;: &quot;roles/admin&quot;
                  #   &quot;/bindings/*/members/*&quot; : [&quot;x@google.com&quot;, &quot;y@google.com&quot;]
                  #  }
                  # When both path_filters and path_value_matchers are set, an implicit AND
                  # must be performed.
                &quot;a_key&quot;: &quot;&quot;,
              },
              &quot;action&quot;: &quot;A String&quot;, # Type of this operation. Contains one of &#x27;and&#x27;, &#x27;remove&#x27;, &#x27;replace&#x27;, &#x27;move&#x27;,
                  # &#x27;copy&#x27;, &#x27;test&#x27; and custom operations. This field is case-insensitive and
                  # always populated.
              &quot;resourceType&quot;: &quot;A String&quot;, # Type of GCP resource being modified/tested. This field is always populated.
                  # Example: cloudresourcemanager.googleapis.com/Project,
                  # compute.googleapis.com/Instance
              &quot;sourcePath&quot;: &quot;A String&quot;, # Can be set with action &#x27;copy&#x27; or &#x27;move&#x27; to indicate the source field within
                  # resource or source_resource, ignored if provided for other operation types.
              &quot;valueMatcher&quot;: { # Contains various matching options for values for a GCP resource field. # Can be set for action &#x27;test&#x27; for advanced matching for the value of
                  # &#x27;path&#x27; field. Either this or `value` will be set for &#x27;test&#x27; operation.
                &quot;matchesPattern&quot;: &quot;A String&quot;, # To be used for full regex matching. The regular expression is using the
                    # Google RE2 syntax (https://github.com/google/re2/wiki/Syntax), so to be
                    # used with RE2::FullMatch
              },
              &quot;value&quot;: &quot;&quot;, # Value for the `path` field. Will be set for actions:&#x27;add&#x27;/&#x27;replace&#x27;.
                  # Maybe set for action: &#x27;test&#x27;. Either this or `value_matcher` will be set
                  # for &#x27;test&#x27; operation. An exact match must be performed.
              &quot;sourceResource&quot;: &quot;A String&quot;, # Can be set with action &#x27;copy&#x27; to copy resource configuration across
                  # different resources of the same type. Example: A resource clone can be
                  # done via action = &#x27;copy&#x27;, path = &quot;/&quot;, from = &quot;/&quot;,
                  # source_resource = &lt;source&gt; and resource_name = &lt;target&gt;.
                  # This field is empty for all other values of `action`.
              &quot;resource&quot;: &quot;A String&quot;, # Contains the fully qualified resource name. This field is always populated.
                  # ex: //cloudresourcemanager.googleapis.com/projects/foo.
              &quot;path&quot;: &quot;A String&quot;, # Path to the target field being operated on. If the operation is at the
                  # resource level, then path should be &quot;/&quot;. This field is always populated.
            },
          ],
        },
      ],
    },
    &quot;additionalImpact&quot;: [ # Optional set of additional impact that this recommendation may have when
        # trying to optimize for the primary category. These may be positive
        # or negative.
      { # Contains the impact a recommendation can have for a given category.
        &quot;costProjection&quot;: { # Contains metadata about how much money a recommendation can save or incur. # Use with CategoryType.COST
          &quot;duration&quot;: &quot;A String&quot;, # Duration for which this cost applies.
          &quot;cost&quot;: { # Represents an amount of money with its currency type. # An approximate projection on amount saved or amount incurred. Negative cost
              # units indicate cost savings and positive cost units indicate increase.
              # See google.type.Money documentation for positive/negative units.
            &quot;currencyCode&quot;: &quot;A String&quot;, # The 3-letter currency code defined in ISO 4217.
            &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount.
                # For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
          },
        },
        &quot;category&quot;: &quot;A String&quot;, # Category that is being targeted.
      },
    ],
    &quot;name&quot;: &quot;A String&quot;, # Name of recommendation.
    &quot;etag&quot;: &quot;A String&quot;, # Fingerprint of the Recommendation. Provides optimistic locking when
        # updating states.
    &quot;stateInfo&quot;: { # Information for state. Contains state and metadata. # Information for state. Contains state and metadata.
      &quot;stateMetadata&quot;: { # A map of metadata for the state, provided by user or automations systems.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;state&quot;: &quot;A String&quot;, # The state of the recommendation, Eg ACTIVE, SUCCEEDED, FAILED.
    },
    &quot;associatedInsights&quot;: [ # Insights that led to this recommendation.
      { # Reference to an associated insight.
        &quot;insight&quot;: &quot;A String&quot;, # Insight resource name, e.g.
            # projects/[PROJECT_NUMBER]/locations/[LOCATION]/insightTypes/[INSIGHT_TYPE_ID]/insights/[INSIGHT_ID]
      },
    ],
  }</pre>
</div>

</body></html>