<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="cloudresourcemanager_v1.html">Cloud Resource Manager API</a> . <a href="cloudresourcemanager_v1.liens.html">liens</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Create a Lien which applies to the resource denoted by the `parent` field.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Delete a Lien by `name`.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieve a Lien by `name`.</p>
<p class="toc_element">
  <code><a href="#list">list(pageSize=None, parent=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List all Liens applied to the `parent` resource.</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(body=None, x__xgafv=None)</code>
  <pre>Create a Lien which applies to the resource denoted by the `parent` field.

Callers of this method will require permission on the `parent` resource.
For example, applying to `projects/1234` requires permission
`resourcemanager.projects.updateLiens`.

NOTE: Some resources may limit the number of Liens which may be applied.

Args:
  body: object, The request body.
    The object takes the form of:

{ # A Lien represents an encumbrance on the actions that can be performed on a
    # resource.
  &quot;origin&quot;: &quot;A String&quot;, # A stable, user-visible/meaningful string identifying the origin of the
      # Lien, intended to be inspected programmatically. Maximum length of 200
      # characters.
      # 
      # Example: &#x27;compute.googleapis.com&#x27;
  &quot;createTime&quot;: &quot;A String&quot;, # The creation time of this Lien.
  &quot;name&quot;: &quot;A String&quot;, # A system-generated unique identifier for this Lien.
      # 
      # Example: `liens/1234abcd`
  &quot;restrictions&quot;: [ # The types of operations which should be blocked as a result of this Lien.
      # Each value should correspond to an IAM permission. The server will
      # validate the permissions against those for which Liens are supported.
      # 
      # An empty list is meaningless and will be rejected.
      # 
      # Example: [&#x27;resourcemanager.projects.delete&#x27;]
    &quot;A String&quot;,
  ],
  &quot;parent&quot;: &quot;A String&quot;, # A reference to the resource this Lien is attached to. The server will
      # validate the parent against those for which Liens are supported.
      # 
      # Example: `projects/1234`
  &quot;reason&quot;: &quot;A String&quot;, # Concise user-visible strings indicating why an action cannot be performed
      # on a resource. Maximum length of 200 characters.
      # 
      # Example: &#x27;Holds production API key&#x27;
}

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

Returns:
  An object of the form:

    { # A Lien represents an encumbrance on the actions that can be performed on a
      # resource.
    &quot;origin&quot;: &quot;A String&quot;, # A stable, user-visible/meaningful string identifying the origin of the
        # Lien, intended to be inspected programmatically. Maximum length of 200
        # characters.
        #
        # Example: &#x27;compute.googleapis.com&#x27;
    &quot;createTime&quot;: &quot;A String&quot;, # The creation time of this Lien.
    &quot;name&quot;: &quot;A String&quot;, # A system-generated unique identifier for this Lien.
        #
        # Example: `liens/1234abcd`
    &quot;restrictions&quot;: [ # The types of operations which should be blocked as a result of this Lien.
        # Each value should correspond to an IAM permission. The server will
        # validate the permissions against those for which Liens are supported.
        #
        # An empty list is meaningless and will be rejected.
        #
        # Example: [&#x27;resourcemanager.projects.delete&#x27;]
      &quot;A String&quot;,
    ],
    &quot;parent&quot;: &quot;A String&quot;, # A reference to the resource this Lien is attached to. The server will
        # validate the parent against those for which Liens are supported.
        #
        # Example: `projects/1234`
    &quot;reason&quot;: &quot;A String&quot;, # Concise user-visible strings indicating why an action cannot be performed
        # on a resource. Maximum length of 200 characters.
        #
        # Example: &#x27;Holds production API key&#x27;
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Delete a Lien by `name`.

Callers of this method will require permission on the `parent` resource.
For example, a Lien with a `parent` of `projects/1234` requires permission
`resourcemanager.projects.updateLiens`.

Args:
  name: string, Required. The name/identifier of the Lien to delete. (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="get">get(name, x__xgafv=None)</code>
  <pre>Retrieve a Lien by `name`.

Callers of this method will require permission on the `parent` resource.
For example, a Lien with a `parent` of `projects/1234` requires permission
requires permission `resourcemanager.projects.get` or
`resourcemanager.projects.updateLiens`.

Args:
  name: string, Required. The name/identifier of the Lien. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Lien represents an encumbrance on the actions that can be performed on a
      # resource.
    &quot;origin&quot;: &quot;A String&quot;, # A stable, user-visible/meaningful string identifying the origin of the
        # Lien, intended to be inspected programmatically. Maximum length of 200
        # characters.
        #
        # Example: &#x27;compute.googleapis.com&#x27;
    &quot;createTime&quot;: &quot;A String&quot;, # The creation time of this Lien.
    &quot;name&quot;: &quot;A String&quot;, # A system-generated unique identifier for this Lien.
        #
        # Example: `liens/1234abcd`
    &quot;restrictions&quot;: [ # The types of operations which should be blocked as a result of this Lien.
        # Each value should correspond to an IAM permission. The server will
        # validate the permissions against those for which Liens are supported.
        #
        # An empty list is meaningless and will be rejected.
        #
        # Example: [&#x27;resourcemanager.projects.delete&#x27;]
      &quot;A String&quot;,
    ],
    &quot;parent&quot;: &quot;A String&quot;, # A reference to the resource this Lien is attached to. The server will
        # validate the parent against those for which Liens are supported.
        #
        # Example: `projects/1234`
    &quot;reason&quot;: &quot;A String&quot;, # Concise user-visible strings indicating why an action cannot be performed
        # on a resource. Maximum length of 200 characters.
        #
        # Example: &#x27;Holds production API key&#x27;
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(pageSize=None, parent=None, pageToken=None, x__xgafv=None)</code>
  <pre>List all Liens applied to the `parent` resource.

Callers of this method will require permission on the `parent` resource.
For example, a Lien with a `parent` of `projects/1234` requires permission
`resourcemanager.projects.get`.

Args:
  pageSize: integer, The maximum number of items to return. This is a suggestion for the server.
  parent: string, Required. The name of the resource to list all attached Liens.
For example, `projects/1234`.

(google.api.field_policy).resource_type annotation is not set since the
parent depends on the meta api implementation. This field could be a
project or other sub project resources.
  pageToken: string, The `next_page_token` value returned from a previous List request, if any.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response message for Liens.ListLiens.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more
        # results in the list.
    &quot;liens&quot;: [ # A list of Liens.
      { # A Lien represents an encumbrance on the actions that can be performed on a
          # resource.
        &quot;origin&quot;: &quot;A String&quot;, # A stable, user-visible/meaningful string identifying the origin of the
            # Lien, intended to be inspected programmatically. Maximum length of 200
            # characters.
            #
            # Example: &#x27;compute.googleapis.com&#x27;
        &quot;createTime&quot;: &quot;A String&quot;, # The creation time of this Lien.
        &quot;name&quot;: &quot;A String&quot;, # A system-generated unique identifier for this Lien.
            #
            # Example: `liens/1234abcd`
        &quot;restrictions&quot;: [ # The types of operations which should be blocked as a result of this Lien.
            # Each value should correspond to an IAM permission. The server will
            # validate the permissions against those for which Liens are supported.
            #
            # An empty list is meaningless and will be rejected.
            #
            # Example: [&#x27;resourcemanager.projects.delete&#x27;]
          &quot;A String&quot;,
        ],
        &quot;parent&quot;: &quot;A String&quot;, # A reference to the resource this Lien is attached to. The server will
            # validate the parent against those for which Liens are supported.
            #
            # Example: `projects/1234`
        &quot;reason&quot;: &quot;A String&quot;, # Concise user-visible strings indicating why an action cannot be performed
            # on a resource. Maximum length of 200 characters.
            #
            # Example: &#x27;Holds production API key&#x27;
      },
    ],
  }</pre>
</div>

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

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

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

</body></html>