<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="run_v1alpha1.html">Cloud Run API</a> . <a href="run_v1alpha1.projects.html">projects</a> . <a href="run_v1alpha1.projects.locations.html">locations</a> . <a href="run_v1alpha1.projects.locations.domainmappings.html">domainmappings</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new domain mapping.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, kind=None, propagationPolicy=None, orphanDependents=None, apiVersion=None, x__xgafv=None)</a></code></p>
<p class="firstline">Rpc to delete a domain mapping.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Rpc to get information about a domain mapping.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, labelSelector=None, includeUninitialized=None, x__xgafv=None, resourceVersion=None, limit=None, watch=None, continue=None, fieldSelector=None)</a></code></p>
<p class="firstline">Rpc to list domain mappings.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body, x__xgafv=None)</code>
  <pre>Creates a new domain mapping.

Args:
  parent: string, The project ID or project number in which this domain mapping should be
created. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Resource to hold the state and status of a user's domain mapping.
    "status": { # The current state of the Domain Mapping. # The current status of the DomainMapping.
      "observedGeneration": 42, # ObservedGeneration is the 'Generation' of the DomainMapping that
          # was last processed by the controller.
          #
          # Clients polling for completed reconciliation should poll until
          # observedGeneration = metadata.generation and the Ready condition's status
          # is True or False.
      "conditions": [ # Array of observed DomainMappingConditions, indicating the current state
          # of the DomainMapping.
        { # DomainMappingCondition contains state information for a DomainMapping.
          "status": "A String", # Status of the condition, one of True, False, Unknown.
          "severity": "A String", # How to interpret failures of this condition, one of Error, Warning, Info
              # +optional
          "lastTransitionTime": "A String", # Last time the condition transitioned from one status to another.
              # +optional
          "reason": "A String", # One-word CamelCase reason for the condition's current status.
              # +optional
          "message": "A String", # Human readable message indicating details about the current status.
              # +optional
          "type": "A String", # Type of domain mapping condition.
        },
      ],
      "resourceRecords": [ # The resource records required to configure this domain mapping. These
          # records must be added to the domain's DNS configuration in order to
          # serve the application via this domain mapping.
        { # A DNS resource record.
          "rrdata": "A String", # Data for this record. Values vary by record type, as defined in RFC 1035
              # (section 5) and RFC 1034 (section 3.6.1).
          "type": "A String", # Resource record type. Example: `AAAA`.
          "name": "A String", # Relative name of the object affected by this record. Only applicable for
              # `CNAME` records. Example: 'www'.
        },
      ],
      "mappedRouteName": "A String", # The name of the route that the mapping currently points to.
    },
    "kind": "A String", # The kind of resource, in this case "DomainMapping".
    "spec": { # The desired state of the Domain Mapping. # The spec for this DomainMapping.
      "routeName": "A String", # The name of the Knative Route that this DomainMapping applies to.
          # The route must exist.
      "forceOverride": True or False, # If set, the mapping will override any mapping set before this spec was set.
          # It is recommended that the user leaves this empty to receive an error
          # warning about a potential conflict and only set it once the respective UI
          # has given such a warning.
      "certificateMode": "A String", # The mode of the certificate.
    },
    "apiVersion": "A String", # The API version for this call such as "v1alpha1".
    "metadata": { # ObjectMeta is metadata that all persisted resources must have, which includes # Metadata associated with this BuildTemplate.
        # all objects users must create.
      "ownerReferences": [ # List of objects that own this object. If ALL objects in the list have
          # been deleted, this object will be garbage collected.
          # +optional
        { # OwnerReference contains enough information to let you identify an owning
            # object. Currently, an owning object must be in the same namespace, so there
            # is no namespace field.
          "kind": "A String", # Kind of the referent.
              # More info:
              # https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
          "uid": "A String", # UID of the referent.
              # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
          "apiVersion": "A String", # API version of the referent.
          "controller": True or False, # If true, this reference points to the managing controller.
              # +optional
          "blockOwnerDeletion": True or False, # If true, AND if the owner has the "foregroundDeletion" finalizer, then
              # the owner cannot be deleted from the key-value store until this
              # reference is removed.
              # Defaults to false.
              # To set this field, a user needs "delete" permission of the owner,
              # otherwise 422 (Unprocessable Entity) will be returned.
              # +optional
          "name": "A String", # Name of the referent.
              # More info: http://kubernetes.io/docs/user-guide/identifiers#names
        },
      ],
      "name": "A String", # Name must be unique within a namespace, within a Cloud Run region.
          # Is required when creating
          # resources, although some resources may allow a client to request the
          # generation of an appropriate name automatically. Name is primarily intended
          # for creation idempotence and configuration definition. Cannot be updated.
          # More info: http://kubernetes.io/docs/user-guide/identifiers#names
          # +optional
      "deletionTimestamp": "A String", # DeletionTimestamp is RFC 3339 date and time at which this resource will be
          # deleted. This field is set by the server when a graceful deletion is
          # requested by the user, and is not directly settable by a client. The
          # resource is expected to be deleted (no longer visible from resource lists,
          # and not reachable by name) after the time in this field, once the
          # finalizers list is empty. As long as the finalizers list contains items,
          # deletion is blocked. Once the deletionTimestamp is set, this value may not
          # be unset or be set further into the future, although it may be shortened or
          # the resource may be deleted prior to this time. For example, a user may
          # request that a pod is deleted in 30 seconds. The Kubelet will react by
          # sending a graceful termination signal to the containers in the pod. After
          # that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL)
          # to the container and after cleanup, remove the pod from the API. In the
          # presence of network partitions, this object may still exist after this
          # timestamp, until an administrator or automated process can determine the
          # resource is fully terminated.
          # If not set, graceful deletion of the object has not been requested.
          #
          # Populated by the system when a graceful deletion is requested.
          # Read-only.
          # More info:
          # https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
          # +optional
      "clusterName": "A String", # Not currently supported by Cloud Run.
          #
          # The name of the cluster which the object belongs to.
          # This is used to distinguish resources with same name and namespace in
          # different clusters. This field is not set anywhere right now and apiserver
          # is going to ignore it if set in create or update request. +optional
      "deletionGracePeriodSeconds": 42, # Not currently supported by Cloud Run.
          #
          # Number of seconds allowed for this object to gracefully terminate before
          # it will be removed from the system. Only set when deletionTimestamp is also
          # set. May only be shortened. Read-only. +optional
      "labels": { # Map of string keys and values that can be used to organize and categorize
          # (scope and select) objects. May match selectors of replication controllers
          # and routes.
          # More info: http://kubernetes.io/docs/user-guide/labels
          # +optional
        "a_key": "A String",
      },
      "namespace": "A String", # Namespace defines the space within each name must be unique, within a
          # Cloud Run region. In Cloud Run the namespace must be equal to either the
          # project ID or project number.
      "generation": 42, # A sequence number representing a specific generation of the desired state.
          # Populated by the system. Read-only.
          # +optional
      "finalizers": [ # Not currently supported by Cloud Run.
          #
          # Must be empty before the object is deleted from the registry. Each entry
          # is an identifier for the responsible component that will remove the entry
          # from the list. If the deletionTimestamp of the object is non-nil, entries
          # in this list can only be removed.
          # +optional
          # +patchStrategy=merge
        "A String",
      ],
      "initializers": { # Initializers tracks the progress of initialization. # Not currently supported by Cloud Run.
          #
          # An initializer is a controller which enforces some system invariant at
          # object creation time. This field is a list of initializers that have not
          # yet acted on this object. If nil or empty, this object has been completely
          # initialized. Otherwise, the object is considered uninitialized and is
          # hidden (in list/watch and get calls) from clients that haven't explicitly
          # asked to observe uninitialized objects.
          #
          # When an object is created, the system will populate this list with the
          # current set of initializers. Only privileged users may set or modify this
          # list. Once it is empty, it may not be modified further by any user.
        "pending": [ # Pending is a list of initializers that must execute in order before this
            # object is visible. When the last pending initializer is removed, and no
            # failing result is set, the initializers struct will be set to nil and the
            # object is considered as initialized and visible to all clients.
            # +patchMergeKey=name
            # +patchStrategy=merge
          { # Initializer is information about an initializer that has not yet completed.
            "name": "A String", # name of the process that is responsible for initializing this object.
          },
        ],
      },
      "resourceVersion": "A String", # An opaque value that represents the internal version of this object that
          # can be used by clients to determine when objects have changed. May be used
          # for optimistic concurrency, change detection, and the watch operation on a
          # resource or set of resources. Clients must treat these values as opaque and
          # passed unmodified back to the server. They may only be valid for a
          # particular resource or set of resources.
          #
          # Populated by the system.
          # Read-only.
          # Value must be treated as opaque by clients and .
          # More info:
          # https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency
          # +optional
      "generateName": "A String", # Not currently supported by Cloud Run.
          #
          # GenerateName is an optional prefix, used by the server, to generate a
          # unique name ONLY IF the Name field has not been provided. If this field is
          # used, the name returned to the client will be different than the name
          # passed. This value will also be combined with a unique suffix. The provided
          # value has the same validation rules as the Name field, and may be truncated
          # by the length of the suffix required to make the value unique on the
          # server.
          #
          # If this field is specified and the generated name exists, the server will
          # NOT return a 409 - instead, it will either return 201 Created or 500 with
          # Reason ServerTimeout indicating a unique name could not be found in the
          # time allotted, and the client should retry (optionally after the time
          # indicated in the Retry-After header).
          #
          # Applied only if Name is not specified.
          # More info:
          # https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency
          # +optional
          #  string generateName = 2;
      "creationTimestamp": "A String", # CreationTimestamp is a timestamp representing the server time when this
          # object was created. It is not guaranteed to be set in happens-before order
          # across separate operations. Clients may not set this value. It is
          # represented in RFC3339 form and is in UTC.
          #
          # Populated by the system.
          # Read-only.
          # Null for lists.
          # More info:
          # https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
          # +optional
      "annotations": { # Annotations is an unstructured key value map stored with a resource that
          # may be set by external tools to store and retrieve arbitrary metadata. They
          # are not queryable and should be preserved when modifying objects. More
          # info: http://kubernetes.io/docs/user-guide/annotations +optional
        "a_key": "A String",
      },
      "selfLink": "A String", # SelfLink is a URL representing this object.
          # Populated by the system.
          # Read-only.
          # +optional
          #  string selfLink = 4;
      "uid": "A String", # UID is the unique in time and space value for this object. It is typically
          # generated by the server on successful creation of a resource and is not
          # allowed to change on PUT operations.
          #
          # Populated by the system.
          # Read-only.
          # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
          # +optional
    },
  }

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

Returns:
  An object of the form:

    { # Resource to hold the state and status of a user's domain mapping.
      "status": { # The current state of the Domain Mapping. # The current status of the DomainMapping.
        "observedGeneration": 42, # ObservedGeneration is the 'Generation' of the DomainMapping that
            # was last processed by the controller.
            #
            # Clients polling for completed reconciliation should poll until
            # observedGeneration = metadata.generation and the Ready condition's status
            # is True or False.
        "conditions": [ # Array of observed DomainMappingConditions, indicating the current state
            # of the DomainMapping.
          { # DomainMappingCondition contains state information for a DomainMapping.
            "status": "A String", # Status of the condition, one of True, False, Unknown.
            "severity": "A String", # How to interpret failures of this condition, one of Error, Warning, Info
                # +optional
            "lastTransitionTime": "A String", # Last time the condition transitioned from one status to another.
                # +optional
            "reason": "A String", # One-word CamelCase reason for the condition's current status.
                # +optional
            "message": "A String", # Human readable message indicating details about the current status.
                # +optional
            "type": "A String", # Type of domain mapping condition.
          },
        ],
        "resourceRecords": [ # The resource records required to configure this domain mapping. These
            # records must be added to the domain's DNS configuration in order to
            # serve the application via this domain mapping.
          { # A DNS resource record.
            "rrdata": "A String", # Data for this record. Values vary by record type, as defined in RFC 1035
                # (section 5) and RFC 1034 (section 3.6.1).
            "type": "A String", # Resource record type. Example: `AAAA`.
            "name": "A String", # Relative name of the object affected by this record. Only applicable for
                # `CNAME` records. Example: 'www'.
          },
        ],
        "mappedRouteName": "A String", # The name of the route that the mapping currently points to.
      },
      "kind": "A String", # The kind of resource, in this case "DomainMapping".
      "spec": { # The desired state of the Domain Mapping. # The spec for this DomainMapping.
        "routeName": "A String", # The name of the Knative Route that this DomainMapping applies to.
            # The route must exist.
        "forceOverride": True or False, # If set, the mapping will override any mapping set before this spec was set.
            # It is recommended that the user leaves this empty to receive an error
            # warning about a potential conflict and only set it once the respective UI
            # has given such a warning.
        "certificateMode": "A String", # The mode of the certificate.
      },
      "apiVersion": "A String", # The API version for this call such as "v1alpha1".
      "metadata": { # ObjectMeta is metadata that all persisted resources must have, which includes # Metadata associated with this BuildTemplate.
          # all objects users must create.
        "ownerReferences": [ # List of objects that own this object. If ALL objects in the list have
            # been deleted, this object will be garbage collected.
            # +optional
          { # OwnerReference contains enough information to let you identify an owning
              # object. Currently, an owning object must be in the same namespace, so there
              # is no namespace field.
            "kind": "A String", # Kind of the referent.
                # More info:
                # https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
            "uid": "A String", # UID of the referent.
                # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
            "apiVersion": "A String", # API version of the referent.
            "controller": True or False, # If true, this reference points to the managing controller.
                # +optional
            "blockOwnerDeletion": True or False, # If true, AND if the owner has the "foregroundDeletion" finalizer, then
                # the owner cannot be deleted from the key-value store until this
                # reference is removed.
                # Defaults to false.
                # To set this field, a user needs "delete" permission of the owner,
                # otherwise 422 (Unprocessable Entity) will be returned.
                # +optional
            "name": "A String", # Name of the referent.
                # More info: http://kubernetes.io/docs/user-guide/identifiers#names
          },
        ],
        "name": "A String", # Name must be unique within a namespace, within a Cloud Run region.
            # Is required when creating
            # resources, although some resources may allow a client to request the
            # generation of an appropriate name automatically. Name is primarily intended
            # for creation idempotence and configuration definition. Cannot be updated.
            # More info: http://kubernetes.io/docs/user-guide/identifiers#names
            # +optional
        "deletionTimestamp": "A String", # DeletionTimestamp is RFC 3339 date and time at which this resource will be
            # deleted. This field is set by the server when a graceful deletion is
            # requested by the user, and is not directly settable by a client. The
            # resource is expected to be deleted (no longer visible from resource lists,
            # and not reachable by name) after the time in this field, once the
            # finalizers list is empty. As long as the finalizers list contains items,
            # deletion is blocked. Once the deletionTimestamp is set, this value may not
            # be unset or be set further into the future, although it may be shortened or
            # the resource may be deleted prior to this time. For example, a user may
            # request that a pod is deleted in 30 seconds. The Kubelet will react by
            # sending a graceful termination signal to the containers in the pod. After
            # that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL)
            # to the container and after cleanup, remove the pod from the API. In the
            # presence of network partitions, this object may still exist after this
            # timestamp, until an administrator or automated process can determine the
            # resource is fully terminated.
            # If not set, graceful deletion of the object has not been requested.
            #
            # Populated by the system when a graceful deletion is requested.
            # Read-only.
            # More info:
            # https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
            # +optional
        "clusterName": "A String", # Not currently supported by Cloud Run.
            #
            # The name of the cluster which the object belongs to.
            # This is used to distinguish resources with same name and namespace in
            # different clusters. This field is not set anywhere right now and apiserver
            # is going to ignore it if set in create or update request. +optional
        "deletionGracePeriodSeconds": 42, # Not currently supported by Cloud Run.
            #
            # Number of seconds allowed for this object to gracefully terminate before
            # it will be removed from the system. Only set when deletionTimestamp is also
            # set. May only be shortened. Read-only. +optional
        "labels": { # Map of string keys and values that can be used to organize and categorize
            # (scope and select) objects. May match selectors of replication controllers
            # and routes.
            # More info: http://kubernetes.io/docs/user-guide/labels
            # +optional
          "a_key": "A String",
        },
        "namespace": "A String", # Namespace defines the space within each name must be unique, within a
            # Cloud Run region. In Cloud Run the namespace must be equal to either the
            # project ID or project number.
        "generation": 42, # A sequence number representing a specific generation of the desired state.
            # Populated by the system. Read-only.
            # +optional
        "finalizers": [ # Not currently supported by Cloud Run.
            #
            # Must be empty before the object is deleted from the registry. Each entry
            # is an identifier for the responsible component that will remove the entry
            # from the list. If the deletionTimestamp of the object is non-nil, entries
            # in this list can only be removed.
            # +optional
            # +patchStrategy=merge
          "A String",
        ],
        "initializers": { # Initializers tracks the progress of initialization. # Not currently supported by Cloud Run.
            #
            # An initializer is a controller which enforces some system invariant at
            # object creation time. This field is a list of initializers that have not
            # yet acted on this object. If nil or empty, this object has been completely
            # initialized. Otherwise, the object is considered uninitialized and is
            # hidden (in list/watch and get calls) from clients that haven't explicitly
            # asked to observe uninitialized objects.
            #
            # When an object is created, the system will populate this list with the
            # current set of initializers. Only privileged users may set or modify this
            # list. Once it is empty, it may not be modified further by any user.
          "pending": [ # Pending is a list of initializers that must execute in order before this
              # object is visible. When the last pending initializer is removed, and no
              # failing result is set, the initializers struct will be set to nil and the
              # object is considered as initialized and visible to all clients.
              # +patchMergeKey=name
              # +patchStrategy=merge
            { # Initializer is information about an initializer that has not yet completed.
              "name": "A String", # name of the process that is responsible for initializing this object.
            },
          ],
        },
        "resourceVersion": "A String", # An opaque value that represents the internal version of this object that
            # can be used by clients to determine when objects have changed. May be used
            # for optimistic concurrency, change detection, and the watch operation on a
            # resource or set of resources. Clients must treat these values as opaque and
            # passed unmodified back to the server. They may only be valid for a
            # particular resource or set of resources.
            #
            # Populated by the system.
            # Read-only.
            # Value must be treated as opaque by clients and .
            # More info:
            # https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency
            # +optional
        "generateName": "A String", # Not currently supported by Cloud Run.
            #
            # GenerateName is an optional prefix, used by the server, to generate a
            # unique name ONLY IF the Name field has not been provided. If this field is
            # used, the name returned to the client will be different than the name
            # passed. This value will also be combined with a unique suffix. The provided
            # value has the same validation rules as the Name field, and may be truncated
            # by the length of the suffix required to make the value unique on the
            # server.
            #
            # If this field is specified and the generated name exists, the server will
            # NOT return a 409 - instead, it will either return 201 Created or 500 with
            # Reason ServerTimeout indicating a unique name could not be found in the
            # time allotted, and the client should retry (optionally after the time
            # indicated in the Retry-After header).
            #
            # Applied only if Name is not specified.
            # More info:
            # https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency
            # +optional
            #  string generateName = 2;
        "creationTimestamp": "A String", # CreationTimestamp is a timestamp representing the server time when this
            # object was created. It is not guaranteed to be set in happens-before order
            # across separate operations. Clients may not set this value. It is
            # represented in RFC3339 form and is in UTC.
            #
            # Populated by the system.
            # Read-only.
            # Null for lists.
            # More info:
            # https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
            # +optional
        "annotations": { # Annotations is an unstructured key value map stored with a resource that
            # may be set by external tools to store and retrieve arbitrary metadata. They
            # are not queryable and should be preserved when modifying objects. More
            # info: http://kubernetes.io/docs/user-guide/annotations +optional
          "a_key": "A String",
        },
        "selfLink": "A String", # SelfLink is a URL representing this object.
            # Populated by the system.
            # Read-only.
            # +optional
            #  string selfLink = 4;
        "uid": "A String", # UID is the unique in time and space value for this object. It is typically
            # generated by the server on successful creation of a resource and is not
            # allowed to change on PUT operations.
            #
            # Populated by the system.
            # Read-only.
            # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
            # +optional
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, kind=None, propagationPolicy=None, orphanDependents=None, apiVersion=None, x__xgafv=None)</code>
  <pre>Rpc to delete a domain mapping.

Args:
  name: string, The name of the domain mapping being deleted. If needed, replace
{namespace_id} with the project ID. (required)
  kind: string, Cloud Run currently ignores this parameter.
  propagationPolicy: string, Specifies the propagation policy of delete. Cloud Run currently ignores
this setting, and deletes in the background. Please see
kubernetes.io/docs/concepts/workloads/controllers/garbage-collection/ for
more information.
  orphanDependents: boolean, Deprecated.
Specifies the cascade behavior on delete.
Cloud Run only supports cascading behavior, so this must be false.
This attribute is deprecated, and is now replaced with PropagationPolicy
See https://github.com/kubernetes/kubernetes/issues/46659 for more info.
  apiVersion: string, Cloud Run currently ignores this parameter.
  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>Rpc to get information about a domain mapping.

Args:
  name: string, The name of the domain mapping being retrieved. If needed, replace
{namespace_id} with the project ID. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Resource to hold the state and status of a user's domain mapping.
      "status": { # The current state of the Domain Mapping. # The current status of the DomainMapping.
        "observedGeneration": 42, # ObservedGeneration is the 'Generation' of the DomainMapping that
            # was last processed by the controller.
            #
            # Clients polling for completed reconciliation should poll until
            # observedGeneration = metadata.generation and the Ready condition's status
            # is True or False.
        "conditions": [ # Array of observed DomainMappingConditions, indicating the current state
            # of the DomainMapping.
          { # DomainMappingCondition contains state information for a DomainMapping.
            "status": "A String", # Status of the condition, one of True, False, Unknown.
            "severity": "A String", # How to interpret failures of this condition, one of Error, Warning, Info
                # +optional
            "lastTransitionTime": "A String", # Last time the condition transitioned from one status to another.
                # +optional
            "reason": "A String", # One-word CamelCase reason for the condition's current status.
                # +optional
            "message": "A String", # Human readable message indicating details about the current status.
                # +optional
            "type": "A String", # Type of domain mapping condition.
          },
        ],
        "resourceRecords": [ # The resource records required to configure this domain mapping. These
            # records must be added to the domain's DNS configuration in order to
            # serve the application via this domain mapping.
          { # A DNS resource record.
            "rrdata": "A String", # Data for this record. Values vary by record type, as defined in RFC 1035
                # (section 5) and RFC 1034 (section 3.6.1).
            "type": "A String", # Resource record type. Example: `AAAA`.
            "name": "A String", # Relative name of the object affected by this record. Only applicable for
                # `CNAME` records. Example: 'www'.
          },
        ],
        "mappedRouteName": "A String", # The name of the route that the mapping currently points to.
      },
      "kind": "A String", # The kind of resource, in this case "DomainMapping".
      "spec": { # The desired state of the Domain Mapping. # The spec for this DomainMapping.
        "routeName": "A String", # The name of the Knative Route that this DomainMapping applies to.
            # The route must exist.
        "forceOverride": True or False, # If set, the mapping will override any mapping set before this spec was set.
            # It is recommended that the user leaves this empty to receive an error
            # warning about a potential conflict and only set it once the respective UI
            # has given such a warning.
        "certificateMode": "A String", # The mode of the certificate.
      },
      "apiVersion": "A String", # The API version for this call such as "v1alpha1".
      "metadata": { # ObjectMeta is metadata that all persisted resources must have, which includes # Metadata associated with this BuildTemplate.
          # all objects users must create.
        "ownerReferences": [ # List of objects that own this object. If ALL objects in the list have
            # been deleted, this object will be garbage collected.
            # +optional
          { # OwnerReference contains enough information to let you identify an owning
              # object. Currently, an owning object must be in the same namespace, so there
              # is no namespace field.
            "kind": "A String", # Kind of the referent.
                # More info:
                # https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
            "uid": "A String", # UID of the referent.
                # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
            "apiVersion": "A String", # API version of the referent.
            "controller": True or False, # If true, this reference points to the managing controller.
                # +optional
            "blockOwnerDeletion": True or False, # If true, AND if the owner has the "foregroundDeletion" finalizer, then
                # the owner cannot be deleted from the key-value store until this
                # reference is removed.
                # Defaults to false.
                # To set this field, a user needs "delete" permission of the owner,
                # otherwise 422 (Unprocessable Entity) will be returned.
                # +optional
            "name": "A String", # Name of the referent.
                # More info: http://kubernetes.io/docs/user-guide/identifiers#names
          },
        ],
        "name": "A String", # Name must be unique within a namespace, within a Cloud Run region.
            # Is required when creating
            # resources, although some resources may allow a client to request the
            # generation of an appropriate name automatically. Name is primarily intended
            # for creation idempotence and configuration definition. Cannot be updated.
            # More info: http://kubernetes.io/docs/user-guide/identifiers#names
            # +optional
        "deletionTimestamp": "A String", # DeletionTimestamp is RFC 3339 date and time at which this resource will be
            # deleted. This field is set by the server when a graceful deletion is
            # requested by the user, and is not directly settable by a client. The
            # resource is expected to be deleted (no longer visible from resource lists,
            # and not reachable by name) after the time in this field, once the
            # finalizers list is empty. As long as the finalizers list contains items,
            # deletion is blocked. Once the deletionTimestamp is set, this value may not
            # be unset or be set further into the future, although it may be shortened or
            # the resource may be deleted prior to this time. For example, a user may
            # request that a pod is deleted in 30 seconds. The Kubelet will react by
            # sending a graceful termination signal to the containers in the pod. After
            # that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL)
            # to the container and after cleanup, remove the pod from the API. In the
            # presence of network partitions, this object may still exist after this
            # timestamp, until an administrator or automated process can determine the
            # resource is fully terminated.
            # If not set, graceful deletion of the object has not been requested.
            #
            # Populated by the system when a graceful deletion is requested.
            # Read-only.
            # More info:
            # https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
            # +optional
        "clusterName": "A String", # Not currently supported by Cloud Run.
            #
            # The name of the cluster which the object belongs to.
            # This is used to distinguish resources with same name and namespace in
            # different clusters. This field is not set anywhere right now and apiserver
            # is going to ignore it if set in create or update request. +optional
        "deletionGracePeriodSeconds": 42, # Not currently supported by Cloud Run.
            #
            # Number of seconds allowed for this object to gracefully terminate before
            # it will be removed from the system. Only set when deletionTimestamp is also
            # set. May only be shortened. Read-only. +optional
        "labels": { # Map of string keys and values that can be used to organize and categorize
            # (scope and select) objects. May match selectors of replication controllers
            # and routes.
            # More info: http://kubernetes.io/docs/user-guide/labels
            # +optional
          "a_key": "A String",
        },
        "namespace": "A String", # Namespace defines the space within each name must be unique, within a
            # Cloud Run region. In Cloud Run the namespace must be equal to either the
            # project ID or project number.
        "generation": 42, # A sequence number representing a specific generation of the desired state.
            # Populated by the system. Read-only.
            # +optional
        "finalizers": [ # Not currently supported by Cloud Run.
            #
            # Must be empty before the object is deleted from the registry. Each entry
            # is an identifier for the responsible component that will remove the entry
            # from the list. If the deletionTimestamp of the object is non-nil, entries
            # in this list can only be removed.
            # +optional
            # +patchStrategy=merge
          "A String",
        ],
        "initializers": { # Initializers tracks the progress of initialization. # Not currently supported by Cloud Run.
            #
            # An initializer is a controller which enforces some system invariant at
            # object creation time. This field is a list of initializers that have not
            # yet acted on this object. If nil or empty, this object has been completely
            # initialized. Otherwise, the object is considered uninitialized and is
            # hidden (in list/watch and get calls) from clients that haven't explicitly
            # asked to observe uninitialized objects.
            #
            # When an object is created, the system will populate this list with the
            # current set of initializers. Only privileged users may set or modify this
            # list. Once it is empty, it may not be modified further by any user.
          "pending": [ # Pending is a list of initializers that must execute in order before this
              # object is visible. When the last pending initializer is removed, and no
              # failing result is set, the initializers struct will be set to nil and the
              # object is considered as initialized and visible to all clients.
              # +patchMergeKey=name
              # +patchStrategy=merge
            { # Initializer is information about an initializer that has not yet completed.
              "name": "A String", # name of the process that is responsible for initializing this object.
            },
          ],
        },
        "resourceVersion": "A String", # An opaque value that represents the internal version of this object that
            # can be used by clients to determine when objects have changed. May be used
            # for optimistic concurrency, change detection, and the watch operation on a
            # resource or set of resources. Clients must treat these values as opaque and
            # passed unmodified back to the server. They may only be valid for a
            # particular resource or set of resources.
            #
            # Populated by the system.
            # Read-only.
            # Value must be treated as opaque by clients and .
            # More info:
            # https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency
            # +optional
        "generateName": "A String", # Not currently supported by Cloud Run.
            #
            # GenerateName is an optional prefix, used by the server, to generate a
            # unique name ONLY IF the Name field has not been provided. If this field is
            # used, the name returned to the client will be different than the name
            # passed. This value will also be combined with a unique suffix. The provided
            # value has the same validation rules as the Name field, and may be truncated
            # by the length of the suffix required to make the value unique on the
            # server.
            #
            # If this field is specified and the generated name exists, the server will
            # NOT return a 409 - instead, it will either return 201 Created or 500 with
            # Reason ServerTimeout indicating a unique name could not be found in the
            # time allotted, and the client should retry (optionally after the time
            # indicated in the Retry-After header).
            #
            # Applied only if Name is not specified.
            # More info:
            # https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency
            # +optional
            #  string generateName = 2;
        "creationTimestamp": "A String", # CreationTimestamp is a timestamp representing the server time when this
            # object was created. It is not guaranteed to be set in happens-before order
            # across separate operations. Clients may not set this value. It is
            # represented in RFC3339 form and is in UTC.
            #
            # Populated by the system.
            # Read-only.
            # Null for lists.
            # More info:
            # https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
            # +optional
        "annotations": { # Annotations is an unstructured key value map stored with a resource that
            # may be set by external tools to store and retrieve arbitrary metadata. They
            # are not queryable and should be preserved when modifying objects. More
            # info: http://kubernetes.io/docs/user-guide/annotations +optional
          "a_key": "A String",
        },
        "selfLink": "A String", # SelfLink is a URL representing this object.
            # Populated by the system.
            # Read-only.
            # +optional
            #  string selfLink = 4;
        "uid": "A String", # UID is the unique in time and space value for this object. It is typically
            # generated by the server on successful creation of a resource and is not
            # allowed to change on PUT operations.
            #
            # Populated by the system.
            # Read-only.
            # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
            # +optional
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, labelSelector=None, includeUninitialized=None, x__xgafv=None, resourceVersion=None, limit=None, watch=None, continue=None, fieldSelector=None)</code>
  <pre>Rpc to list domain mappings.

Args:
  parent: string, The project ID or project number from which the domain mappings should be
listed. (required)
  labelSelector: string, Allows to filter resources based on a label. Supported operations are
=, !=, exists, in, and notIn.
  includeUninitialized: boolean, Not currently used by Cloud Run.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  resourceVersion: string, The baseline resource version from which the list or watch operation should
start. Not currently used by Cloud Run.
  limit: integer, The maximum number of records that should be returned.
  watch: boolean, Flag that indicates that the client expects to watch this resource as well.
Not currently used by Cloud Run.
  continue: string, Optional encoded string to continue paging.
  fieldSelector: string, Allows to filter resources based on a specific value for a field name.
Send this in a query string format. i.e. 'metadata.name%3Dlorem'.
Not currently used by Cloud Run.

Returns:
  An object of the form:

    { # ListDomainMappingsResponse is a list of DomainMapping resources.
    "items": [ # List of DomainMappings.
      { # Resource to hold the state and status of a user's domain mapping.
          "status": { # The current state of the Domain Mapping. # The current status of the DomainMapping.
            "observedGeneration": 42, # ObservedGeneration is the 'Generation' of the DomainMapping that
                # was last processed by the controller.
                #
                # Clients polling for completed reconciliation should poll until
                # observedGeneration = metadata.generation and the Ready condition's status
                # is True or False.
            "conditions": [ # Array of observed DomainMappingConditions, indicating the current state
                # of the DomainMapping.
              { # DomainMappingCondition contains state information for a DomainMapping.
                "status": "A String", # Status of the condition, one of True, False, Unknown.
                "severity": "A String", # How to interpret failures of this condition, one of Error, Warning, Info
                    # +optional
                "lastTransitionTime": "A String", # Last time the condition transitioned from one status to another.
                    # +optional
                "reason": "A String", # One-word CamelCase reason for the condition's current status.
                    # +optional
                "message": "A String", # Human readable message indicating details about the current status.
                    # +optional
                "type": "A String", # Type of domain mapping condition.
              },
            ],
            "resourceRecords": [ # The resource records required to configure this domain mapping. These
                # records must be added to the domain's DNS configuration in order to
                # serve the application via this domain mapping.
              { # A DNS resource record.
                "rrdata": "A String", # Data for this record. Values vary by record type, as defined in RFC 1035
                    # (section 5) and RFC 1034 (section 3.6.1).
                "type": "A String", # Resource record type. Example: `AAAA`.
                "name": "A String", # Relative name of the object affected by this record. Only applicable for
                    # `CNAME` records. Example: 'www'.
              },
            ],
            "mappedRouteName": "A String", # The name of the route that the mapping currently points to.
          },
          "kind": "A String", # The kind of resource, in this case "DomainMapping".
          "spec": { # The desired state of the Domain Mapping. # The spec for this DomainMapping.
            "routeName": "A String", # The name of the Knative Route that this DomainMapping applies to.
                # The route must exist.
            "forceOverride": True or False, # If set, the mapping will override any mapping set before this spec was set.
                # It is recommended that the user leaves this empty to receive an error
                # warning about a potential conflict and only set it once the respective UI
                # has given such a warning.
            "certificateMode": "A String", # The mode of the certificate.
          },
          "apiVersion": "A String", # The API version for this call such as "v1alpha1".
          "metadata": { # ObjectMeta is metadata that all persisted resources must have, which includes # Metadata associated with this BuildTemplate.
              # all objects users must create.
            "ownerReferences": [ # List of objects that own this object. If ALL objects in the list have
                # been deleted, this object will be garbage collected.
                # +optional
              { # OwnerReference contains enough information to let you identify an owning
                  # object. Currently, an owning object must be in the same namespace, so there
                  # is no namespace field.
                "kind": "A String", # Kind of the referent.
                    # More info:
                    # https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
                "uid": "A String", # UID of the referent.
                    # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
                "apiVersion": "A String", # API version of the referent.
                "controller": True or False, # If true, this reference points to the managing controller.
                    # +optional
                "blockOwnerDeletion": True or False, # If true, AND if the owner has the "foregroundDeletion" finalizer, then
                    # the owner cannot be deleted from the key-value store until this
                    # reference is removed.
                    # Defaults to false.
                    # To set this field, a user needs "delete" permission of the owner,
                    # otherwise 422 (Unprocessable Entity) will be returned.
                    # +optional
                "name": "A String", # Name of the referent.
                    # More info: http://kubernetes.io/docs/user-guide/identifiers#names
              },
            ],
            "name": "A String", # Name must be unique within a namespace, within a Cloud Run region.
                # Is required when creating
                # resources, although some resources may allow a client to request the
                # generation of an appropriate name automatically. Name is primarily intended
                # for creation idempotence and configuration definition. Cannot be updated.
                # More info: http://kubernetes.io/docs/user-guide/identifiers#names
                # +optional
            "deletionTimestamp": "A String", # DeletionTimestamp is RFC 3339 date and time at which this resource will be
                # deleted. This field is set by the server when a graceful deletion is
                # requested by the user, and is not directly settable by a client. The
                # resource is expected to be deleted (no longer visible from resource lists,
                # and not reachable by name) after the time in this field, once the
                # finalizers list is empty. As long as the finalizers list contains items,
                # deletion is blocked. Once the deletionTimestamp is set, this value may not
                # be unset or be set further into the future, although it may be shortened or
                # the resource may be deleted prior to this time. For example, a user may
                # request that a pod is deleted in 30 seconds. The Kubelet will react by
                # sending a graceful termination signal to the containers in the pod. After
                # that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL)
                # to the container and after cleanup, remove the pod from the API. In the
                # presence of network partitions, this object may still exist after this
                # timestamp, until an administrator or automated process can determine the
                # resource is fully terminated.
                # If not set, graceful deletion of the object has not been requested.
                #
                # Populated by the system when a graceful deletion is requested.
                # Read-only.
                # More info:
                # https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
                # +optional
            "clusterName": "A String", # Not currently supported by Cloud Run.
                #
                # The name of the cluster which the object belongs to.
                # This is used to distinguish resources with same name and namespace in
                # different clusters. This field is not set anywhere right now and apiserver
                # is going to ignore it if set in create or update request. +optional
            "deletionGracePeriodSeconds": 42, # Not currently supported by Cloud Run.
                #
                # Number of seconds allowed for this object to gracefully terminate before
                # it will be removed from the system. Only set when deletionTimestamp is also
                # set. May only be shortened. Read-only. +optional
            "labels": { # Map of string keys and values that can be used to organize and categorize
                # (scope and select) objects. May match selectors of replication controllers
                # and routes.
                # More info: http://kubernetes.io/docs/user-guide/labels
                # +optional
              "a_key": "A String",
            },
            "namespace": "A String", # Namespace defines the space within each name must be unique, within a
                # Cloud Run region. In Cloud Run the namespace must be equal to either the
                # project ID or project number.
            "generation": 42, # A sequence number representing a specific generation of the desired state.
                # Populated by the system. Read-only.
                # +optional
            "finalizers": [ # Not currently supported by Cloud Run.
                #
                # Must be empty before the object is deleted from the registry. Each entry
                # is an identifier for the responsible component that will remove the entry
                # from the list. If the deletionTimestamp of the object is non-nil, entries
                # in this list can only be removed.
                # +optional
                # +patchStrategy=merge
              "A String",
            ],
            "initializers": { # Initializers tracks the progress of initialization. # Not currently supported by Cloud Run.
                #
                # An initializer is a controller which enforces some system invariant at
                # object creation time. This field is a list of initializers that have not
                # yet acted on this object. If nil or empty, this object has been completely
                # initialized. Otherwise, the object is considered uninitialized and is
                # hidden (in list/watch and get calls) from clients that haven't explicitly
                # asked to observe uninitialized objects.
                #
                # When an object is created, the system will populate this list with the
                # current set of initializers. Only privileged users may set or modify this
                # list. Once it is empty, it may not be modified further by any user.
              "pending": [ # Pending is a list of initializers that must execute in order before this
                  # object is visible. When the last pending initializer is removed, and no
                  # failing result is set, the initializers struct will be set to nil and the
                  # object is considered as initialized and visible to all clients.
                  # +patchMergeKey=name
                  # +patchStrategy=merge
                { # Initializer is information about an initializer that has not yet completed.
                  "name": "A String", # name of the process that is responsible for initializing this object.
                },
              ],
            },
            "resourceVersion": "A String", # An opaque value that represents the internal version of this object that
                # can be used by clients to determine when objects have changed. May be used
                # for optimistic concurrency, change detection, and the watch operation on a
                # resource or set of resources. Clients must treat these values as opaque and
                # passed unmodified back to the server. They may only be valid for a
                # particular resource or set of resources.
                #
                # Populated by the system.
                # Read-only.
                # Value must be treated as opaque by clients and .
                # More info:
                # https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency
                # +optional
            "generateName": "A String", # Not currently supported by Cloud Run.
                #
                # GenerateName is an optional prefix, used by the server, to generate a
                # unique name ONLY IF the Name field has not been provided. If this field is
                # used, the name returned to the client will be different than the name
                # passed. This value will also be combined with a unique suffix. The provided
                # value has the same validation rules as the Name field, and may be truncated
                # by the length of the suffix required to make the value unique on the
                # server.
                #
                # If this field is specified and the generated name exists, the server will
                # NOT return a 409 - instead, it will either return 201 Created or 500 with
                # Reason ServerTimeout indicating a unique name could not be found in the
                # time allotted, and the client should retry (optionally after the time
                # indicated in the Retry-After header).
                #
                # Applied only if Name is not specified.
                # More info:
                # https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency
                # +optional
                #  string generateName = 2;
            "creationTimestamp": "A String", # CreationTimestamp is a timestamp representing the server time when this
                # object was created. It is not guaranteed to be set in happens-before order
                # across separate operations. Clients may not set this value. It is
                # represented in RFC3339 form and is in UTC.
                #
                # Populated by the system.
                # Read-only.
                # Null for lists.
                # More info:
                # https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
                # +optional
            "annotations": { # Annotations is an unstructured key value map stored with a resource that
                # may be set by external tools to store and retrieve arbitrary metadata. They
                # are not queryable and should be preserved when modifying objects. More
                # info: http://kubernetes.io/docs/user-guide/annotations +optional
              "a_key": "A String",
            },
            "selfLink": "A String", # SelfLink is a URL representing this object.
                # Populated by the system.
                # Read-only.
                # +optional
                #  string selfLink = 4;
            "uid": "A String", # UID is the unique in time and space value for this object. It is typically
                # generated by the server on successful creation of a resource and is not
                # allowed to change on PUT operations.
                #
                # Populated by the system.
                # Read-only.
                # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
                # +optional
          },
        },
    ],
    "kind": "A String", # The kind of this resource, in this case "DomainMappingList".
    "apiVersion": "A String", # The API version for this call such as "v1alpha1".
    "metadata": { # ListMeta describes metadata that synthetic resources must have, including # Metadata associated with this DomainMapping list.
        # lists and various status objects. A resource may have only one of
        # {ObjectMeta, ListMeta}.
      "continue": "A String", # continue may be set if the user set a limit on the number of items
          # returned, and indicates that the server has more data available. The value
          # is opaque and may be used to issue another request to the endpoint that
          # served this list to retrieve the next set of available objects. Continuing
          # a list may not be possible if the server configuration has changed or more
          # than a few minutes have passed. The resourceVersion field returned when
          # using this continue value will be identical to the value in the first
          # response.
      "selfLink": "A String", # SelfLink is a URL representing this object.
          # Populated by the system.
          # Read-only.
          # +optional
      "resourceVersion": "A String", # String that identifies the server's internal version of this object that
          # can be used by clients to determine when objects have changed. Value must
          # be treated as opaque by clients and passed unmodified back to the server.
          # Populated by the system.
          # Read-only.
          # More info:
          # https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency
          # +optional
    },
  }</pre>
</div>

</body></html>