<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.namespaces.html">namespaces</a> . <a href="run_v1alpha1.namespaces.revisions.html">revisions</a></h1>
<h2>Instance Methods</h2>
<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 revision.</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 revision.</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 revisions.</p>
<h3>Method Details</h3>
<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 revision.

Args:
  name: string, The name of the revision 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 revision.

Args:
  name: string, The name of the revision 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:

    { # Revision is an immutable snapshot of code and configuration.  A revision
      # references a container image. Revisions are created by updates to a
      # Configuration.
      #
      # Cloud Run does not currently support referencing a build that is responsible
      # for materializing the container image from source.
      #
      # See also:
      # https://github.com/knative/serving/blob/master/docs/spec/overview.md#revision
    "status": { # RevisionStatus communicates the observed state of the Revision (from the # Status communicates the observed state of the Revision (from the
        # controller).
        # controller).
      "observedGeneration": 42, # ObservedGeneration is the 'Generation' of the Revision 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.
      "imageDigest": "A String", # ImageDigest holds the resolved digest for the image specified
          # within .Spec.Container.Image. The digest is resolved during the creation
          # of Revision. This field holds the digest value regardless of whether
          # a tag or digest was originally specified in the Container object.
      "serviceName": "A String", # Not currently used by Cloud Run.
      "conditions": [ # Conditions communicates information about ongoing/complete
          # reconciliation processes that bring the "spec" inline with the observed
          # state of the world.
          #
          # As a Revision is being prepared, it will incrementally
          # update conditions "ResourcesAvailable", "ContainerHealthy", and "Active",
          # which contribute to the overall "Ready" condition.
        { # RevisionCondition defines a readiness condition for a Revision.
          "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 last transition.
              # +optional
          "message": "A String", # Human readable message indicating details about the current status.
              # +optional
          "type": "A String", # RevisionConditionType is used to communicate the status of the
              # reconciliation process. See also:
              # https://github.com/knative/serving/blob/master/docs/spec/errors.md#error-conditions-and-reporting
              # Types include:
              #
              # * "Ready": True when the Revision is ready.
              # * "ResourcesAvailable": True when underlying resources have been
              # provisioned.
              # * "ContainerHealthy": True when the Revision readiness check completes.
              # * "Active": True when the Revision may receive traffic.
        },
      ],
      "logUrl": "A String", # Specifies the generated logging url for this particular revision
          # based on the revision url template specified in the controller's config.
          # +optional
    },
    "kind": "A String", # The kind of this resource, in this case "Revision".
    "spec": { # RevisionSpec holds the desired state of the Revision (from the client). # Spec holds the desired state of the Revision (from the client).
      "container": { # A single application container. # Container defines the unit of execution for this Revision.
          # In the context of a Revision, we disallow a number of the fields of
          # this Container, including: name, ports, and volumeMounts.
          # The runtime contract is documented here:
          # https://github.com/knative/serving/blob/master/docs/runtime-contract.md
          # This specifies both the container to run, the command to run in the container
          # and the arguments to supply to it.
          # Note that additional arguments may be supplied by the system to the container
          # at runtime.
        "tty": True or False, # Whether this container should allocate a TTY for itself, also requires
            # 'stdin' to be true. Default is false. +optional
        "stdin": True or False, # Whether this container should allocate a buffer for stdin in the container
            # runtime. If this is not set, reads from stdin in the container will always
            # result in EOF. Default is false. +optional
        "securityContext": { # SecurityContext holds security configuration that will be applied to a # Security options the pod should run with.
            # More info: https://kubernetes.io/docs/concepts/policy/security-context/
            # More info:
            # https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
            # +optional
            # container. Some fields are present in both SecurityContext and
            # PodSecurityContext.  When both are set, the values in SecurityContext take
            # precedence.
          "readOnlyRootFilesystem": True or False, # Whether this container has a read-only root filesystem.
              # Default is false.
              # +optional
          "runAsGroup": "A String", # The GID to run the entrypoint of the container process.
              # Uses runtime default if unset.
              # May also be set in PodSecurityContext.  If set in both SecurityContext and
              # PodSecurityContext, the value specified in SecurityContext takes
              # precedence. +optional
          "runAsUser": "A String", # The UID to run the entrypoint of the container process.
              # Defaults to user specified in image metadata if unspecified.
              # May also be set in PodSecurityContext.  If set in both SecurityContext and
              # PodSecurityContext, the value specified in SecurityContext takes
              # precedence. +optional
          "allowPrivilegeEscalation": True or False, # AllowPrivilegeEscalation controls whether a process can gain more
              # privileges than its parent process. This bool directly controls if
              # the no_new_privs flag will be set on the container process.
              # AllowPrivilegeEscalation is true always when the container is:
              # 1) run as Privileged
              # 2) has CAP_SYS_ADMIN
              # +optional
          "capabilities": { # Adds and removes POSIX capabilities from running containers. # The capabilities to add/drop when running containers.
              # Defaults to the default set of capabilities granted by the container
              # runtime. +optional
            "add": [ # Added capabilities
                # +optional
              "A String",
            ],
            "drop": [ # Removed capabilities
                # +optional
              "A String",
            ],
          },
          "runAsNonRoot": True or False, # Indicates that the container must run as a non-root user.
              # If true, the Kubelet will validate the image at runtime to ensure that it
              # does not run as UID 0 (root) and fail to start the container if it does.
              # If unset or false, no such validation will be performed.
              # May also be set in PodSecurityContext.  If set in both SecurityContext and
              # PodSecurityContext, the value specified in SecurityContext takes
              # precedence. +optional
          "seLinuxOptions": { # SELinuxOptions are the labels to be applied to the container # The SELinux context to be applied to the container.
              # If unspecified, the container runtime will allocate a random SELinux
              # context for each container.  May also be set in PodSecurityContext.  If set
              # in both SecurityContext and PodSecurityContext, the value specified in
              # SecurityContext takes precedence. +optional
            "role": "A String", # Role is a SELinux role label that applies to the container.
                # +optional
            "type": "A String", # Type is a SELinux type label that applies to the container.
                # +optional
            "user": "A String", # User is a SELinux user label that applies to the container.
                # +optional
            "level": "A String", # Level is SELinux level label that applies to the container.
                # +optional
          },
          "privileged": True or False, # Run container in privileged mode.
              # Processes in privileged containers are essentially equivalent to root on
              # the host. Defaults to false. +optional
        },
        "name": "A String", # Name of the container specified as a DNS_LABEL.
            # Each container must have a unique name (DNS_LABEL).
            # Cannot be updated.
        "envFrom": [ # List of sources to populate environment variables in the container.
            # The keys defined within a source must be a C_IDENTIFIER. All invalid keys
            # will be reported as an event when the container is starting. When a key
            # exists in multiple sources, the value associated with the last source will
            # take precedence. Values defined by an Env with a duplicate key will take
            # precedence. Cannot be updated. +optional
          { # EnvFromSource represents the source of a set of ConfigMaps
            "secretRef": { # SecretEnvSource selects a Secret to populate the environment # The Secret to select from
                # +optional
                # variables with.
                #
                # The contents of the target Secret's Data field will represent the
                # key-value pairs as environment variables.
              "localObjectReference": { # LocalObjectReference contains enough information to let you locate the # The Secret to select from.
                  # referenced object inside the same namespace.
                "name": "A String", # Name of the referent.
                    # More info:
                    # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
              },
              "optional": True or False, # Specify whether the Secret must be defined
                  # +optional
            },
            "configMapRef": { # ConfigMapEnvSource selects a ConfigMap to populate the environment # The ConfigMap to select from
                # +optional
                # variables with.
                #
                # The contents of the target ConfigMap's Data field will represent the
                # key-value pairs as environment variables.
              "localObjectReference": { # LocalObjectReference contains enough information to let you locate the # The ConfigMap to select from.
                  # referenced object inside the same namespace.
                "name": "A String", # Name of the referent.
                    # More info:
                    # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
              },
              "optional": True or False, # Specify whether the ConfigMap must be defined
                  # +optional
            },
            "prefix": "A String", # An optional identifier to prepend to each key in the ConfigMap. Must be a
                # C_IDENTIFIER. +optional
          },
        ],
        "env": [ # List of environment variables to set in the container.
            # Cannot be updated.
            # +optional
          { # EnvVar represents an environment variable present in a Container.
            "name": "A String", # Name of the environment variable. Must be a C_IDENTIFIER.
            "value": "A String", # Variable references $(VAR_NAME) are expanded
                # using the previous defined environment variables in the container and
                # any route environment variables. If a variable cannot be resolved,
                # the reference in the input string will be unchanged. The $(VAR_NAME)
                # syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped
                # references will never be expanded, regardless of whether the variable
                # exists or not.
                # Defaults to "".
                # +optional
          },
        ],
        "volumeMounts": [ # Pod volumes to mount into the container's filesystem.
            # Cannot be updated.
            # +optional
          { # VolumeMount describes a mounting of a Volume within a container.
            "readOnly": True or False, # Mounted read-only if true, read-write otherwise (false or unspecified).
                # Defaults to false.
                # +optional
            "mountPropagation": "A String", # mountPropagation determines how mounts are propagated from the host
                # to container and the other way around.
                # When not set, MountPropagationHostToContainer is used.
                # This field is beta in 1.10.
                # +optional
            "subPath": "A String", # Path within the volume from which the container's volume should be mounted.
                # Defaults to "" (volume's root).
                # +optional
            "name": "A String", # This must match the Name of a Volume.
            "mountPath": "A String", # Path within the container at which the volume should be mounted.  Must
                # not contain ':'.
          },
        ],
        "volumeDevices": [ # volumeDevices is the list of block devices to be used by the container.
            # This is an alpha feature and may change in the future.
            # +optional
          { # volumeDevice describes a mapping of a raw block device within a container.
            "devicePath": "A String", # devicePath is the path inside of the container that the device will be
                # mapped to.
            "name": "A String", # name must match the name of a persistentVolumeClaim in the pod
          },
        ],
        "args": [ # Arguments to the entrypoint.
            # The docker image's CMD is used if this is not provided.
            # Variable references $(VAR_NAME) are expanded using the container's
            # environment. If a variable cannot be resolved, the reference in the input
            # string will be unchanged. The $(VAR_NAME) syntax can be escaped with a
            # double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
            # regardless of whether the variable exists or not.
            # Cannot be updated.
            # More info:
            # https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
            # +optional
          "A String",
        ],
        "stdinOnce": True or False, # Whether the container runtime should close the stdin channel after it has
            # been opened by a single attach. When stdin is true the stdin stream will
            # remain open across multiple attach sessions. If stdinOnce is set to true,
            # stdin is opened on container start, is empty until the first client
            # attaches to stdin, and then remains open and accepts data until the client
            # disconnects, at which time stdin is closed and remains closed until the
            # container is restarted. If this flag is false, a container processes that
            # reads from stdin will never receive an EOF. Default is false +optional
        "terminationMessagePolicy": "A String", # Indicate how the termination message should be populated. File will use the
            # contents of terminationMessagePath to populate the container status message
            # on both success and failure. FallbackToLogsOnError will use the last chunk
            # of container log output if the termination message file is empty and the
            # container exited with an error. The log output is limited to 2048 bytes or
            # 80 lines, whichever is smaller. Defaults to File. Cannot be updated.
            # +optional
        "lifecycle": { # Lifecycle describes actions that the management system should take in # Actions that the management system should take in response to container
            # lifecycle events. Cannot be updated. +optional
            # response to container lifecycle events. For the PostStart and PreStop
            # lifecycle handlers, management of the container blocks until the action is
            # complete, unless the container process fails, in which case the handler is
            # aborted.
          "preStop": { # Handler defines a specific action that should be taken # PreStop is called immediately before a container is terminated.
              # The container is terminated after the handler completes.
              # The reason for termination is passed to the handler.
              # Regardless of the outcome of the handler, the container is eventually
              # terminated. Other management of the container blocks until the hook
              # completes. More info:
              # https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
              # +optional
            "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                # TCP hooks not yet supported
              "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                  # +optional
              "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                  # Number must be in the range 1 to 65535.
                  # Name must be an IANA_SVC_NAME.
                  # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                  # inner type.  This allows you to have, for example, a JSON field that can
                  # accept a name or number.
                "strVal": "A String", # The string value.
                "type": "A String", # The type of the value.
                "intVal": 42, # The int value.
              },
            },
            "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                # +optional
              "path": "A String", # Path to access on the HTTP server.
                  # +optional
              "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                  # "Host" in httpHeaders instead.
                  # +optional
              "scheme": "A String", # Scheme to use for connecting to the host.
                  # Defaults to HTTP.
                  # +optional
              "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                  # Number must be in the range 1 to 65535.
                  # Name must be an IANA_SVC_NAME.
                  # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                  # inner type.  This allows you to have, for example, a JSON field that can
                  # accept a name or number.
                "strVal": "A String", # The string value.
                "type": "A String", # The type of the value.
                "intVal": 42, # The int value.
              },
              "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                  # +optional
                { # HTTPHeader describes a custom header to be used in HTTP probes
                  "name": "A String", # The header field name
                  "value": "A String", # The header field value
                },
              ],
            },
            "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                # Exec specifies the action to take.
                # +optional
              "command": "A String", # Command is the command line to execute inside the container, the working
                  # directory for the command  is root ('/') in the container's filesystem. The
                  # command is simply exec'd, it is not run inside a shell, so traditional
                  # shell instructions ('|', etc) won't work. To use a shell, you need to
                  # explicitly call out to that shell. Exit status of 0 is treated as
                  # live/healthy and non-zero is unhealthy. +optional
            },
          },
          "postStart": { # Handler defines a specific action that should be taken # PostStart is called immediately after a container is created. If the
              # handler fails, the container is terminated and restarted according to its
              # restart policy. Other management of the container blocks until the hook
              # completes. More info:
              # https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
              # +optional
            "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                # TCP hooks not yet supported
              "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                  # +optional
              "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                  # Number must be in the range 1 to 65535.
                  # Name must be an IANA_SVC_NAME.
                  # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                  # inner type.  This allows you to have, for example, a JSON field that can
                  # accept a name or number.
                "strVal": "A String", # The string value.
                "type": "A String", # The type of the value.
                "intVal": 42, # The int value.
              },
            },
            "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                # +optional
              "path": "A String", # Path to access on the HTTP server.
                  # +optional
              "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                  # "Host" in httpHeaders instead.
                  # +optional
              "scheme": "A String", # Scheme to use for connecting to the host.
                  # Defaults to HTTP.
                  # +optional
              "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                  # Number must be in the range 1 to 65535.
                  # Name must be an IANA_SVC_NAME.
                  # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                  # inner type.  This allows you to have, for example, a JSON field that can
                  # accept a name or number.
                "strVal": "A String", # The string value.
                "type": "A String", # The type of the value.
                "intVal": 42, # The int value.
              },
              "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                  # +optional
                { # HTTPHeader describes a custom header to be used in HTTP probes
                  "name": "A String", # The header field name
                  "value": "A String", # The header field value
                },
              ],
            },
            "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                # Exec specifies the action to take.
                # +optional
              "command": "A String", # Command is the command line to execute inside the container, the working
                  # directory for the command  is root ('/') in the container's filesystem. The
                  # command is simply exec'd, it is not run inside a shell, so traditional
                  # shell instructions ('|', etc) won't work. To use a shell, you need to
                  # explicitly call out to that shell. Exit status of 0 is treated as
                  # live/healthy and non-zero is unhealthy. +optional
            },
          },
        },
        "command": [ # Entrypoint array. Not executed within a shell.
            # The docker image's ENTRYPOINT is used if this is not provided.
            # Variable references $(VAR_NAME) are expanded using the container's
            # environment. If a variable cannot be resolved, the reference in the input
            # string will be unchanged. The $(VAR_NAME) syntax can be escaped with a
            # double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
            # regardless of whether the variable exists or not.
            # Cannot be updated.
            # More info:
            # https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
            # +optional
          "A String",
        ],
        "livenessProbe": { # Probe describes a health check to be performed against a container to # Periodic probe of container liveness.
            # Container will be restarted if the probe fails.
            # Cannot be updated.
            # More info:
            # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
            # +optional
            # determine whether it is alive or ready to receive traffic.
          "timeoutSeconds": 42, # Number of seconds after which the probe times out.
              # Defaults to 1 second. Minimum value is 1.
              # More info:
              # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
              # +optional
          "initialDelaySeconds": 42, # Number of seconds after the container has started before liveness probes
              # are initiated. More info:
              # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
              # +optional
          "handler": { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
            "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                # TCP hooks not yet supported
              "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                  # +optional
              "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                  # Number must be in the range 1 to 65535.
                  # Name must be an IANA_SVC_NAME.
                  # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                  # inner type.  This allows you to have, for example, a JSON field that can
                  # accept a name or number.
                "strVal": "A String", # The string value.
                "type": "A String", # The type of the value.
                "intVal": 42, # The int value.
              },
            },
            "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                # +optional
              "path": "A String", # Path to access on the HTTP server.
                  # +optional
              "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                  # "Host" in httpHeaders instead.
                  # +optional
              "scheme": "A String", # Scheme to use for connecting to the host.
                  # Defaults to HTTP.
                  # +optional
              "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                  # Number must be in the range 1 to 65535.
                  # Name must be an IANA_SVC_NAME.
                  # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                  # inner type.  This allows you to have, for example, a JSON field that can
                  # accept a name or number.
                "strVal": "A String", # The string value.
                "type": "A String", # The type of the value.
                "intVal": 42, # The int value.
              },
              "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                  # +optional
                { # HTTPHeader describes a custom header to be used in HTTP probes
                  "name": "A String", # The header field name
                  "value": "A String", # The header field value
                },
              ],
            },
            "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                # Exec specifies the action to take.
                # +optional
              "command": "A String", # Command is the command line to execute inside the container, the working
                  # directory for the command  is root ('/') in the container's filesystem. The
                  # command is simply exec'd, it is not run inside a shell, so traditional
                  # shell instructions ('|', etc) won't work. To use a shell, you need to
                  # explicitly call out to that shell. Exit status of 0 is treated as
                  # live/healthy and non-zero is unhealthy. +optional
            },
          },
          "periodSeconds": 42, # How often (in seconds) to perform the probe.
              # Default to 10 seconds. Minimum value is 1.
              # +optional
          "successThreshold": 42, # Minimum consecutive successes for the probe to be considered successful
              # after having failed. Defaults to 1. Must be 1 for liveness. Minimum value
              # is 1. +optional
          "failureThreshold": 42, # Minimum consecutive failures for the probe to be considered failed after
              # having succeeded. Defaults to 3. Minimum value is 1. +optional
        },
        "image": "A String", # Docker image name.
            # More info: https://kubernetes.io/docs/concepts/containers/images
        "imagePullPolicy": "A String", # Image pull policy.
            # One of Always, Never, IfNotPresent.
            # Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
            # Cannot be updated.
            # More info:
            # https://kubernetes.io/docs/concepts/containers/images#updating-images
            # +optional
        "readinessProbe": { # Probe describes a health check to be performed against a container to # Periodic probe of container service readiness.
            # Container will be removed from service endpoints if the probe fails.
            # Cannot be updated.
            # More info:
            # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
            # +optional
            # determine whether it is alive or ready to receive traffic.
          "timeoutSeconds": 42, # Number of seconds after which the probe times out.
              # Defaults to 1 second. Minimum value is 1.
              # More info:
              # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
              # +optional
          "initialDelaySeconds": 42, # Number of seconds after the container has started before liveness probes
              # are initiated. More info:
              # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
              # +optional
          "handler": { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
            "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                # TCP hooks not yet supported
              "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                  # +optional
              "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                  # Number must be in the range 1 to 65535.
                  # Name must be an IANA_SVC_NAME.
                  # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                  # inner type.  This allows you to have, for example, a JSON field that can
                  # accept a name or number.
                "strVal": "A String", # The string value.
                "type": "A String", # The type of the value.
                "intVal": 42, # The int value.
              },
            },
            "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                # +optional
              "path": "A String", # Path to access on the HTTP server.
                  # +optional
              "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                  # "Host" in httpHeaders instead.
                  # +optional
              "scheme": "A String", # Scheme to use for connecting to the host.
                  # Defaults to HTTP.
                  # +optional
              "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                  # Number must be in the range 1 to 65535.
                  # Name must be an IANA_SVC_NAME.
                  # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                  # inner type.  This allows you to have, for example, a JSON field that can
                  # accept a name or number.
                "strVal": "A String", # The string value.
                "type": "A String", # The type of the value.
                "intVal": 42, # The int value.
              },
              "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                  # +optional
                { # HTTPHeader describes a custom header to be used in HTTP probes
                  "name": "A String", # The header field name
                  "value": "A String", # The header field value
                },
              ],
            },
            "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                # Exec specifies the action to take.
                # +optional
              "command": "A String", # Command is the command line to execute inside the container, the working
                  # directory for the command  is root ('/') in the container's filesystem. The
                  # command is simply exec'd, it is not run inside a shell, so traditional
                  # shell instructions ('|', etc) won't work. To use a shell, you need to
                  # explicitly call out to that shell. Exit status of 0 is treated as
                  # live/healthy and non-zero is unhealthy. +optional
            },
          },
          "periodSeconds": 42, # How often (in seconds) to perform the probe.
              # Default to 10 seconds. Minimum value is 1.
              # +optional
          "successThreshold": 42, # Minimum consecutive successes for the probe to be considered successful
              # after having failed. Defaults to 1. Must be 1 for liveness. Minimum value
              # is 1. +optional
          "failureThreshold": 42, # Minimum consecutive failures for the probe to be considered failed after
              # having succeeded. Defaults to 3. Minimum value is 1. +optional
        },
        "terminationMessagePath": "A String", # Optional: Path at which the file to which the container's termination
            # message will be written is mounted into the container's filesystem. Message
            # written is intended to be brief final status, such as an assertion failure
            # message. Will be truncated by the node if greater than 4096 bytes. The
            # total message length across all containers will be limited to 12kb.
            # Defaults to /dev/termination-log.
            # Cannot be updated.
            # +optional
        "ports": [ # List of ports to expose from the container. Exposing a port here gives
            # the system additional information about the network connections a
            # container uses, but is primarily informational. Not specifying a port here
            # DOES NOT prevent that port from being exposed. Any port which is
            # listening on the default "0.0.0.0" address inside a container will be
            # accessible from the network.
            # Cannot be updated.
            # +optional
          { # ContainerPort represents a network port in a single container.
            "protocol": "A String", # Protocol for port. Must be UDP or TCP.
                # Defaults to "TCP".
                # +optional
            "hostIP": "A String", # What host IP to bind the external port to.
                # +optional
            "containerPort": 42, # Number of port to expose on the pod's IP address.
                # This must be a valid port number, 0 < x < 65536.
            "name": "A String", # If specified, this must be an IANA_SVC_NAME and unique within the pod. Each
                # named port in a pod must have a unique name. Name for the port that can be
                # referred to by services.
                # +optional
            "hostPort": 42, # Number of port to expose on the host.
                # If specified, this must be a valid port number, 0 < x < 65536.
                # If HostNetwork is specified, this must match ContainerPort.
                # Most containers do not need this.
                # +optional
          },
        ],
        "resources": { # ResourceRequirements describes the compute resource requirements. # Compute Resources required by this container.
            # Cannot be updated.
            # More info:
            # https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
            # +optional
          "requests": { # Requests describes the minimum amount of compute resources required.
              # If Requests is omitted for a container, it defaults to Limits if that is
              # explicitly specified, otherwise to an implementation-defined value.
              # The values of the map is string form of the 'quantity' k8s type:
              # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
            "a_key": "A String",
          },
          "requestsInMap": { # Requests describes the minimum amount of compute resources required.
              # If Requests is omitted for a container, it defaults to Limits if that is
              # explicitly specified, otherwise to an implementation-defined value.
              # This is a temporary field created to migrate away from the
              # map<string, Quantity> requests field. This is done to become compliant
              # with k8s style API.
              # This field is deprecated in favor of requests field.
            "a_key": { # The view model of a single quantity, e.g. "800 MiB". Corresponds to
                # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
              "string": "A String", # Stringified version of the quantity, e.g., "800 MiB".
            },
          },
          "limitsInMap": { # Limits describes the maximum amount of compute resources allowed.
              # This is a temporary field created to migrate away from the
              # map<string, Quantity> limits field. This is done to become compliant
              # with k8s style API.
              # This field is deprecated in favor of limits field.
            "a_key": { # The view model of a single quantity, e.g. "800 MiB". Corresponds to
                # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
              "string": "A String", # Stringified version of the quantity, e.g., "800 MiB".
            },
          },
          "limits": { # Limits describes the maximum amount of compute resources allowed.
              # The values of the map is string form of the 'quantity' k8s type:
              # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
            "a_key": "A String",
          },
        },
        "workingDir": "A String", # Container's working directory.
            # If not specified, the container runtime's default will be used, which
            # might be configured in the container image.
            # Cannot be updated.
            # +optional
      },
      "serviceAccountName": "A String", # Not currently used by Cloud Run.
      "timeoutSeconds": 42, # TimeoutSeconds holds the max duration the instance is allowed for
          # responding to a request.
          # Not currently used by Cloud Run.
      "servingState": "A String", # ServingState holds a value describing the state the resources
          # are in for this Revision.
          # Users must not specify this when creating a revision. It is expected
          # that the system will manipulate this based on routability and load.
          #
          # Populated by the system.
          # Read-only.
      "generation": 42, # Deprecated and not currently populated by Cloud Run. See
          # metadata.generation instead, which is the sequence number containing the
          # latest generation of the desired state.
          #
          # Read-only.
      "concurrencyModel": "A String", # ConcurrencyModel specifies the desired concurrency model
          # (Single or Multi) for the Revision. Defaults to Multi.
          # Deprecated in favor of ContainerConcurrency.
          # +optional
      "containerConcurrency": 42, # ContainerConcurrency specifies the maximum allowed in-flight (concurrent)
          # requests per container of the Revision. Values are:
          # - `0` thread-safe, the system should manage the max concurrency. This is
          #    the default value.
          # - `1` not-thread-safe. Single concurrency
          # - `2-N` thread-safe, max concurrency of N
      "volumes": [
        { # Volume represents a named volume in a container.
          "configMap": { # Adapts a ConfigMap into a volume.
              # The contents of the target ConfigMap's Data field will be presented in a
              # volume as files using the keys in the Data field as the file names, unless
              # the items element is populated with specific mappings of keys to paths.
            "items": [ # If unspecified, each key-value pair in the Data field of the referenced
                # Secret will be projected into the volume as a file whose name is the
                # key and content is the value. If specified, the listed keys will be
                # projected into the specified paths, and unlisted keys will not be
                # present. If a key is specified which is not present in the Secret,
                # the volume setup will error unless it is marked optional.
              { # Maps a string key to a path within a volume.
                "path": "A String", # The relative path of the file to map the key to.
                    # May not be an absolute path.
                    # May not contain the path element '..'.
                    # May not start with the string '..'.
                "mode": 42, # Mode bits to use on this file, must be a value between 0 and 0777. If not
                    # specified, the volume defaultMode will be used. This might be in conflict
                    # with other options that affect the file mode, like fsGroup, and the result
                    # can be other mode bits set. +optional
                "key": "A String", # The key to project.
              },
            ],
            "optional": True or False, # Specify whether the Secret or its keys must be defined.
            "name": "A String", # Name of the config.
            "defaultMode": 42, # Mode bits to use on created files by default. Must be a value between 0 and
                # 0777. Defaults to 0644. Directories within the path are not affected by
                # this setting. This might be in conflict with other options that affect the
                # file mode, like fsGroup, and the result can be other mode bits set.
          },
          "secret": { # The contents of the target Secret's Data field will be presented in a volume
              # as files using the keys in the Data field as the file names.
            "items": [ # If unspecified, each key-value pair in the Data field of the referenced
                # Secret will be projected into the volume as a file whose name is the
                # key and content is the value. If specified, the listed keys will be
                # projected into the specified paths, and unlisted keys will not be
                # present. If a key is specified which is not present in the Secret,
                # the volume setup will error unless it is marked optional.
              { # Maps a string key to a path within a volume.
                "path": "A String", # The relative path of the file to map the key to.
                    # May not be an absolute path.
                    # May not contain the path element '..'.
                    # May not start with the string '..'.
                "mode": 42, # Mode bits to use on this file, must be a value between 0 and 0777. If not
                    # specified, the volume defaultMode will be used. This might be in conflict
                    # with other options that affect the file mode, like fsGroup, and the result
                    # can be other mode bits set. +optional
                "key": "A String", # The key to project.
              },
            ],
            "optional": True or False, # Specify whether the Secret or its keys must be defined.
            "defaultMode": 42, # Mode bits to use on created files by default. Must be a value between 0 and
                # 0777. Defaults to 0644. Directories within the path are not affected by
                # this setting. This might be in conflict with other options that affect the
                # file mode, like fsGroup, and the result can be other mode bits set.
            "secretName": "A String", # Name of the secret in the container's namespace to use.
          },
          "name": "A String", # Volume's name.
        },
      ],
      "containers": [ # Containers holds the single container that defines the unit of execution
          # for this Revision. In the context of a Revision, we disallow a number of
          # fields on this Container, including: name and lifecycle.
        { # A single application container.
            # This specifies both the container to run, the command to run in the container
            # and the arguments to supply to it.
            # Note that additional arguments may be supplied by the system to the container
            # at runtime.
          "tty": True or False, # Whether this container should allocate a TTY for itself, also requires
              # 'stdin' to be true. Default is false. +optional
          "stdin": True or False, # Whether this container should allocate a buffer for stdin in the container
              # runtime. If this is not set, reads from stdin in the container will always
              # result in EOF. Default is false. +optional
          "securityContext": { # SecurityContext holds security configuration that will be applied to a # Security options the pod should run with.
              # More info: https://kubernetes.io/docs/concepts/policy/security-context/
              # More info:
              # https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
              # +optional
              # container. Some fields are present in both SecurityContext and
              # PodSecurityContext.  When both are set, the values in SecurityContext take
              # precedence.
            "readOnlyRootFilesystem": True or False, # Whether this container has a read-only root filesystem.
                # Default is false.
                # +optional
            "runAsGroup": "A String", # The GID to run the entrypoint of the container process.
                # Uses runtime default if unset.
                # May also be set in PodSecurityContext.  If set in both SecurityContext and
                # PodSecurityContext, the value specified in SecurityContext takes
                # precedence. +optional
            "runAsUser": "A String", # The UID to run the entrypoint of the container process.
                # Defaults to user specified in image metadata if unspecified.
                # May also be set in PodSecurityContext.  If set in both SecurityContext and
                # PodSecurityContext, the value specified in SecurityContext takes
                # precedence. +optional
            "allowPrivilegeEscalation": True or False, # AllowPrivilegeEscalation controls whether a process can gain more
                # privileges than its parent process. This bool directly controls if
                # the no_new_privs flag will be set on the container process.
                # AllowPrivilegeEscalation is true always when the container is:
                # 1) run as Privileged
                # 2) has CAP_SYS_ADMIN
                # +optional
            "capabilities": { # Adds and removes POSIX capabilities from running containers. # The capabilities to add/drop when running containers.
                # Defaults to the default set of capabilities granted by the container
                # runtime. +optional
              "add": [ # Added capabilities
                  # +optional
                "A String",
              ],
              "drop": [ # Removed capabilities
                  # +optional
                "A String",
              ],
            },
            "runAsNonRoot": True or False, # Indicates that the container must run as a non-root user.
                # If true, the Kubelet will validate the image at runtime to ensure that it
                # does not run as UID 0 (root) and fail to start the container if it does.
                # If unset or false, no such validation will be performed.
                # May also be set in PodSecurityContext.  If set in both SecurityContext and
                # PodSecurityContext, the value specified in SecurityContext takes
                # precedence. +optional
            "seLinuxOptions": { # SELinuxOptions are the labels to be applied to the container # The SELinux context to be applied to the container.
                # If unspecified, the container runtime will allocate a random SELinux
                # context for each container.  May also be set in PodSecurityContext.  If set
                # in both SecurityContext and PodSecurityContext, the value specified in
                # SecurityContext takes precedence. +optional
              "role": "A String", # Role is a SELinux role label that applies to the container.
                  # +optional
              "type": "A String", # Type is a SELinux type label that applies to the container.
                  # +optional
              "user": "A String", # User is a SELinux user label that applies to the container.
                  # +optional
              "level": "A String", # Level is SELinux level label that applies to the container.
                  # +optional
            },
            "privileged": True or False, # Run container in privileged mode.
                # Processes in privileged containers are essentially equivalent to root on
                # the host. Defaults to false. +optional
          },
          "name": "A String", # Name of the container specified as a DNS_LABEL.
              # Each container must have a unique name (DNS_LABEL).
              # Cannot be updated.
          "envFrom": [ # List of sources to populate environment variables in the container.
              # The keys defined within a source must be a C_IDENTIFIER. All invalid keys
              # will be reported as an event when the container is starting. When a key
              # exists in multiple sources, the value associated with the last source will
              # take precedence. Values defined by an Env with a duplicate key will take
              # precedence. Cannot be updated. +optional
            { # EnvFromSource represents the source of a set of ConfigMaps
              "secretRef": { # SecretEnvSource selects a Secret to populate the environment # The Secret to select from
                  # +optional
                  # variables with.
                  #
                  # The contents of the target Secret's Data field will represent the
                  # key-value pairs as environment variables.
                "localObjectReference": { # LocalObjectReference contains enough information to let you locate the # The Secret to select from.
                    # referenced object inside the same namespace.
                  "name": "A String", # Name of the referent.
                      # More info:
                      # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                },
                "optional": True or False, # Specify whether the Secret must be defined
                    # +optional
              },
              "configMapRef": { # ConfigMapEnvSource selects a ConfigMap to populate the environment # The ConfigMap to select from
                  # +optional
                  # variables with.
                  #
                  # The contents of the target ConfigMap's Data field will represent the
                  # key-value pairs as environment variables.
                "localObjectReference": { # LocalObjectReference contains enough information to let you locate the # The ConfigMap to select from.
                    # referenced object inside the same namespace.
                  "name": "A String", # Name of the referent.
                      # More info:
                      # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                },
                "optional": True or False, # Specify whether the ConfigMap must be defined
                    # +optional
              },
              "prefix": "A String", # An optional identifier to prepend to each key in the ConfigMap. Must be a
                  # C_IDENTIFIER. +optional
            },
          ],
          "env": [ # List of environment variables to set in the container.
              # Cannot be updated.
              # +optional
            { # EnvVar represents an environment variable present in a Container.
              "name": "A String", # Name of the environment variable. Must be a C_IDENTIFIER.
              "value": "A String", # Variable references $(VAR_NAME) are expanded
                  # using the previous defined environment variables in the container and
                  # any route environment variables. If a variable cannot be resolved,
                  # the reference in the input string will be unchanged. The $(VAR_NAME)
                  # syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped
                  # references will never be expanded, regardless of whether the variable
                  # exists or not.
                  # Defaults to "".
                  # +optional
            },
          ],
          "volumeMounts": [ # Pod volumes to mount into the container's filesystem.
              # Cannot be updated.
              # +optional
            { # VolumeMount describes a mounting of a Volume within a container.
              "readOnly": True or False, # Mounted read-only if true, read-write otherwise (false or unspecified).
                  # Defaults to false.
                  # +optional
              "mountPropagation": "A String", # mountPropagation determines how mounts are propagated from the host
                  # to container and the other way around.
                  # When not set, MountPropagationHostToContainer is used.
                  # This field is beta in 1.10.
                  # +optional
              "subPath": "A String", # Path within the volume from which the container's volume should be mounted.
                  # Defaults to "" (volume's root).
                  # +optional
              "name": "A String", # This must match the Name of a Volume.
              "mountPath": "A String", # Path within the container at which the volume should be mounted.  Must
                  # not contain ':'.
            },
          ],
          "volumeDevices": [ # volumeDevices is the list of block devices to be used by the container.
              # This is an alpha feature and may change in the future.
              # +optional
            { # volumeDevice describes a mapping of a raw block device within a container.
              "devicePath": "A String", # devicePath is the path inside of the container that the device will be
                  # mapped to.
              "name": "A String", # name must match the name of a persistentVolumeClaim in the pod
            },
          ],
          "args": [ # Arguments to the entrypoint.
              # The docker image's CMD is used if this is not provided.
              # Variable references $(VAR_NAME) are expanded using the container's
              # environment. If a variable cannot be resolved, the reference in the input
              # string will be unchanged. The $(VAR_NAME) syntax can be escaped with a
              # double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
              # regardless of whether the variable exists or not.
              # Cannot be updated.
              # More info:
              # https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
              # +optional
            "A String",
          ],
          "stdinOnce": True or False, # Whether the container runtime should close the stdin channel after it has
              # been opened by a single attach. When stdin is true the stdin stream will
              # remain open across multiple attach sessions. If stdinOnce is set to true,
              # stdin is opened on container start, is empty until the first client
              # attaches to stdin, and then remains open and accepts data until the client
              # disconnects, at which time stdin is closed and remains closed until the
              # container is restarted. If this flag is false, a container processes that
              # reads from stdin will never receive an EOF. Default is false +optional
          "terminationMessagePolicy": "A String", # Indicate how the termination message should be populated. File will use the
              # contents of terminationMessagePath to populate the container status message
              # on both success and failure. FallbackToLogsOnError will use the last chunk
              # of container log output if the termination message file is empty and the
              # container exited with an error. The log output is limited to 2048 bytes or
              # 80 lines, whichever is smaller. Defaults to File. Cannot be updated.
              # +optional
          "lifecycle": { # Lifecycle describes actions that the management system should take in # Actions that the management system should take in response to container
              # lifecycle events. Cannot be updated. +optional
              # response to container lifecycle events. For the PostStart and PreStop
              # lifecycle handlers, management of the container blocks until the action is
              # complete, unless the container process fails, in which case the handler is
              # aborted.
            "preStop": { # Handler defines a specific action that should be taken # PreStop is called immediately before a container is terminated.
                # The container is terminated after the handler completes.
                # The reason for termination is passed to the handler.
                # Regardless of the outcome of the handler, the container is eventually
                # terminated. Other management of the container blocks until the hook
                # completes. More info:
                # https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
                # +optional
              "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                  # TCP hooks not yet supported
                "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                    # +optional
                "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                    # Number must be in the range 1 to 65535.
                    # Name must be an IANA_SVC_NAME.
                    # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                    # inner type.  This allows you to have, for example, a JSON field that can
                    # accept a name or number.
                  "strVal": "A String", # The string value.
                  "type": "A String", # The type of the value.
                  "intVal": 42, # The int value.
                },
              },
              "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                  # +optional
                "path": "A String", # Path to access on the HTTP server.
                    # +optional
                "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                    # "Host" in httpHeaders instead.
                    # +optional
                "scheme": "A String", # Scheme to use for connecting to the host.
                    # Defaults to HTTP.
                    # +optional
                "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                    # Number must be in the range 1 to 65535.
                    # Name must be an IANA_SVC_NAME.
                    # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                    # inner type.  This allows you to have, for example, a JSON field that can
                    # accept a name or number.
                  "strVal": "A String", # The string value.
                  "type": "A String", # The type of the value.
                  "intVal": 42, # The int value.
                },
                "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                    # +optional
                  { # HTTPHeader describes a custom header to be used in HTTP probes
                    "name": "A String", # The header field name
                    "value": "A String", # The header field value
                  },
                ],
              },
              "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                  # Exec specifies the action to take.
                  # +optional
                "command": "A String", # Command is the command line to execute inside the container, the working
                    # directory for the command  is root ('/') in the container's filesystem. The
                    # command is simply exec'd, it is not run inside a shell, so traditional
                    # shell instructions ('|', etc) won't work. To use a shell, you need to
                    # explicitly call out to that shell. Exit status of 0 is treated as
                    # live/healthy and non-zero is unhealthy. +optional
              },
            },
            "postStart": { # Handler defines a specific action that should be taken # PostStart is called immediately after a container is created. If the
                # handler fails, the container is terminated and restarted according to its
                # restart policy. Other management of the container blocks until the hook
                # completes. More info:
                # https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
                # +optional
              "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                  # TCP hooks not yet supported
                "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                    # +optional
                "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                    # Number must be in the range 1 to 65535.
                    # Name must be an IANA_SVC_NAME.
                    # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                    # inner type.  This allows you to have, for example, a JSON field that can
                    # accept a name or number.
                  "strVal": "A String", # The string value.
                  "type": "A String", # The type of the value.
                  "intVal": 42, # The int value.
                },
              },
              "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                  # +optional
                "path": "A String", # Path to access on the HTTP server.
                    # +optional
                "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                    # "Host" in httpHeaders instead.
                    # +optional
                "scheme": "A String", # Scheme to use for connecting to the host.
                    # Defaults to HTTP.
                    # +optional
                "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                    # Number must be in the range 1 to 65535.
                    # Name must be an IANA_SVC_NAME.
                    # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                    # inner type.  This allows you to have, for example, a JSON field that can
                    # accept a name or number.
                  "strVal": "A String", # The string value.
                  "type": "A String", # The type of the value.
                  "intVal": 42, # The int value.
                },
                "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                    # +optional
                  { # HTTPHeader describes a custom header to be used in HTTP probes
                    "name": "A String", # The header field name
                    "value": "A String", # The header field value
                  },
                ],
              },
              "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                  # Exec specifies the action to take.
                  # +optional
                "command": "A String", # Command is the command line to execute inside the container, the working
                    # directory for the command  is root ('/') in the container's filesystem. The
                    # command is simply exec'd, it is not run inside a shell, so traditional
                    # shell instructions ('|', etc) won't work. To use a shell, you need to
                    # explicitly call out to that shell. Exit status of 0 is treated as
                    # live/healthy and non-zero is unhealthy. +optional
              },
            },
          },
          "command": [ # Entrypoint array. Not executed within a shell.
              # The docker image's ENTRYPOINT is used if this is not provided.
              # Variable references $(VAR_NAME) are expanded using the container's
              # environment. If a variable cannot be resolved, the reference in the input
              # string will be unchanged. The $(VAR_NAME) syntax can be escaped with a
              # double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
              # regardless of whether the variable exists or not.
              # Cannot be updated.
              # More info:
              # https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
              # +optional
            "A String",
          ],
          "livenessProbe": { # Probe describes a health check to be performed against a container to # Periodic probe of container liveness.
              # Container will be restarted if the probe fails.
              # Cannot be updated.
              # More info:
              # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
              # +optional
              # determine whether it is alive or ready to receive traffic.
            "timeoutSeconds": 42, # Number of seconds after which the probe times out.
                # Defaults to 1 second. Minimum value is 1.
                # More info:
                # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                # +optional
            "initialDelaySeconds": 42, # Number of seconds after the container has started before liveness probes
                # are initiated. More info:
                # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                # +optional
            "handler": { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
              "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                  # TCP hooks not yet supported
                "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                    # +optional
                "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                    # Number must be in the range 1 to 65535.
                    # Name must be an IANA_SVC_NAME.
                    # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                    # inner type.  This allows you to have, for example, a JSON field that can
                    # accept a name or number.
                  "strVal": "A String", # The string value.
                  "type": "A String", # The type of the value.
                  "intVal": 42, # The int value.
                },
              },
              "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                  # +optional
                "path": "A String", # Path to access on the HTTP server.
                    # +optional
                "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                    # "Host" in httpHeaders instead.
                    # +optional
                "scheme": "A String", # Scheme to use for connecting to the host.
                    # Defaults to HTTP.
                    # +optional
                "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                    # Number must be in the range 1 to 65535.
                    # Name must be an IANA_SVC_NAME.
                    # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                    # inner type.  This allows you to have, for example, a JSON field that can
                    # accept a name or number.
                  "strVal": "A String", # The string value.
                  "type": "A String", # The type of the value.
                  "intVal": 42, # The int value.
                },
                "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                    # +optional
                  { # HTTPHeader describes a custom header to be used in HTTP probes
                    "name": "A String", # The header field name
                    "value": "A String", # The header field value
                  },
                ],
              },
              "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                  # Exec specifies the action to take.
                  # +optional
                "command": "A String", # Command is the command line to execute inside the container, the working
                    # directory for the command  is root ('/') in the container's filesystem. The
                    # command is simply exec'd, it is not run inside a shell, so traditional
                    # shell instructions ('|', etc) won't work. To use a shell, you need to
                    # explicitly call out to that shell. Exit status of 0 is treated as
                    # live/healthy and non-zero is unhealthy. +optional
              },
            },
            "periodSeconds": 42, # How often (in seconds) to perform the probe.
                # Default to 10 seconds. Minimum value is 1.
                # +optional
            "successThreshold": 42, # Minimum consecutive successes for the probe to be considered successful
                # after having failed. Defaults to 1. Must be 1 for liveness. Minimum value
                # is 1. +optional
            "failureThreshold": 42, # Minimum consecutive failures for the probe to be considered failed after
                # having succeeded. Defaults to 3. Minimum value is 1. +optional
          },
          "image": "A String", # Docker image name.
              # More info: https://kubernetes.io/docs/concepts/containers/images
          "imagePullPolicy": "A String", # Image pull policy.
              # One of Always, Never, IfNotPresent.
              # Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
              # Cannot be updated.
              # More info:
              # https://kubernetes.io/docs/concepts/containers/images#updating-images
              # +optional
          "readinessProbe": { # Probe describes a health check to be performed against a container to # Periodic probe of container service readiness.
              # Container will be removed from service endpoints if the probe fails.
              # Cannot be updated.
              # More info:
              # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
              # +optional
              # determine whether it is alive or ready to receive traffic.
            "timeoutSeconds": 42, # Number of seconds after which the probe times out.
                # Defaults to 1 second. Minimum value is 1.
                # More info:
                # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                # +optional
            "initialDelaySeconds": 42, # Number of seconds after the container has started before liveness probes
                # are initiated. More info:
                # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                # +optional
            "handler": { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
              "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                  # TCP hooks not yet supported
                "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                    # +optional
                "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                    # Number must be in the range 1 to 65535.
                    # Name must be an IANA_SVC_NAME.
                    # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                    # inner type.  This allows you to have, for example, a JSON field that can
                    # accept a name or number.
                  "strVal": "A String", # The string value.
                  "type": "A String", # The type of the value.
                  "intVal": 42, # The int value.
                },
              },
              "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                  # +optional
                "path": "A String", # Path to access on the HTTP server.
                    # +optional
                "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                    # "Host" in httpHeaders instead.
                    # +optional
                "scheme": "A String", # Scheme to use for connecting to the host.
                    # Defaults to HTTP.
                    # +optional
                "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                    # Number must be in the range 1 to 65535.
                    # Name must be an IANA_SVC_NAME.
                    # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                    # inner type.  This allows you to have, for example, a JSON field that can
                    # accept a name or number.
                  "strVal": "A String", # The string value.
                  "type": "A String", # The type of the value.
                  "intVal": 42, # The int value.
                },
                "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                    # +optional
                  { # HTTPHeader describes a custom header to be used in HTTP probes
                    "name": "A String", # The header field name
                    "value": "A String", # The header field value
                  },
                ],
              },
              "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                  # Exec specifies the action to take.
                  # +optional
                "command": "A String", # Command is the command line to execute inside the container, the working
                    # directory for the command  is root ('/') in the container's filesystem. The
                    # command is simply exec'd, it is not run inside a shell, so traditional
                    # shell instructions ('|', etc) won't work. To use a shell, you need to
                    # explicitly call out to that shell. Exit status of 0 is treated as
                    # live/healthy and non-zero is unhealthy. +optional
              },
            },
            "periodSeconds": 42, # How often (in seconds) to perform the probe.
                # Default to 10 seconds. Minimum value is 1.
                # +optional
            "successThreshold": 42, # Minimum consecutive successes for the probe to be considered successful
                # after having failed. Defaults to 1. Must be 1 for liveness. Minimum value
                # is 1. +optional
            "failureThreshold": 42, # Minimum consecutive failures for the probe to be considered failed after
                # having succeeded. Defaults to 3. Minimum value is 1. +optional
          },
          "terminationMessagePath": "A String", # Optional: Path at which the file to which the container's termination
              # message will be written is mounted into the container's filesystem. Message
              # written is intended to be brief final status, such as an assertion failure
              # message. Will be truncated by the node if greater than 4096 bytes. The
              # total message length across all containers will be limited to 12kb.
              # Defaults to /dev/termination-log.
              # Cannot be updated.
              # +optional
          "ports": [ # List of ports to expose from the container. Exposing a port here gives
              # the system additional information about the network connections a
              # container uses, but is primarily informational. Not specifying a port here
              # DOES NOT prevent that port from being exposed. Any port which is
              # listening on the default "0.0.0.0" address inside a container will be
              # accessible from the network.
              # Cannot be updated.
              # +optional
            { # ContainerPort represents a network port in a single container.
              "protocol": "A String", # Protocol for port. Must be UDP or TCP.
                  # Defaults to "TCP".
                  # +optional
              "hostIP": "A String", # What host IP to bind the external port to.
                  # +optional
              "containerPort": 42, # Number of port to expose on the pod's IP address.
                  # This must be a valid port number, 0 < x < 65536.
              "name": "A String", # If specified, this must be an IANA_SVC_NAME and unique within the pod. Each
                  # named port in a pod must have a unique name. Name for the port that can be
                  # referred to by services.
                  # +optional
              "hostPort": 42, # Number of port to expose on the host.
                  # If specified, this must be a valid port number, 0 < x < 65536.
                  # If HostNetwork is specified, this must match ContainerPort.
                  # Most containers do not need this.
                  # +optional
            },
          ],
          "resources": { # ResourceRequirements describes the compute resource requirements. # Compute Resources required by this container.
              # Cannot be updated.
              # More info:
              # https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
              # +optional
            "requests": { # Requests describes the minimum amount of compute resources required.
                # If Requests is omitted for a container, it defaults to Limits if that is
                # explicitly specified, otherwise to an implementation-defined value.
                # The values of the map is string form of the 'quantity' k8s type:
                # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
              "a_key": "A String",
            },
            "requestsInMap": { # Requests describes the minimum amount of compute resources required.
                # If Requests is omitted for a container, it defaults to Limits if that is
                # explicitly specified, otherwise to an implementation-defined value.
                # This is a temporary field created to migrate away from the
                # map<string, Quantity> requests field. This is done to become compliant
                # with k8s style API.
                # This field is deprecated in favor of requests field.
              "a_key": { # The view model of a single quantity, e.g. "800 MiB". Corresponds to
                  # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                "string": "A String", # Stringified version of the quantity, e.g., "800 MiB".
              },
            },
            "limitsInMap": { # Limits describes the maximum amount of compute resources allowed.
                # This is a temporary field created to migrate away from the
                # map<string, Quantity> limits field. This is done to become compliant
                # with k8s style API.
                # This field is deprecated in favor of limits field.
              "a_key": { # The view model of a single quantity, e.g. "800 MiB". Corresponds to
                  # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                "string": "A String", # Stringified version of the quantity, e.g., "800 MiB".
              },
            },
            "limits": { # Limits describes the maximum amount of compute resources allowed.
                # The values of the map is string form of the 'quantity' k8s type:
                # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
              "a_key": "A String",
            },
          },
          "workingDir": "A String", # Container's working directory.
              # If not specified, the container runtime's default will be used, which
              # might be configured in the container image.
              # Cannot be updated.
              # +optional
        },
      ],
    },
    "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 Revision, including name, namespace, labels,
        # and annotations.
        # 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 revisions.

Args:
  parent: string, The project ID or project number from which the revisions 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:

    { # ListRevisionsResponse is a list of Revision resources.
    "items": [ # List of Revisions.
      { # Revision is an immutable snapshot of code and configuration.  A revision
          # references a container image. Revisions are created by updates to a
          # Configuration.
          #
          # Cloud Run does not currently support referencing a build that is responsible
          # for materializing the container image from source.
          #
          # See also:
          # https://github.com/knative/serving/blob/master/docs/spec/overview.md#revision
        "status": { # RevisionStatus communicates the observed state of the Revision (from the # Status communicates the observed state of the Revision (from the
            # controller).
            # controller).
          "observedGeneration": 42, # ObservedGeneration is the 'Generation' of the Revision 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.
          "imageDigest": "A String", # ImageDigest holds the resolved digest for the image specified
              # within .Spec.Container.Image. The digest is resolved during the creation
              # of Revision. This field holds the digest value regardless of whether
              # a tag or digest was originally specified in the Container object.
          "serviceName": "A String", # Not currently used by Cloud Run.
          "conditions": [ # Conditions communicates information about ongoing/complete
              # reconciliation processes that bring the "spec" inline with the observed
              # state of the world.
              #
              # As a Revision is being prepared, it will incrementally
              # update conditions "ResourcesAvailable", "ContainerHealthy", and "Active",
              # which contribute to the overall "Ready" condition.
            { # RevisionCondition defines a readiness condition for a Revision.
              "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 last transition.
                  # +optional
              "message": "A String", # Human readable message indicating details about the current status.
                  # +optional
              "type": "A String", # RevisionConditionType is used to communicate the status of the
                  # reconciliation process. See also:
                  # https://github.com/knative/serving/blob/master/docs/spec/errors.md#error-conditions-and-reporting
                  # Types include:
                  #
                  # * "Ready": True when the Revision is ready.
                  # * "ResourcesAvailable": True when underlying resources have been
                  # provisioned.
                  # * "ContainerHealthy": True when the Revision readiness check completes.
                  # * "Active": True when the Revision may receive traffic.
            },
          ],
          "logUrl": "A String", # Specifies the generated logging url for this particular revision
              # based on the revision url template specified in the controller's config.
              # +optional
        },
        "kind": "A String", # The kind of this resource, in this case "Revision".
        "spec": { # RevisionSpec holds the desired state of the Revision (from the client). # Spec holds the desired state of the Revision (from the client).
          "container": { # A single application container. # Container defines the unit of execution for this Revision.
              # In the context of a Revision, we disallow a number of the fields of
              # this Container, including: name, ports, and volumeMounts.
              # The runtime contract is documented here:
              # https://github.com/knative/serving/blob/master/docs/runtime-contract.md
              # This specifies both the container to run, the command to run in the container
              # and the arguments to supply to it.
              # Note that additional arguments may be supplied by the system to the container
              # at runtime.
            "tty": True or False, # Whether this container should allocate a TTY for itself, also requires
                # 'stdin' to be true. Default is false. +optional
            "stdin": True or False, # Whether this container should allocate a buffer for stdin in the container
                # runtime. If this is not set, reads from stdin in the container will always
                # result in EOF. Default is false. +optional
            "securityContext": { # SecurityContext holds security configuration that will be applied to a # Security options the pod should run with.
                # More info: https://kubernetes.io/docs/concepts/policy/security-context/
                # More info:
                # https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
                # +optional
                # container. Some fields are present in both SecurityContext and
                # PodSecurityContext.  When both are set, the values in SecurityContext take
                # precedence.
              "readOnlyRootFilesystem": True or False, # Whether this container has a read-only root filesystem.
                  # Default is false.
                  # +optional
              "runAsGroup": "A String", # The GID to run the entrypoint of the container process.
                  # Uses runtime default if unset.
                  # May also be set in PodSecurityContext.  If set in both SecurityContext and
                  # PodSecurityContext, the value specified in SecurityContext takes
                  # precedence. +optional
              "runAsUser": "A String", # The UID to run the entrypoint of the container process.
                  # Defaults to user specified in image metadata if unspecified.
                  # May also be set in PodSecurityContext.  If set in both SecurityContext and
                  # PodSecurityContext, the value specified in SecurityContext takes
                  # precedence. +optional
              "allowPrivilegeEscalation": True or False, # AllowPrivilegeEscalation controls whether a process can gain more
                  # privileges than its parent process. This bool directly controls if
                  # the no_new_privs flag will be set on the container process.
                  # AllowPrivilegeEscalation is true always when the container is:
                  # 1) run as Privileged
                  # 2) has CAP_SYS_ADMIN
                  # +optional
              "capabilities": { # Adds and removes POSIX capabilities from running containers. # The capabilities to add/drop when running containers.
                  # Defaults to the default set of capabilities granted by the container
                  # runtime. +optional
                "add": [ # Added capabilities
                    # +optional
                  "A String",
                ],
                "drop": [ # Removed capabilities
                    # +optional
                  "A String",
                ],
              },
              "runAsNonRoot": True or False, # Indicates that the container must run as a non-root user.
                  # If true, the Kubelet will validate the image at runtime to ensure that it
                  # does not run as UID 0 (root) and fail to start the container if it does.
                  # If unset or false, no such validation will be performed.
                  # May also be set in PodSecurityContext.  If set in both SecurityContext and
                  # PodSecurityContext, the value specified in SecurityContext takes
                  # precedence. +optional
              "seLinuxOptions": { # SELinuxOptions are the labels to be applied to the container # The SELinux context to be applied to the container.
                  # If unspecified, the container runtime will allocate a random SELinux
                  # context for each container.  May also be set in PodSecurityContext.  If set
                  # in both SecurityContext and PodSecurityContext, the value specified in
                  # SecurityContext takes precedence. +optional
                "role": "A String", # Role is a SELinux role label that applies to the container.
                    # +optional
                "type": "A String", # Type is a SELinux type label that applies to the container.
                    # +optional
                "user": "A String", # User is a SELinux user label that applies to the container.
                    # +optional
                "level": "A String", # Level is SELinux level label that applies to the container.
                    # +optional
              },
              "privileged": True or False, # Run container in privileged mode.
                  # Processes in privileged containers are essentially equivalent to root on
                  # the host. Defaults to false. +optional
            },
            "name": "A String", # Name of the container specified as a DNS_LABEL.
                # Each container must have a unique name (DNS_LABEL).
                # Cannot be updated.
            "envFrom": [ # List of sources to populate environment variables in the container.
                # The keys defined within a source must be a C_IDENTIFIER. All invalid keys
                # will be reported as an event when the container is starting. When a key
                # exists in multiple sources, the value associated with the last source will
                # take precedence. Values defined by an Env with a duplicate key will take
                # precedence. Cannot be updated. +optional
              { # EnvFromSource represents the source of a set of ConfigMaps
                "secretRef": { # SecretEnvSource selects a Secret to populate the environment # The Secret to select from
                    # +optional
                    # variables with.
                    #
                    # The contents of the target Secret's Data field will represent the
                    # key-value pairs as environment variables.
                  "localObjectReference": { # LocalObjectReference contains enough information to let you locate the # The Secret to select from.
                      # referenced object inside the same namespace.
                    "name": "A String", # Name of the referent.
                        # More info:
                        # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                  },
                  "optional": True or False, # Specify whether the Secret must be defined
                      # +optional
                },
                "configMapRef": { # ConfigMapEnvSource selects a ConfigMap to populate the environment # The ConfigMap to select from
                    # +optional
                    # variables with.
                    #
                    # The contents of the target ConfigMap's Data field will represent the
                    # key-value pairs as environment variables.
                  "localObjectReference": { # LocalObjectReference contains enough information to let you locate the # The ConfigMap to select from.
                      # referenced object inside the same namespace.
                    "name": "A String", # Name of the referent.
                        # More info:
                        # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                  },
                  "optional": True or False, # Specify whether the ConfigMap must be defined
                      # +optional
                },
                "prefix": "A String", # An optional identifier to prepend to each key in the ConfigMap. Must be a
                    # C_IDENTIFIER. +optional
              },
            ],
            "env": [ # List of environment variables to set in the container.
                # Cannot be updated.
                # +optional
              { # EnvVar represents an environment variable present in a Container.
                "name": "A String", # Name of the environment variable. Must be a C_IDENTIFIER.
                "value": "A String", # Variable references $(VAR_NAME) are expanded
                    # using the previous defined environment variables in the container and
                    # any route environment variables. If a variable cannot be resolved,
                    # the reference in the input string will be unchanged. The $(VAR_NAME)
                    # syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped
                    # references will never be expanded, regardless of whether the variable
                    # exists or not.
                    # Defaults to "".
                    # +optional
              },
            ],
            "volumeMounts": [ # Pod volumes to mount into the container's filesystem.
                # Cannot be updated.
                # +optional
              { # VolumeMount describes a mounting of a Volume within a container.
                "readOnly": True or False, # Mounted read-only if true, read-write otherwise (false or unspecified).
                    # Defaults to false.
                    # +optional
                "mountPropagation": "A String", # mountPropagation determines how mounts are propagated from the host
                    # to container and the other way around.
                    # When not set, MountPropagationHostToContainer is used.
                    # This field is beta in 1.10.
                    # +optional
                "subPath": "A String", # Path within the volume from which the container's volume should be mounted.
                    # Defaults to "" (volume's root).
                    # +optional
                "name": "A String", # This must match the Name of a Volume.
                "mountPath": "A String", # Path within the container at which the volume should be mounted.  Must
                    # not contain ':'.
              },
            ],
            "volumeDevices": [ # volumeDevices is the list of block devices to be used by the container.
                # This is an alpha feature and may change in the future.
                # +optional
              { # volumeDevice describes a mapping of a raw block device within a container.
                "devicePath": "A String", # devicePath is the path inside of the container that the device will be
                    # mapped to.
                "name": "A String", # name must match the name of a persistentVolumeClaim in the pod
              },
            ],
            "args": [ # Arguments to the entrypoint.
                # The docker image's CMD is used if this is not provided.
                # Variable references $(VAR_NAME) are expanded using the container's
                # environment. If a variable cannot be resolved, the reference in the input
                # string will be unchanged. The $(VAR_NAME) syntax can be escaped with a
                # double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
                # regardless of whether the variable exists or not.
                # Cannot be updated.
                # More info:
                # https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
                # +optional
              "A String",
            ],
            "stdinOnce": True or False, # Whether the container runtime should close the stdin channel after it has
                # been opened by a single attach. When stdin is true the stdin stream will
                # remain open across multiple attach sessions. If stdinOnce is set to true,
                # stdin is opened on container start, is empty until the first client
                # attaches to stdin, and then remains open and accepts data until the client
                # disconnects, at which time stdin is closed and remains closed until the
                # container is restarted. If this flag is false, a container processes that
                # reads from stdin will never receive an EOF. Default is false +optional
            "terminationMessagePolicy": "A String", # Indicate how the termination message should be populated. File will use the
                # contents of terminationMessagePath to populate the container status message
                # on both success and failure. FallbackToLogsOnError will use the last chunk
                # of container log output if the termination message file is empty and the
                # container exited with an error. The log output is limited to 2048 bytes or
                # 80 lines, whichever is smaller. Defaults to File. Cannot be updated.
                # +optional
            "lifecycle": { # Lifecycle describes actions that the management system should take in # Actions that the management system should take in response to container
                # lifecycle events. Cannot be updated. +optional
                # response to container lifecycle events. For the PostStart and PreStop
                # lifecycle handlers, management of the container blocks until the action is
                # complete, unless the container process fails, in which case the handler is
                # aborted.
              "preStop": { # Handler defines a specific action that should be taken # PreStop is called immediately before a container is terminated.
                  # The container is terminated after the handler completes.
                  # The reason for termination is passed to the handler.
                  # Regardless of the outcome of the handler, the container is eventually
                  # terminated. Other management of the container blocks until the hook
                  # completes. More info:
                  # https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
                  # +optional
                "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                    # TCP hooks not yet supported
                  "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                      # +optional
                  "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                      # Number must be in the range 1 to 65535.
                      # Name must be an IANA_SVC_NAME.
                      # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                      # inner type.  This allows you to have, for example, a JSON field that can
                      # accept a name or number.
                    "strVal": "A String", # The string value.
                    "type": "A String", # The type of the value.
                    "intVal": 42, # The int value.
                  },
                },
                "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                    # +optional
                  "path": "A String", # Path to access on the HTTP server.
                      # +optional
                  "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                      # "Host" in httpHeaders instead.
                      # +optional
                  "scheme": "A String", # Scheme to use for connecting to the host.
                      # Defaults to HTTP.
                      # +optional
                  "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                      # Number must be in the range 1 to 65535.
                      # Name must be an IANA_SVC_NAME.
                      # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                      # inner type.  This allows you to have, for example, a JSON field that can
                      # accept a name or number.
                    "strVal": "A String", # The string value.
                    "type": "A String", # The type of the value.
                    "intVal": 42, # The int value.
                  },
                  "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                      # +optional
                    { # HTTPHeader describes a custom header to be used in HTTP probes
                      "name": "A String", # The header field name
                      "value": "A String", # The header field value
                    },
                  ],
                },
                "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                    # Exec specifies the action to take.
                    # +optional
                  "command": "A String", # Command is the command line to execute inside the container, the working
                      # directory for the command  is root ('/') in the container's filesystem. The
                      # command is simply exec'd, it is not run inside a shell, so traditional
                      # shell instructions ('|', etc) won't work. To use a shell, you need to
                      # explicitly call out to that shell. Exit status of 0 is treated as
                      # live/healthy and non-zero is unhealthy. +optional
                },
              },
              "postStart": { # Handler defines a specific action that should be taken # PostStart is called immediately after a container is created. If the
                  # handler fails, the container is terminated and restarted according to its
                  # restart policy. Other management of the container blocks until the hook
                  # completes. More info:
                  # https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
                  # +optional
                "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                    # TCP hooks not yet supported
                  "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                      # +optional
                  "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                      # Number must be in the range 1 to 65535.
                      # Name must be an IANA_SVC_NAME.
                      # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                      # inner type.  This allows you to have, for example, a JSON field that can
                      # accept a name or number.
                    "strVal": "A String", # The string value.
                    "type": "A String", # The type of the value.
                    "intVal": 42, # The int value.
                  },
                },
                "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                    # +optional
                  "path": "A String", # Path to access on the HTTP server.
                      # +optional
                  "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                      # "Host" in httpHeaders instead.
                      # +optional
                  "scheme": "A String", # Scheme to use for connecting to the host.
                      # Defaults to HTTP.
                      # +optional
                  "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                      # Number must be in the range 1 to 65535.
                      # Name must be an IANA_SVC_NAME.
                      # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                      # inner type.  This allows you to have, for example, a JSON field that can
                      # accept a name or number.
                    "strVal": "A String", # The string value.
                    "type": "A String", # The type of the value.
                    "intVal": 42, # The int value.
                  },
                  "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                      # +optional
                    { # HTTPHeader describes a custom header to be used in HTTP probes
                      "name": "A String", # The header field name
                      "value": "A String", # The header field value
                    },
                  ],
                },
                "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                    # Exec specifies the action to take.
                    # +optional
                  "command": "A String", # Command is the command line to execute inside the container, the working
                      # directory for the command  is root ('/') in the container's filesystem. The
                      # command is simply exec'd, it is not run inside a shell, so traditional
                      # shell instructions ('|', etc) won't work. To use a shell, you need to
                      # explicitly call out to that shell. Exit status of 0 is treated as
                      # live/healthy and non-zero is unhealthy. +optional
                },
              },
            },
            "command": [ # Entrypoint array. Not executed within a shell.
                # The docker image's ENTRYPOINT is used if this is not provided.
                # Variable references $(VAR_NAME) are expanded using the container's
                # environment. If a variable cannot be resolved, the reference in the input
                # string will be unchanged. The $(VAR_NAME) syntax can be escaped with a
                # double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
                # regardless of whether the variable exists or not.
                # Cannot be updated.
                # More info:
                # https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
                # +optional
              "A String",
            ],
            "livenessProbe": { # Probe describes a health check to be performed against a container to # Periodic probe of container liveness.
                # Container will be restarted if the probe fails.
                # Cannot be updated.
                # More info:
                # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                # +optional
                # determine whether it is alive or ready to receive traffic.
              "timeoutSeconds": 42, # Number of seconds after which the probe times out.
                  # Defaults to 1 second. Minimum value is 1.
                  # More info:
                  # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                  # +optional
              "initialDelaySeconds": 42, # Number of seconds after the container has started before liveness probes
                  # are initiated. More info:
                  # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                  # +optional
              "handler": { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                    # TCP hooks not yet supported
                  "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                      # +optional
                  "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                      # Number must be in the range 1 to 65535.
                      # Name must be an IANA_SVC_NAME.
                      # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                      # inner type.  This allows you to have, for example, a JSON field that can
                      # accept a name or number.
                    "strVal": "A String", # The string value.
                    "type": "A String", # The type of the value.
                    "intVal": 42, # The int value.
                  },
                },
                "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                    # +optional
                  "path": "A String", # Path to access on the HTTP server.
                      # +optional
                  "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                      # "Host" in httpHeaders instead.
                      # +optional
                  "scheme": "A String", # Scheme to use for connecting to the host.
                      # Defaults to HTTP.
                      # +optional
                  "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                      # Number must be in the range 1 to 65535.
                      # Name must be an IANA_SVC_NAME.
                      # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                      # inner type.  This allows you to have, for example, a JSON field that can
                      # accept a name or number.
                    "strVal": "A String", # The string value.
                    "type": "A String", # The type of the value.
                    "intVal": 42, # The int value.
                  },
                  "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                      # +optional
                    { # HTTPHeader describes a custom header to be used in HTTP probes
                      "name": "A String", # The header field name
                      "value": "A String", # The header field value
                    },
                  ],
                },
                "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                    # Exec specifies the action to take.
                    # +optional
                  "command": "A String", # Command is the command line to execute inside the container, the working
                      # directory for the command  is root ('/') in the container's filesystem. The
                      # command is simply exec'd, it is not run inside a shell, so traditional
                      # shell instructions ('|', etc) won't work. To use a shell, you need to
                      # explicitly call out to that shell. Exit status of 0 is treated as
                      # live/healthy and non-zero is unhealthy. +optional
                },
              },
              "periodSeconds": 42, # How often (in seconds) to perform the probe.
                  # Default to 10 seconds. Minimum value is 1.
                  # +optional
              "successThreshold": 42, # Minimum consecutive successes for the probe to be considered successful
                  # after having failed. Defaults to 1. Must be 1 for liveness. Minimum value
                  # is 1. +optional
              "failureThreshold": 42, # Minimum consecutive failures for the probe to be considered failed after
                  # having succeeded. Defaults to 3. Minimum value is 1. +optional
            },
            "image": "A String", # Docker image name.
                # More info: https://kubernetes.io/docs/concepts/containers/images
            "imagePullPolicy": "A String", # Image pull policy.
                # One of Always, Never, IfNotPresent.
                # Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
                # Cannot be updated.
                # More info:
                # https://kubernetes.io/docs/concepts/containers/images#updating-images
                # +optional
            "readinessProbe": { # Probe describes a health check to be performed against a container to # Periodic probe of container service readiness.
                # Container will be removed from service endpoints if the probe fails.
                # Cannot be updated.
                # More info:
                # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                # +optional
                # determine whether it is alive or ready to receive traffic.
              "timeoutSeconds": 42, # Number of seconds after which the probe times out.
                  # Defaults to 1 second. Minimum value is 1.
                  # More info:
                  # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                  # +optional
              "initialDelaySeconds": 42, # Number of seconds after the container has started before liveness probes
                  # are initiated. More info:
                  # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                  # +optional
              "handler": { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                    # TCP hooks not yet supported
                  "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                      # +optional
                  "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                      # Number must be in the range 1 to 65535.
                      # Name must be an IANA_SVC_NAME.
                      # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                      # inner type.  This allows you to have, for example, a JSON field that can
                      # accept a name or number.
                    "strVal": "A String", # The string value.
                    "type": "A String", # The type of the value.
                    "intVal": 42, # The int value.
                  },
                },
                "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                    # +optional
                  "path": "A String", # Path to access on the HTTP server.
                      # +optional
                  "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                      # "Host" in httpHeaders instead.
                      # +optional
                  "scheme": "A String", # Scheme to use for connecting to the host.
                      # Defaults to HTTP.
                      # +optional
                  "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                      # Number must be in the range 1 to 65535.
                      # Name must be an IANA_SVC_NAME.
                      # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                      # inner type.  This allows you to have, for example, a JSON field that can
                      # accept a name or number.
                    "strVal": "A String", # The string value.
                    "type": "A String", # The type of the value.
                    "intVal": 42, # The int value.
                  },
                  "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                      # +optional
                    { # HTTPHeader describes a custom header to be used in HTTP probes
                      "name": "A String", # The header field name
                      "value": "A String", # The header field value
                    },
                  ],
                },
                "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                    # Exec specifies the action to take.
                    # +optional
                  "command": "A String", # Command is the command line to execute inside the container, the working
                      # directory for the command  is root ('/') in the container's filesystem. The
                      # command is simply exec'd, it is not run inside a shell, so traditional
                      # shell instructions ('|', etc) won't work. To use a shell, you need to
                      # explicitly call out to that shell. Exit status of 0 is treated as
                      # live/healthy and non-zero is unhealthy. +optional
                },
              },
              "periodSeconds": 42, # How often (in seconds) to perform the probe.
                  # Default to 10 seconds. Minimum value is 1.
                  # +optional
              "successThreshold": 42, # Minimum consecutive successes for the probe to be considered successful
                  # after having failed. Defaults to 1. Must be 1 for liveness. Minimum value
                  # is 1. +optional
              "failureThreshold": 42, # Minimum consecutive failures for the probe to be considered failed after
                  # having succeeded. Defaults to 3. Minimum value is 1. +optional
            },
            "terminationMessagePath": "A String", # Optional: Path at which the file to which the container's termination
                # message will be written is mounted into the container's filesystem. Message
                # written is intended to be brief final status, such as an assertion failure
                # message. Will be truncated by the node if greater than 4096 bytes. The
                # total message length across all containers will be limited to 12kb.
                # Defaults to /dev/termination-log.
                # Cannot be updated.
                # +optional
            "ports": [ # List of ports to expose from the container. Exposing a port here gives
                # the system additional information about the network connections a
                # container uses, but is primarily informational. Not specifying a port here
                # DOES NOT prevent that port from being exposed. Any port which is
                # listening on the default "0.0.0.0" address inside a container will be
                # accessible from the network.
                # Cannot be updated.
                # +optional
              { # ContainerPort represents a network port in a single container.
                "protocol": "A String", # Protocol for port. Must be UDP or TCP.
                    # Defaults to "TCP".
                    # +optional
                "hostIP": "A String", # What host IP to bind the external port to.
                    # +optional
                "containerPort": 42, # Number of port to expose on the pod's IP address.
                    # This must be a valid port number, 0 < x < 65536.
                "name": "A String", # If specified, this must be an IANA_SVC_NAME and unique within the pod. Each
                    # named port in a pod must have a unique name. Name for the port that can be
                    # referred to by services.
                    # +optional
                "hostPort": 42, # Number of port to expose on the host.
                    # If specified, this must be a valid port number, 0 < x < 65536.
                    # If HostNetwork is specified, this must match ContainerPort.
                    # Most containers do not need this.
                    # +optional
              },
            ],
            "resources": { # ResourceRequirements describes the compute resource requirements. # Compute Resources required by this container.
                # Cannot be updated.
                # More info:
                # https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                # +optional
              "requests": { # Requests describes the minimum amount of compute resources required.
                  # If Requests is omitted for a container, it defaults to Limits if that is
                  # explicitly specified, otherwise to an implementation-defined value.
                  # The values of the map is string form of the 'quantity' k8s type:
                  # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                "a_key": "A String",
              },
              "requestsInMap": { # Requests describes the minimum amount of compute resources required.
                  # If Requests is omitted for a container, it defaults to Limits if that is
                  # explicitly specified, otherwise to an implementation-defined value.
                  # This is a temporary field created to migrate away from the
                  # map<string, Quantity> requests field. This is done to become compliant
                  # with k8s style API.
                  # This field is deprecated in favor of requests field.
                "a_key": { # The view model of a single quantity, e.g. "800 MiB". Corresponds to
                    # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                  "string": "A String", # Stringified version of the quantity, e.g., "800 MiB".
                },
              },
              "limitsInMap": { # Limits describes the maximum amount of compute resources allowed.
                  # This is a temporary field created to migrate away from the
                  # map<string, Quantity> limits field. This is done to become compliant
                  # with k8s style API.
                  # This field is deprecated in favor of limits field.
                "a_key": { # The view model of a single quantity, e.g. "800 MiB". Corresponds to
                    # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                  "string": "A String", # Stringified version of the quantity, e.g., "800 MiB".
                },
              },
              "limits": { # Limits describes the maximum amount of compute resources allowed.
                  # The values of the map is string form of the 'quantity' k8s type:
                  # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                "a_key": "A String",
              },
            },
            "workingDir": "A String", # Container's working directory.
                # If not specified, the container runtime's default will be used, which
                # might be configured in the container image.
                # Cannot be updated.
                # +optional
          },
          "serviceAccountName": "A String", # Not currently used by Cloud Run.
          "timeoutSeconds": 42, # TimeoutSeconds holds the max duration the instance is allowed for
              # responding to a request.
              # Not currently used by Cloud Run.
          "servingState": "A String", # ServingState holds a value describing the state the resources
              # are in for this Revision.
              # Users must not specify this when creating a revision. It is expected
              # that the system will manipulate this based on routability and load.
              #
              # Populated by the system.
              # Read-only.
          "generation": 42, # Deprecated and not currently populated by Cloud Run. See
              # metadata.generation instead, which is the sequence number containing the
              # latest generation of the desired state.
              #
              # Read-only.
          "concurrencyModel": "A String", # ConcurrencyModel specifies the desired concurrency model
              # (Single or Multi) for the Revision. Defaults to Multi.
              # Deprecated in favor of ContainerConcurrency.
              # +optional
          "containerConcurrency": 42, # ContainerConcurrency specifies the maximum allowed in-flight (concurrent)
              # requests per container of the Revision. Values are:
              # - `0` thread-safe, the system should manage the max concurrency. This is
              #    the default value.
              # - `1` not-thread-safe. Single concurrency
              # - `2-N` thread-safe, max concurrency of N
          "volumes": [
            { # Volume represents a named volume in a container.
              "configMap": { # Adapts a ConfigMap into a volume.
                  # The contents of the target ConfigMap's Data field will be presented in a
                  # volume as files using the keys in the Data field as the file names, unless
                  # the items element is populated with specific mappings of keys to paths.
                "items": [ # If unspecified, each key-value pair in the Data field of the referenced
                    # Secret will be projected into the volume as a file whose name is the
                    # key and content is the value. If specified, the listed keys will be
                    # projected into the specified paths, and unlisted keys will not be
                    # present. If a key is specified which is not present in the Secret,
                    # the volume setup will error unless it is marked optional.
                  { # Maps a string key to a path within a volume.
                    "path": "A String", # The relative path of the file to map the key to.
                        # May not be an absolute path.
                        # May not contain the path element '..'.
                        # May not start with the string '..'.
                    "mode": 42, # Mode bits to use on this file, must be a value between 0 and 0777. If not
                        # specified, the volume defaultMode will be used. This might be in conflict
                        # with other options that affect the file mode, like fsGroup, and the result
                        # can be other mode bits set. +optional
                    "key": "A String", # The key to project.
                  },
                ],
                "optional": True or False, # Specify whether the Secret or its keys must be defined.
                "name": "A String", # Name of the config.
                "defaultMode": 42, # Mode bits to use on created files by default. Must be a value between 0 and
                    # 0777. Defaults to 0644. Directories within the path are not affected by
                    # this setting. This might be in conflict with other options that affect the
                    # file mode, like fsGroup, and the result can be other mode bits set.
              },
              "secret": { # The contents of the target Secret's Data field will be presented in a volume
                  # as files using the keys in the Data field as the file names.
                "items": [ # If unspecified, each key-value pair in the Data field of the referenced
                    # Secret will be projected into the volume as a file whose name is the
                    # key and content is the value. If specified, the listed keys will be
                    # projected into the specified paths, and unlisted keys will not be
                    # present. If a key is specified which is not present in the Secret,
                    # the volume setup will error unless it is marked optional.
                  { # Maps a string key to a path within a volume.
                    "path": "A String", # The relative path of the file to map the key to.
                        # May not be an absolute path.
                        # May not contain the path element '..'.
                        # May not start with the string '..'.
                    "mode": 42, # Mode bits to use on this file, must be a value between 0 and 0777. If not
                        # specified, the volume defaultMode will be used. This might be in conflict
                        # with other options that affect the file mode, like fsGroup, and the result
                        # can be other mode bits set. +optional
                    "key": "A String", # The key to project.
                  },
                ],
                "optional": True or False, # Specify whether the Secret or its keys must be defined.
                "defaultMode": 42, # Mode bits to use on created files by default. Must be a value between 0 and
                    # 0777. Defaults to 0644. Directories within the path are not affected by
                    # this setting. This might be in conflict with other options that affect the
                    # file mode, like fsGroup, and the result can be other mode bits set.
                "secretName": "A String", # Name of the secret in the container's namespace to use.
              },
              "name": "A String", # Volume's name.
            },
          ],
          "containers": [ # Containers holds the single container that defines the unit of execution
              # for this Revision. In the context of a Revision, we disallow a number of
              # fields on this Container, including: name and lifecycle.
            { # A single application container.
                # This specifies both the container to run, the command to run in the container
                # and the arguments to supply to it.
                # Note that additional arguments may be supplied by the system to the container
                # at runtime.
              "tty": True or False, # Whether this container should allocate a TTY for itself, also requires
                  # 'stdin' to be true. Default is false. +optional
              "stdin": True or False, # Whether this container should allocate a buffer for stdin in the container
                  # runtime. If this is not set, reads from stdin in the container will always
                  # result in EOF. Default is false. +optional
              "securityContext": { # SecurityContext holds security configuration that will be applied to a # Security options the pod should run with.
                  # More info: https://kubernetes.io/docs/concepts/policy/security-context/
                  # More info:
                  # https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
                  # +optional
                  # container. Some fields are present in both SecurityContext and
                  # PodSecurityContext.  When both are set, the values in SecurityContext take
                  # precedence.
                "readOnlyRootFilesystem": True or False, # Whether this container has a read-only root filesystem.
                    # Default is false.
                    # +optional
                "runAsGroup": "A String", # The GID to run the entrypoint of the container process.
                    # Uses runtime default if unset.
                    # May also be set in PodSecurityContext.  If set in both SecurityContext and
                    # PodSecurityContext, the value specified in SecurityContext takes
                    # precedence. +optional
                "runAsUser": "A String", # The UID to run the entrypoint of the container process.
                    # Defaults to user specified in image metadata if unspecified.
                    # May also be set in PodSecurityContext.  If set in both SecurityContext and
                    # PodSecurityContext, the value specified in SecurityContext takes
                    # precedence. +optional
                "allowPrivilegeEscalation": True or False, # AllowPrivilegeEscalation controls whether a process can gain more
                    # privileges than its parent process. This bool directly controls if
                    # the no_new_privs flag will be set on the container process.
                    # AllowPrivilegeEscalation is true always when the container is:
                    # 1) run as Privileged
                    # 2) has CAP_SYS_ADMIN
                    # +optional
                "capabilities": { # Adds and removes POSIX capabilities from running containers. # The capabilities to add/drop when running containers.
                    # Defaults to the default set of capabilities granted by the container
                    # runtime. +optional
                  "add": [ # Added capabilities
                      # +optional
                    "A String",
                  ],
                  "drop": [ # Removed capabilities
                      # +optional
                    "A String",
                  ],
                },
                "runAsNonRoot": True or False, # Indicates that the container must run as a non-root user.
                    # If true, the Kubelet will validate the image at runtime to ensure that it
                    # does not run as UID 0 (root) and fail to start the container if it does.
                    # If unset or false, no such validation will be performed.
                    # May also be set in PodSecurityContext.  If set in both SecurityContext and
                    # PodSecurityContext, the value specified in SecurityContext takes
                    # precedence. +optional
                "seLinuxOptions": { # SELinuxOptions are the labels to be applied to the container # The SELinux context to be applied to the container.
                    # If unspecified, the container runtime will allocate a random SELinux
                    # context for each container.  May also be set in PodSecurityContext.  If set
                    # in both SecurityContext and PodSecurityContext, the value specified in
                    # SecurityContext takes precedence. +optional
                  "role": "A String", # Role is a SELinux role label that applies to the container.
                      # +optional
                  "type": "A String", # Type is a SELinux type label that applies to the container.
                      # +optional
                  "user": "A String", # User is a SELinux user label that applies to the container.
                      # +optional
                  "level": "A String", # Level is SELinux level label that applies to the container.
                      # +optional
                },
                "privileged": True or False, # Run container in privileged mode.
                    # Processes in privileged containers are essentially equivalent to root on
                    # the host. Defaults to false. +optional
              },
              "name": "A String", # Name of the container specified as a DNS_LABEL.
                  # Each container must have a unique name (DNS_LABEL).
                  # Cannot be updated.
              "envFrom": [ # List of sources to populate environment variables in the container.
                  # The keys defined within a source must be a C_IDENTIFIER. All invalid keys
                  # will be reported as an event when the container is starting. When a key
                  # exists in multiple sources, the value associated with the last source will
                  # take precedence. Values defined by an Env with a duplicate key will take
                  # precedence. Cannot be updated. +optional
                { # EnvFromSource represents the source of a set of ConfigMaps
                  "secretRef": { # SecretEnvSource selects a Secret to populate the environment # The Secret to select from
                      # +optional
                      # variables with.
                      #
                      # The contents of the target Secret's Data field will represent the
                      # key-value pairs as environment variables.
                    "localObjectReference": { # LocalObjectReference contains enough information to let you locate the # The Secret to select from.
                        # referenced object inside the same namespace.
                      "name": "A String", # Name of the referent.
                          # More info:
                          # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                    },
                    "optional": True or False, # Specify whether the Secret must be defined
                        # +optional
                  },
                  "configMapRef": { # ConfigMapEnvSource selects a ConfigMap to populate the environment # The ConfigMap to select from
                      # +optional
                      # variables with.
                      #
                      # The contents of the target ConfigMap's Data field will represent the
                      # key-value pairs as environment variables.
                    "localObjectReference": { # LocalObjectReference contains enough information to let you locate the # The ConfigMap to select from.
                        # referenced object inside the same namespace.
                      "name": "A String", # Name of the referent.
                          # More info:
                          # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                    },
                    "optional": True or False, # Specify whether the ConfigMap must be defined
                        # +optional
                  },
                  "prefix": "A String", # An optional identifier to prepend to each key in the ConfigMap. Must be a
                      # C_IDENTIFIER. +optional
                },
              ],
              "env": [ # List of environment variables to set in the container.
                  # Cannot be updated.
                  # +optional
                { # EnvVar represents an environment variable present in a Container.
                  "name": "A String", # Name of the environment variable. Must be a C_IDENTIFIER.
                  "value": "A String", # Variable references $(VAR_NAME) are expanded
                      # using the previous defined environment variables in the container and
                      # any route environment variables. If a variable cannot be resolved,
                      # the reference in the input string will be unchanged. The $(VAR_NAME)
                      # syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped
                      # references will never be expanded, regardless of whether the variable
                      # exists or not.
                      # Defaults to "".
                      # +optional
                },
              ],
              "volumeMounts": [ # Pod volumes to mount into the container's filesystem.
                  # Cannot be updated.
                  # +optional
                { # VolumeMount describes a mounting of a Volume within a container.
                  "readOnly": True or False, # Mounted read-only if true, read-write otherwise (false or unspecified).
                      # Defaults to false.
                      # +optional
                  "mountPropagation": "A String", # mountPropagation determines how mounts are propagated from the host
                      # to container and the other way around.
                      # When not set, MountPropagationHostToContainer is used.
                      # This field is beta in 1.10.
                      # +optional
                  "subPath": "A String", # Path within the volume from which the container's volume should be mounted.
                      # Defaults to "" (volume's root).
                      # +optional
                  "name": "A String", # This must match the Name of a Volume.
                  "mountPath": "A String", # Path within the container at which the volume should be mounted.  Must
                      # not contain ':'.
                },
              ],
              "volumeDevices": [ # volumeDevices is the list of block devices to be used by the container.
                  # This is an alpha feature and may change in the future.
                  # +optional
                { # volumeDevice describes a mapping of a raw block device within a container.
                  "devicePath": "A String", # devicePath is the path inside of the container that the device will be
                      # mapped to.
                  "name": "A String", # name must match the name of a persistentVolumeClaim in the pod
                },
              ],
              "args": [ # Arguments to the entrypoint.
                  # The docker image's CMD is used if this is not provided.
                  # Variable references $(VAR_NAME) are expanded using the container's
                  # environment. If a variable cannot be resolved, the reference in the input
                  # string will be unchanged. The $(VAR_NAME) syntax can be escaped with a
                  # double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
                  # regardless of whether the variable exists or not.
                  # Cannot be updated.
                  # More info:
                  # https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
                  # +optional
                "A String",
              ],
              "stdinOnce": True or False, # Whether the container runtime should close the stdin channel after it has
                  # been opened by a single attach. When stdin is true the stdin stream will
                  # remain open across multiple attach sessions. If stdinOnce is set to true,
                  # stdin is opened on container start, is empty until the first client
                  # attaches to stdin, and then remains open and accepts data until the client
                  # disconnects, at which time stdin is closed and remains closed until the
                  # container is restarted. If this flag is false, a container processes that
                  # reads from stdin will never receive an EOF. Default is false +optional
              "terminationMessagePolicy": "A String", # Indicate how the termination message should be populated. File will use the
                  # contents of terminationMessagePath to populate the container status message
                  # on both success and failure. FallbackToLogsOnError will use the last chunk
                  # of container log output if the termination message file is empty and the
                  # container exited with an error. The log output is limited to 2048 bytes or
                  # 80 lines, whichever is smaller. Defaults to File. Cannot be updated.
                  # +optional
              "lifecycle": { # Lifecycle describes actions that the management system should take in # Actions that the management system should take in response to container
                  # lifecycle events. Cannot be updated. +optional
                  # response to container lifecycle events. For the PostStart and PreStop
                  # lifecycle handlers, management of the container blocks until the action is
                  # complete, unless the container process fails, in which case the handler is
                  # aborted.
                "preStop": { # Handler defines a specific action that should be taken # PreStop is called immediately before a container is terminated.
                    # The container is terminated after the handler completes.
                    # The reason for termination is passed to the handler.
                    # Regardless of the outcome of the handler, the container is eventually
                    # terminated. Other management of the container blocks until the hook
                    # completes. More info:
                    # https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
                    # +optional
                  "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                      # TCP hooks not yet supported
                    "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                        # +optional
                    "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                        # Number must be in the range 1 to 65535.
                        # Name must be an IANA_SVC_NAME.
                        # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                        # inner type.  This allows you to have, for example, a JSON field that can
                        # accept a name or number.
                      "strVal": "A String", # The string value.
                      "type": "A String", # The type of the value.
                      "intVal": 42, # The int value.
                    },
                  },
                  "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                      # +optional
                    "path": "A String", # Path to access on the HTTP server.
                        # +optional
                    "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                        # "Host" in httpHeaders instead.
                        # +optional
                    "scheme": "A String", # Scheme to use for connecting to the host.
                        # Defaults to HTTP.
                        # +optional
                    "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                        # Number must be in the range 1 to 65535.
                        # Name must be an IANA_SVC_NAME.
                        # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                        # inner type.  This allows you to have, for example, a JSON field that can
                        # accept a name or number.
                      "strVal": "A String", # The string value.
                      "type": "A String", # The type of the value.
                      "intVal": 42, # The int value.
                    },
                    "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                        # +optional
                      { # HTTPHeader describes a custom header to be used in HTTP probes
                        "name": "A String", # The header field name
                        "value": "A String", # The header field value
                      },
                    ],
                  },
                  "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                      # Exec specifies the action to take.
                      # +optional
                    "command": "A String", # Command is the command line to execute inside the container, the working
                        # directory for the command  is root ('/') in the container's filesystem. The
                        # command is simply exec'd, it is not run inside a shell, so traditional
                        # shell instructions ('|', etc) won't work. To use a shell, you need to
                        # explicitly call out to that shell. Exit status of 0 is treated as
                        # live/healthy and non-zero is unhealthy. +optional
                  },
                },
                "postStart": { # Handler defines a specific action that should be taken # PostStart is called immediately after a container is created. If the
                    # handler fails, the container is terminated and restarted according to its
                    # restart policy. Other management of the container blocks until the hook
                    # completes. More info:
                    # https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
                    # +optional
                  "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                      # TCP hooks not yet supported
                    "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                        # +optional
                    "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                        # Number must be in the range 1 to 65535.
                        # Name must be an IANA_SVC_NAME.
                        # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                        # inner type.  This allows you to have, for example, a JSON field that can
                        # accept a name or number.
                      "strVal": "A String", # The string value.
                      "type": "A String", # The type of the value.
                      "intVal": 42, # The int value.
                    },
                  },
                  "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                      # +optional
                    "path": "A String", # Path to access on the HTTP server.
                        # +optional
                    "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                        # "Host" in httpHeaders instead.
                        # +optional
                    "scheme": "A String", # Scheme to use for connecting to the host.
                        # Defaults to HTTP.
                        # +optional
                    "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                        # Number must be in the range 1 to 65535.
                        # Name must be an IANA_SVC_NAME.
                        # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                        # inner type.  This allows you to have, for example, a JSON field that can
                        # accept a name or number.
                      "strVal": "A String", # The string value.
                      "type": "A String", # The type of the value.
                      "intVal": 42, # The int value.
                    },
                    "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                        # +optional
                      { # HTTPHeader describes a custom header to be used in HTTP probes
                        "name": "A String", # The header field name
                        "value": "A String", # The header field value
                      },
                    ],
                  },
                  "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                      # Exec specifies the action to take.
                      # +optional
                    "command": "A String", # Command is the command line to execute inside the container, the working
                        # directory for the command  is root ('/') in the container's filesystem. The
                        # command is simply exec'd, it is not run inside a shell, so traditional
                        # shell instructions ('|', etc) won't work. To use a shell, you need to
                        # explicitly call out to that shell. Exit status of 0 is treated as
                        # live/healthy and non-zero is unhealthy. +optional
                  },
                },
              },
              "command": [ # Entrypoint array. Not executed within a shell.
                  # The docker image's ENTRYPOINT is used if this is not provided.
                  # Variable references $(VAR_NAME) are expanded using the container's
                  # environment. If a variable cannot be resolved, the reference in the input
                  # string will be unchanged. The $(VAR_NAME) syntax can be escaped with a
                  # double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
                  # regardless of whether the variable exists or not.
                  # Cannot be updated.
                  # More info:
                  # https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
                  # +optional
                "A String",
              ],
              "livenessProbe": { # Probe describes a health check to be performed against a container to # Periodic probe of container liveness.
                  # Container will be restarted if the probe fails.
                  # Cannot be updated.
                  # More info:
                  # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                  # +optional
                  # determine whether it is alive or ready to receive traffic.
                "timeoutSeconds": 42, # Number of seconds after which the probe times out.
                    # Defaults to 1 second. Minimum value is 1.
                    # More info:
                    # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                    # +optional
                "initialDelaySeconds": 42, # Number of seconds after the container has started before liveness probes
                    # are initiated. More info:
                    # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                    # +optional
                "handler": { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                  "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                      # TCP hooks not yet supported
                    "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                        # +optional
                    "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                        # Number must be in the range 1 to 65535.
                        # Name must be an IANA_SVC_NAME.
                        # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                        # inner type.  This allows you to have, for example, a JSON field that can
                        # accept a name or number.
                      "strVal": "A String", # The string value.
                      "type": "A String", # The type of the value.
                      "intVal": 42, # The int value.
                    },
                  },
                  "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                      # +optional
                    "path": "A String", # Path to access on the HTTP server.
                        # +optional
                    "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                        # "Host" in httpHeaders instead.
                        # +optional
                    "scheme": "A String", # Scheme to use for connecting to the host.
                        # Defaults to HTTP.
                        # +optional
                    "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                        # Number must be in the range 1 to 65535.
                        # Name must be an IANA_SVC_NAME.
                        # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                        # inner type.  This allows you to have, for example, a JSON field that can
                        # accept a name or number.
                      "strVal": "A String", # The string value.
                      "type": "A String", # The type of the value.
                      "intVal": 42, # The int value.
                    },
                    "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                        # +optional
                      { # HTTPHeader describes a custom header to be used in HTTP probes
                        "name": "A String", # The header field name
                        "value": "A String", # The header field value
                      },
                    ],
                  },
                  "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                      # Exec specifies the action to take.
                      # +optional
                    "command": "A String", # Command is the command line to execute inside the container, the working
                        # directory for the command  is root ('/') in the container's filesystem. The
                        # command is simply exec'd, it is not run inside a shell, so traditional
                        # shell instructions ('|', etc) won't work. To use a shell, you need to
                        # explicitly call out to that shell. Exit status of 0 is treated as
                        # live/healthy and non-zero is unhealthy. +optional
                  },
                },
                "periodSeconds": 42, # How often (in seconds) to perform the probe.
                    # Default to 10 seconds. Minimum value is 1.
                    # +optional
                "successThreshold": 42, # Minimum consecutive successes for the probe to be considered successful
                    # after having failed. Defaults to 1. Must be 1 for liveness. Minimum value
                    # is 1. +optional
                "failureThreshold": 42, # Minimum consecutive failures for the probe to be considered failed after
                    # having succeeded. Defaults to 3. Minimum value is 1. +optional
              },
              "image": "A String", # Docker image name.
                  # More info: https://kubernetes.io/docs/concepts/containers/images
              "imagePullPolicy": "A String", # Image pull policy.
                  # One of Always, Never, IfNotPresent.
                  # Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
                  # Cannot be updated.
                  # More info:
                  # https://kubernetes.io/docs/concepts/containers/images#updating-images
                  # +optional
              "readinessProbe": { # Probe describes a health check to be performed against a container to # Periodic probe of container service readiness.
                  # Container will be removed from service endpoints if the probe fails.
                  # Cannot be updated.
                  # More info:
                  # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                  # +optional
                  # determine whether it is alive or ready to receive traffic.
                "timeoutSeconds": 42, # Number of seconds after which the probe times out.
                    # Defaults to 1 second. Minimum value is 1.
                    # More info:
                    # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                    # +optional
                "initialDelaySeconds": 42, # Number of seconds after the container has started before liveness probes
                    # are initiated. More info:
                    # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
                    # +optional
                "handler": { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                  "tcpSocket": { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                      # TCP hooks not yet supported
                    "host": "A String", # Optional: Host name to connect to, defaults to the pod IP.
                        # +optional
                    "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Number or name of the port to access on the container.
                        # Number must be in the range 1 to 65535.
                        # Name must be an IANA_SVC_NAME.
                        # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                        # inner type.  This allows you to have, for example, a JSON field that can
                        # accept a name or number.
                      "strVal": "A String", # The string value.
                      "type": "A String", # The type of the value.
                      "intVal": 42, # The int value.
                    },
                  },
                  "httpGet": { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                      # +optional
                    "path": "A String", # Path to access on the HTTP server.
                        # +optional
                    "host": "A String", # Host name to connect to, defaults to the pod IP. You probably want to set
                        # "Host" in httpHeaders instead.
                        # +optional
                    "scheme": "A String", # Scheme to use for connecting to the host.
                        # Defaults to HTTP.
                        # +optional
                    "port": { # IntOrString is a type that can hold an int32 or a string.  When used in # Name or number of the port to access on the container.
                        # Number must be in the range 1 to 65535.
                        # Name must be an IANA_SVC_NAME.
                        # JSON or YAML marshalling and unmarshalling, it produces or consumes the
                        # inner type.  This allows you to have, for example, a JSON field that can
                        # accept a name or number.
                      "strVal": "A String", # The string value.
                      "type": "A String", # The type of the value.
                      "intVal": 42, # The int value.
                    },
                    "httpHeaders": [ # Custom headers to set in the request. HTTP allows repeated headers.
                        # +optional
                      { # HTTPHeader describes a custom header to be used in HTTP probes
                        "name": "A String", # The header field name
                        "value": "A String", # The header field value
                      },
                    ],
                  },
                  "exec": { # ExecAction describes a "run in container" action. # One and only one of the following should be specified.
                      # Exec specifies the action to take.
                      # +optional
                    "command": "A String", # Command is the command line to execute inside the container, the working
                        # directory for the command  is root ('/') in the container's filesystem. The
                        # command is simply exec'd, it is not run inside a shell, so traditional
                        # shell instructions ('|', etc) won't work. To use a shell, you need to
                        # explicitly call out to that shell. Exit status of 0 is treated as
                        # live/healthy and non-zero is unhealthy. +optional
                  },
                },
                "periodSeconds": 42, # How often (in seconds) to perform the probe.
                    # Default to 10 seconds. Minimum value is 1.
                    # +optional
                "successThreshold": 42, # Minimum consecutive successes for the probe to be considered successful
                    # after having failed. Defaults to 1. Must be 1 for liveness. Minimum value
                    # is 1. +optional
                "failureThreshold": 42, # Minimum consecutive failures for the probe to be considered failed after
                    # having succeeded. Defaults to 3. Minimum value is 1. +optional
              },
              "terminationMessagePath": "A String", # Optional: Path at which the file to which the container's termination
                  # message will be written is mounted into the container's filesystem. Message
                  # written is intended to be brief final status, such as an assertion failure
                  # message. Will be truncated by the node if greater than 4096 bytes. The
                  # total message length across all containers will be limited to 12kb.
                  # Defaults to /dev/termination-log.
                  # Cannot be updated.
                  # +optional
              "ports": [ # List of ports to expose from the container. Exposing a port here gives
                  # the system additional information about the network connections a
                  # container uses, but is primarily informational. Not specifying a port here
                  # DOES NOT prevent that port from being exposed. Any port which is
                  # listening on the default "0.0.0.0" address inside a container will be
                  # accessible from the network.
                  # Cannot be updated.
                  # +optional
                { # ContainerPort represents a network port in a single container.
                  "protocol": "A String", # Protocol for port. Must be UDP or TCP.
                      # Defaults to "TCP".
                      # +optional
                  "hostIP": "A String", # What host IP to bind the external port to.
                      # +optional
                  "containerPort": 42, # Number of port to expose on the pod's IP address.
                      # This must be a valid port number, 0 < x < 65536.
                  "name": "A String", # If specified, this must be an IANA_SVC_NAME and unique within the pod. Each
                      # named port in a pod must have a unique name. Name for the port that can be
                      # referred to by services.
                      # +optional
                  "hostPort": 42, # Number of port to expose on the host.
                      # If specified, this must be a valid port number, 0 < x < 65536.
                      # If HostNetwork is specified, this must match ContainerPort.
                      # Most containers do not need this.
                      # +optional
                },
              ],
              "resources": { # ResourceRequirements describes the compute resource requirements. # Compute Resources required by this container.
                  # Cannot be updated.
                  # More info:
                  # https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
                  # +optional
                "requests": { # Requests describes the minimum amount of compute resources required.
                    # If Requests is omitted for a container, it defaults to Limits if that is
                    # explicitly specified, otherwise to an implementation-defined value.
                    # The values of the map is string form of the 'quantity' k8s type:
                    # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                  "a_key": "A String",
                },
                "requestsInMap": { # Requests describes the minimum amount of compute resources required.
                    # If Requests is omitted for a container, it defaults to Limits if that is
                    # explicitly specified, otherwise to an implementation-defined value.
                    # This is a temporary field created to migrate away from the
                    # map<string, Quantity> requests field. This is done to become compliant
                    # with k8s style API.
                    # This field is deprecated in favor of requests field.
                  "a_key": { # The view model of a single quantity, e.g. "800 MiB". Corresponds to
                      # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                    "string": "A String", # Stringified version of the quantity, e.g., "800 MiB".
                  },
                },
                "limitsInMap": { # Limits describes the maximum amount of compute resources allowed.
                    # This is a temporary field created to migrate away from the
                    # map<string, Quantity> limits field. This is done to become compliant
                    # with k8s style API.
                    # This field is deprecated in favor of limits field.
                  "a_key": { # The view model of a single quantity, e.g. "800 MiB". Corresponds to
                      # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                    "string": "A String", # Stringified version of the quantity, e.g., "800 MiB".
                  },
                },
                "limits": { # Limits describes the maximum amount of compute resources allowed.
                    # The values of the map is string form of the 'quantity' k8s type:
                    # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                  "a_key": "A String",
                },
              },
              "workingDir": "A String", # Container's working directory.
                  # If not specified, the container runtime's default will be used, which
                  # might be configured in the container image.
                  # Cannot be updated.
                  # +optional
            },
          ],
        },
        "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 Revision, including name, namespace, labels,
            # and annotations.
            # 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 "RevisionList".
    "unreachable": [ # Locations that could not be reached.
      "A String",
    ],
    "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 revision 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>