<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.configurations.html">configurations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Rpc to get information about a configuration.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, limit=None, watch=None, labelSelector=None, resourceVersion=None, includeUninitialized=None, fieldSelector=None, continue=None, x__xgafv=None)</a></code></p>
<p class="firstline">Rpc to list configurations.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Rpc to get information about a configuration.

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

    { # Configuration represents the &quot;floating HEAD&quot; of a linear history of
      # Revisions, and optionally how the containers those revisions reference are
      # built. Users create new Revisions by updating the Configuration&#x27;s spec. The
      # &quot;latest created&quot; revision&#x27;s name is available under status, as is the &quot;latest
      # ready&quot; revision&#x27;s name. See also:
      # https://github.com/knative/serving/blob/master/docs/spec/overview.md#configuration
    &quot;apiVersion&quot;: &quot;A String&quot;, # The API version for this call such as &quot;serving.knative.dev/v1alpha1&quot;.
    &quot;spec&quot;: { # ConfigurationSpec holds the desired state of the Configuration (from the # Spec holds the desired state of the Configuration (from the client).
        # client).
      &quot;template&quot;: { # RevisionTemplateSpec describes the data a revision should have when created # Template holds the latest specification for the Revision to be stamped out.
          # from a template. Based on:
          # https://github.com/kubernetes/api/blob/e771f807/core/v1/types.go#L3179-L3190
        &quot;metadata&quot;: { # ObjectMeta is metadata that all persisted resources must have, which includes # Optional metadata for this Revision, including labels and annotations. Name
            # will be generated by the Configuration.
            # To set minimum instances for this revision, use the
            # &quot;autoscaling.knative.dev/minScale&quot; annotation key. (Cloud Run on GKE only).
            # To set maximum instances for this revision, use the
            # &quot;autoscaling.knative.dev/maxScale&quot; annotation key.
            # To set Cloud SQL connections for the revision, use the
            # &quot;run.googleapis.com/cloudsql-instances&quot; annotation key. Values should be
            # comma separated.
            # all objects users must create.
          &quot;annotations&quot;: { # 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
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;generateName&quot;: &quot;A String&quot;, # 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;
          &quot;name&quot;: &quot;A String&quot;, # 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
          &quot;clusterName&quot;: &quot;A String&quot;, # 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
          &quot;deletionGracePeriodSeconds&quot;: 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
          &quot;finalizers&quot;: [ # 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
            &quot;A String&quot;,
          ],
          &quot;deletionTimestamp&quot;: &quot;A String&quot;, # 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
          &quot;ownerReferences&quot;: [ # 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.
              &quot;apiVersion&quot;: &quot;A String&quot;, # API version of the referent.
              &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                  # More info: http://kubernetes.io/docs/user-guide/identifiers#names
              &quot;uid&quot;: &quot;A String&quot;, # UID of the referent.
                  # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
              &quot;controller&quot;: True or False, # If true, this reference points to the managing controller.
                  # +optional
              &quot;kind&quot;: &quot;A String&quot;, # Kind of the referent.
                  # More info:
                  # https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
              &quot;blockOwnerDeletion&quot;: True or False, # If true, AND if the owner has the &quot;foregroundDeletion&quot; 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 &quot;delete&quot; permission of the owner,
                  # otherwise 422 (Unprocessable Entity) will be returned.
                  # +optional
            },
          ],
          &quot;creationTimestamp&quot;: &quot;A String&quot;, # 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
          &quot;labels&quot;: { # 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
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;generation&quot;: 42, # A sequence number representing a specific generation of the desired state.
              # Populated by the system. Read-only.
              # +optional
          &quot;resourceVersion&quot;: &quot;A String&quot;, # 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
          &quot;uid&quot;: &quot;A String&quot;, # 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
          &quot;selfLink&quot;: &quot;A String&quot;, # SelfLink is a URL representing this object.
              # Populated by the system.
              # Read-only.
              # +optional
              #  string selfLink = 4;
          &quot;namespace&quot;: &quot;A String&quot;, # 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.
        },
        &quot;spec&quot;: { # RevisionSpec holds the desired state of the Revision (from the client). # RevisionSpec holds the desired state of the Revision (from the client).
          &quot;containerConcurrency&quot;: 42, # (Optional)
              #
              # ContainerConcurrency specifies the maximum allowed in-flight (concurrent)
              # requests per container instance of the Revision.
              #
              # Cloud Run fully managed: supported, defaults to 80
              #
              # Cloud Run on GKE: supported, defaults to 0, which means concurrency
              # to the application is not limited, and the system decides the
              # target concurrency for the autoscaler.
          &quot;serviceAccountName&quot;: &quot;A String&quot;, # Email address of the IAM service account associated with the revision
              # of the service. The service account represents the identity of the
              # running revision, and determines what permissions the revision has. If
              # not provided, the revision will use the project&#x27;s default service account.
          &quot;containers&quot;: [ # 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.
              # In Cloud Run, only a single container may be provided.
            { # 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.
              &quot;terminationMessagePath&quot;: &quot;A String&quot;, # Optional: Path at which the file to which the container&#x27;s termination
                  # message will be written is mounted into the container&#x27;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
              &quot;lifecycle&quot;: { # 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.
                &quot;preStop&quot;: { # 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
                  &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                      # Exec specifies the action to take.
                      # +optional
                    &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                        # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                        # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                        # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                  },
                  &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                      # +optional
                    &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                        # +optional
                      { # HTTPHeader describes a custom header to be used in HTTP probes
                        &quot;value&quot;: &quot;A String&quot;, # The header field value
                        &quot;name&quot;: &quot;A String&quot;, # The header field name
                      },
                    ],
                    &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                        # +optional
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                        # &quot;Host&quot; in httpHeaders instead.
                        # +optional
                    &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                        # Defaults to HTTP.
                        # +optional
                  },
                  &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                      # TCP hooks not yet supported
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                        # +optional
                  },
                },
                &quot;postStart&quot;: { # 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
                  &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                      # Exec specifies the action to take.
                      # +optional
                    &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                        # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                        # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                        # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                  },
                  &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                      # +optional
                    &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                        # +optional
                      { # HTTPHeader describes a custom header to be used in HTTP probes
                        &quot;value&quot;: &quot;A String&quot;, # The header field value
                        &quot;name&quot;: &quot;A String&quot;, # The header field name
                      },
                    ],
                    &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                        # +optional
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                        # &quot;Host&quot; in httpHeaders instead.
                        # +optional
                    &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                        # Defaults to HTTP.
                        # +optional
                  },
                  &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                      # TCP hooks not yet supported
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                        # +optional
                  },
                },
              },
              &quot;stdin&quot;: 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
              &quot;tty&quot;: True or False, # Whether this container should allocate a TTY for itself, also requires
                  # &#x27;stdin&#x27; to be true. Default is false. +optional
              &quot;volumeMounts&quot;: [ # Pod volumes to mount into the container&#x27;s filesystem.
                  # Cannot be updated.
                  # +optional
                { # VolumeMount describes a mounting of a Volume within a container.
                  &quot;readOnly&quot;: True or False, # Mounted read-only if true, read-write otherwise (false or unspecified).
                      # Defaults to false.
                      # +optional
                  &quot;mountPropagation&quot;: &quot;A String&quot;, # 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
                  &quot;mountPath&quot;: &quot;A String&quot;, # Path within the container at which the volume should be mounted.  Must
                      # not contain &#x27;:&#x27;.
                  &quot;subPath&quot;: &quot;A String&quot;, # Path within the volume from which the container&#x27;s volume should be mounted.
                      # Defaults to &quot;&quot; (volume&#x27;s root).
                      # +optional
                  &quot;name&quot;: &quot;A String&quot;, # This must match the Name of a Volume.
                },
              ],
              &quot;volumeDevices&quot;: [ # 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.
                  &quot;name&quot;: &quot;A String&quot;, # name must match the name of a persistentVolumeClaim in the pod
                  &quot;devicePath&quot;: &quot;A String&quot;, # devicePath is the path inside of the container that the device will be
                      # mapped to.
                },
              ],
              &quot;ports&quot;: [ # 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 &quot;0.0.0.0&quot; address inside a container will be
                  # accessible from the network.
                  # Cannot be updated.
                  # +optional
                { # ContainerPort represents a network port in a single container.
                  &quot;hostPort&quot;: 42, # Number of port to expose on the host.
                      # If specified, this must be a valid port number, 0 &lt; x &lt; 65536.
                      # If HostNetwork is specified, this must match ContainerPort.
                      # Most containers do not need this.
                      # +optional
                  &quot;containerPort&quot;: 42, # Number of port to expose on the pod&#x27;s IP address.
                      # This must be a valid port number, 0 &lt; x &lt; 65536.
                  &quot;protocol&quot;: &quot;A String&quot;, # Protocol for port. Must be UDP or TCP.
                      # Defaults to &quot;TCP&quot;.
                      # +optional
                  &quot;hostIP&quot;: &quot;A String&quot;, # What host IP to bind the external port to.
                      # +optional
                  &quot;name&quot;: &quot;A String&quot;, # 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
                },
              ],
              &quot;workingDir&quot;: &quot;A String&quot;, # Container&#x27;s working directory.
                  # If not specified, the container runtime&#x27;s default will be used, which
                  # might be configured in the container image.
                  # Cannot be updated.
                  # +optional
              &quot;args&quot;: [ # Arguments to the entrypoint.
                  # The docker image&#x27;s CMD is used if this is not provided.
                  # Variable references $(VAR_NAME) are expanded using the container&#x27;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
                &quot;A String&quot;,
              ],
              &quot;stdinOnce&quot;: 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
              &quot;envFrom&quot;: [ # 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
                  &quot;configMapRef&quot;: { # ConfigMapEnvSource selects a ConfigMap to populate the environment # The ConfigMap to select from
                      # +optional
                      # variables with.
                      #
                      # The contents of the target ConfigMap&#x27;s Data field will represent the
                      # key-value pairs as environment variables.
                    &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run for Anthos: supported
                        #
                        # The ConfigMap to select from.
                    &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                        # directly into the message. Use the &quot;name&quot; field instead.
                        # referenced object inside the same namespace.
                      &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                          # More info:
                          # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                    },
                    &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run for Anthos: supported
                        #
                        # Specify whether the ConfigMap must be defined
                        # +optional
                  },
                  &quot;secretRef&quot;: { # SecretEnvSource selects a Secret to populate the environment # The Secret to select from
                      # +optional
                      # variables with.
                      #
                      # The contents of the target Secret&#x27;s Data field will represent the
                      # key-value pairs as environment variables.
                    &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                        # directly into the message. Use the &quot;name&quot; field instead.
                        # referenced object inside the same namespace.
                      &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                          # More info:
                          # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                    },
                    &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run for Anthos: supported
                        #
                        # Specify whether the Secret must be defined
                        # +optional
                    &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run for Anthos: supported
                        #
                        # The Secret to select from.
                  },
                  &quot;prefix&quot;: &quot;A String&quot;, # An optional identifier to prepend to each key in the ConfigMap. Must be a
                      # C_IDENTIFIER. +optional
                },
              ],
              &quot;image&quot;: &quot;A String&quot;, # Docker image name.
                  # More info: https://kubernetes.io/docs/concepts/containers/images
              &quot;name&quot;: &quot;A String&quot;, # Name of the container specified as a DNS_LABEL.
                  # Each container must have a unique name (DNS_LABEL).
                  # Cannot be updated.
              &quot;command&quot;: [ # Entrypoint array. Not executed within a shell.
                  # The docker image&#x27;s ENTRYPOINT is used if this is not provided.
                  # Variable references $(VAR_NAME) are expanded using the container&#x27;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
                &quot;A String&quot;,
              ],
              &quot;terminationMessagePolicy&quot;: &quot;A String&quot;, # 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
              &quot;securityContext&quot;: { # 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.
                &quot;capabilities&quot;: { # 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
                  &quot;add&quot;: [ # Added capabilities
                      # +optional
                    &quot;A String&quot;,
                  ],
                  &quot;drop&quot;: [ # Removed capabilities
                      # +optional
                    &quot;A String&quot;,
                  ],
                },
                &quot;runAsNonRoot&quot;: 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
                &quot;runAsGroup&quot;: 42, # 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
                &quot;privileged&quot;: True or False, # Run container in privileged mode.
                    # Processes in privileged containers are essentially equivalent to root on
                    # the host. Defaults to false. +optional
                &quot;allowPrivilegeEscalation&quot;: 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
                &quot;seLinuxOptions&quot;: { # 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
                  &quot;role&quot;: &quot;A String&quot;, # Role is a SELinux role label that applies to the container.
                      # +optional
                  &quot;level&quot;: &quot;A String&quot;, # Level is SELinux level label that applies to the container.
                      # +optional
                  &quot;user&quot;: &quot;A String&quot;, # User is a SELinux user label that applies to the container.
                      # +optional
                  &quot;type&quot;: &quot;A String&quot;, # Type is a SELinux type label that applies to the container.
                      # +optional
                },
                &quot;readOnlyRootFilesystem&quot;: True or False, # Whether this container has a read-only root filesystem.
                    # Default is false.
                    # +optional
                &quot;runAsUser&quot;: 42, # 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
              },
              &quot;livenessProbe&quot;: { # 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.
                &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                    # having succeeded. Defaults to 3. Minimum value is 1. +optional
                &quot;initialDelaySeconds&quot;: 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
                &quot;timeoutSeconds&quot;: 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
                &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                  &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                      # Exec specifies the action to take.
                      # +optional
                    &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                        # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                        # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                        # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                  },
                  &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                      # +optional
                    &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                        # +optional
                      { # HTTPHeader describes a custom header to be used in HTTP probes
                        &quot;value&quot;: &quot;A String&quot;, # The header field value
                        &quot;name&quot;: &quot;A String&quot;, # The header field name
                      },
                    ],
                    &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                        # +optional
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                        # &quot;Host&quot; in httpHeaders instead.
                        # +optional
                    &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                        # Defaults to HTTP.
                        # +optional
                  },
                  &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                      # TCP hooks not yet supported
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                        # +optional
                  },
                },
                &quot;successThreshold&quot;: 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
                &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                    # Default to 10 seconds. Minimum value is 1.
                    # +optional
              },
              &quot;env&quot;: [ # List of environment variables to set in the container.
                  # Cannot be updated.
                  # +optional
                { # EnvVar represents an environment variable present in a Container.
                  &quot;value&quot;: &quot;A String&quot;, # 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 &quot;&quot;.
                      # +optional
                  &quot;name&quot;: &quot;A String&quot;, # Name of the environment variable. Must be a C_IDENTIFIER.
                  &quot;valueFrom&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                      #
                      # Cloud Run on GKE: supported
                      #
                      # Source for the environment variable&#x27;s value. Cannot be used if value is not
                      # empty. +optional
                      #
                      # Cloud Run on GKE: supported
                      #
                      # EnvVarSource represents a source for the value of an EnvVar.
                    &quot;configMapKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # Selects a key of a ConfigMap.
                        # +optional
                        #
                        # Cloud Run on GKE: supported
                        #
                        # Selects a key from a ConfigMap.
                      &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # Specify whether the ConfigMap or its key must be defined
                          # +optional
                      &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # The key to select.
                      &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # The ConfigMap to select from.
                      &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                          # directly into the message. Use the &quot;name&quot; field instead.
                          # referenced object inside the same namespace.
                        &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                            # More info:
                            # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                      },
                    },
                    &quot;secretKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # Selects a key of a secret in the pod&#x27;s namespace
                        # +optional
                        #
                        # Cloud Run on GKE: supported
                        #
                        # SecretKeySelector selects a key of a Secret.
                      &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                          # directly into the message. Use the &quot;name&quot; field instead.
                          # referenced object inside the same namespace.
                        &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                            # More info:
                            # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                      },
                      &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # Specify whether the Secret or its key must be defined
                          # +optional
                      &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # The key of the secret to select from.  Must be a valid secret key.
                      &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # The name of the secret in the pod&#x27;s namespace to select from.
                    },
                  },
                },
              ],
              &quot;resources&quot;: { # 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
                &quot;requestsInMap&quot;: { # 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&lt;string, Quantity&gt; requests field. This is done to become compliant
                    # with k8s style API.
                    # This field is deprecated in favor of requests field.
                  &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                      # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                    &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                  },
                },
                &quot;requests&quot;: { # 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 &#x27;quantity&#x27; k8s type:
                    # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                  &quot;a_key&quot;: &quot;A String&quot;,
                },
                &quot;limits&quot;: { # Limits describes the maximum amount of compute resources allowed.
                    # The values of the map is string form of the &#x27;quantity&#x27; k8s type:
                    # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                  &quot;a_key&quot;: &quot;A String&quot;,
                },
                &quot;limitsInMap&quot;: { # Limits describes the maximum amount of compute resources allowed.
                    # This is a temporary field created to migrate away from the
                    # map&lt;string, Quantity&gt; limits field. This is done to become compliant
                    # with k8s style API.
                    # This field is deprecated in favor of limits field.
                  &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                      # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                    &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                  },
                },
              },
              &quot;readinessProbe&quot;: { # 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.
                &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                    # having succeeded. Defaults to 3. Minimum value is 1. +optional
                &quot;initialDelaySeconds&quot;: 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
                &quot;timeoutSeconds&quot;: 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
                &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                  &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                      # Exec specifies the action to take.
                      # +optional
                    &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                        # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                        # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                        # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                  },
                  &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                      # +optional
                    &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                        # +optional
                      { # HTTPHeader describes a custom header to be used in HTTP probes
                        &quot;value&quot;: &quot;A String&quot;, # The header field value
                        &quot;name&quot;: &quot;A String&quot;, # The header field name
                      },
                    ],
                    &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                        # +optional
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                        # &quot;Host&quot; in httpHeaders instead.
                        # +optional
                    &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                        # Defaults to HTTP.
                        # +optional
                  },
                  &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                      # TCP hooks not yet supported
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                        # +optional
                  },
                },
                &quot;successThreshold&quot;: 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
                &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                    # Default to 10 seconds. Minimum value is 1.
                    # +optional
              },
              &quot;imagePullPolicy&quot;: &quot;A String&quot;, # 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
            },
          ],
          &quot;generation&quot;: 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.
          &quot;servingState&quot;: &quot;A String&quot;, # 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.
          &quot;concurrencyModel&quot;: &quot;A String&quot;, # ConcurrencyModel specifies the desired concurrency model
              # (Single or Multi) for the Revision. Defaults to Multi.
              # Deprecated in favor of ContainerConcurrency.
              # +optional
          &quot;container&quot;: { # 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.
            &quot;terminationMessagePath&quot;: &quot;A String&quot;, # Optional: Path at which the file to which the container&#x27;s termination
                # message will be written is mounted into the container&#x27;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
            &quot;lifecycle&quot;: { # 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.
              &quot;preStop&quot;: { # 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
                &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                    # Exec specifies the action to take.
                    # +optional
                  &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                      # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                      # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                      # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                },
                &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                    # +optional
                  &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                      # +optional
                    { # HTTPHeader describes a custom header to be used in HTTP probes
                      &quot;value&quot;: &quot;A String&quot;, # The header field value
                      &quot;name&quot;: &quot;A String&quot;, # The header field name
                    },
                  ],
                  &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                      # +optional
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                      # &quot;Host&quot; in httpHeaders instead.
                      # +optional
                  &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                      # Defaults to HTTP.
                      # +optional
                },
                &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                    # TCP hooks not yet supported
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                      # +optional
                },
              },
              &quot;postStart&quot;: { # 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
                &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                    # Exec specifies the action to take.
                    # +optional
                  &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                      # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                      # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                      # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                },
                &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                    # +optional
                  &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                      # +optional
                    { # HTTPHeader describes a custom header to be used in HTTP probes
                      &quot;value&quot;: &quot;A String&quot;, # The header field value
                      &quot;name&quot;: &quot;A String&quot;, # The header field name
                    },
                  ],
                  &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                      # +optional
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                      # &quot;Host&quot; in httpHeaders instead.
                      # +optional
                  &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                      # Defaults to HTTP.
                      # +optional
                },
                &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                    # TCP hooks not yet supported
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                      # +optional
                },
              },
            },
            &quot;stdin&quot;: 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
            &quot;tty&quot;: True or False, # Whether this container should allocate a TTY for itself, also requires
                # &#x27;stdin&#x27; to be true. Default is false. +optional
            &quot;volumeMounts&quot;: [ # Pod volumes to mount into the container&#x27;s filesystem.
                # Cannot be updated.
                # +optional
              { # VolumeMount describes a mounting of a Volume within a container.
                &quot;readOnly&quot;: True or False, # Mounted read-only if true, read-write otherwise (false or unspecified).
                    # Defaults to false.
                    # +optional
                &quot;mountPropagation&quot;: &quot;A String&quot;, # 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
                &quot;mountPath&quot;: &quot;A String&quot;, # Path within the container at which the volume should be mounted.  Must
                    # not contain &#x27;:&#x27;.
                &quot;subPath&quot;: &quot;A String&quot;, # Path within the volume from which the container&#x27;s volume should be mounted.
                    # Defaults to &quot;&quot; (volume&#x27;s root).
                    # +optional
                &quot;name&quot;: &quot;A String&quot;, # This must match the Name of a Volume.
              },
            ],
            &quot;volumeDevices&quot;: [ # 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.
                &quot;name&quot;: &quot;A String&quot;, # name must match the name of a persistentVolumeClaim in the pod
                &quot;devicePath&quot;: &quot;A String&quot;, # devicePath is the path inside of the container that the device will be
                    # mapped to.
              },
            ],
            &quot;ports&quot;: [ # 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 &quot;0.0.0.0&quot; address inside a container will be
                # accessible from the network.
                # Cannot be updated.
                # +optional
              { # ContainerPort represents a network port in a single container.
                &quot;hostPort&quot;: 42, # Number of port to expose on the host.
                    # If specified, this must be a valid port number, 0 &lt; x &lt; 65536.
                    # If HostNetwork is specified, this must match ContainerPort.
                    # Most containers do not need this.
                    # +optional
                &quot;containerPort&quot;: 42, # Number of port to expose on the pod&#x27;s IP address.
                    # This must be a valid port number, 0 &lt; x &lt; 65536.
                &quot;protocol&quot;: &quot;A String&quot;, # Protocol for port. Must be UDP or TCP.
                    # Defaults to &quot;TCP&quot;.
                    # +optional
                &quot;hostIP&quot;: &quot;A String&quot;, # What host IP to bind the external port to.
                    # +optional
                &quot;name&quot;: &quot;A String&quot;, # 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
              },
            ],
            &quot;workingDir&quot;: &quot;A String&quot;, # Container&#x27;s working directory.
                # If not specified, the container runtime&#x27;s default will be used, which
                # might be configured in the container image.
                # Cannot be updated.
                # +optional
            &quot;args&quot;: [ # Arguments to the entrypoint.
                # The docker image&#x27;s CMD is used if this is not provided.
                # Variable references $(VAR_NAME) are expanded using the container&#x27;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
              &quot;A String&quot;,
            ],
            &quot;stdinOnce&quot;: 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
            &quot;envFrom&quot;: [ # 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
                &quot;configMapRef&quot;: { # ConfigMapEnvSource selects a ConfigMap to populate the environment # The ConfigMap to select from
                    # +optional
                    # variables with.
                    #
                    # The contents of the target ConfigMap&#x27;s Data field will represent the
                    # key-value pairs as environment variables.
                  &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                      #
                      # Cloud Run for Anthos: supported
                      #
                      # The ConfigMap to select from.
                  &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                      # directly into the message. Use the &quot;name&quot; field instead.
                      # referenced object inside the same namespace.
                    &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                        # More info:
                        # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                  },
                  &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                      #
                      # Cloud Run for Anthos: supported
                      #
                      # Specify whether the ConfigMap must be defined
                      # +optional
                },
                &quot;secretRef&quot;: { # SecretEnvSource selects a Secret to populate the environment # The Secret to select from
                    # +optional
                    # variables with.
                    #
                    # The contents of the target Secret&#x27;s Data field will represent the
                    # key-value pairs as environment variables.
                  &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                      # directly into the message. Use the &quot;name&quot; field instead.
                      # referenced object inside the same namespace.
                    &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                        # More info:
                        # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                  },
                  &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                      #
                      # Cloud Run for Anthos: supported
                      #
                      # Specify whether the Secret must be defined
                      # +optional
                  &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                      #
                      # Cloud Run for Anthos: supported
                      #
                      # The Secret to select from.
                },
                &quot;prefix&quot;: &quot;A String&quot;, # An optional identifier to prepend to each key in the ConfigMap. Must be a
                    # C_IDENTIFIER. +optional
              },
            ],
            &quot;image&quot;: &quot;A String&quot;, # Docker image name.
                # More info: https://kubernetes.io/docs/concepts/containers/images
            &quot;name&quot;: &quot;A String&quot;, # Name of the container specified as a DNS_LABEL.
                # Each container must have a unique name (DNS_LABEL).
                # Cannot be updated.
            &quot;command&quot;: [ # Entrypoint array. Not executed within a shell.
                # The docker image&#x27;s ENTRYPOINT is used if this is not provided.
                # Variable references $(VAR_NAME) are expanded using the container&#x27;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
              &quot;A String&quot;,
            ],
            &quot;terminationMessagePolicy&quot;: &quot;A String&quot;, # 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
            &quot;securityContext&quot;: { # 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.
              &quot;capabilities&quot;: { # 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
                &quot;add&quot;: [ # Added capabilities
                    # +optional
                  &quot;A String&quot;,
                ],
                &quot;drop&quot;: [ # Removed capabilities
                    # +optional
                  &quot;A String&quot;,
                ],
              },
              &quot;runAsNonRoot&quot;: 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
              &quot;runAsGroup&quot;: 42, # 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
              &quot;privileged&quot;: True or False, # Run container in privileged mode.
                  # Processes in privileged containers are essentially equivalent to root on
                  # the host. Defaults to false. +optional
              &quot;allowPrivilegeEscalation&quot;: 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
              &quot;seLinuxOptions&quot;: { # 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
                &quot;role&quot;: &quot;A String&quot;, # Role is a SELinux role label that applies to the container.
                    # +optional
                &quot;level&quot;: &quot;A String&quot;, # Level is SELinux level label that applies to the container.
                    # +optional
                &quot;user&quot;: &quot;A String&quot;, # User is a SELinux user label that applies to the container.
                    # +optional
                &quot;type&quot;: &quot;A String&quot;, # Type is a SELinux type label that applies to the container.
                    # +optional
              },
              &quot;readOnlyRootFilesystem&quot;: True or False, # Whether this container has a read-only root filesystem.
                  # Default is false.
                  # +optional
              &quot;runAsUser&quot;: 42, # 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
            },
            &quot;livenessProbe&quot;: { # 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.
              &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                  # having succeeded. Defaults to 3. Minimum value is 1. +optional
              &quot;initialDelaySeconds&quot;: 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
              &quot;timeoutSeconds&quot;: 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
              &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                    # Exec specifies the action to take.
                    # +optional
                  &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                      # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                      # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                      # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                },
                &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                    # +optional
                  &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                      # +optional
                    { # HTTPHeader describes a custom header to be used in HTTP probes
                      &quot;value&quot;: &quot;A String&quot;, # The header field value
                      &quot;name&quot;: &quot;A String&quot;, # The header field name
                    },
                  ],
                  &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                      # +optional
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                      # &quot;Host&quot; in httpHeaders instead.
                      # +optional
                  &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                      # Defaults to HTTP.
                      # +optional
                },
                &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                    # TCP hooks not yet supported
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                      # +optional
                },
              },
              &quot;successThreshold&quot;: 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
              &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                  # Default to 10 seconds. Minimum value is 1.
                  # +optional
            },
            &quot;env&quot;: [ # List of environment variables to set in the container.
                # Cannot be updated.
                # +optional
              { # EnvVar represents an environment variable present in a Container.
                &quot;value&quot;: &quot;A String&quot;, # 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 &quot;&quot;.
                    # +optional
                &quot;name&quot;: &quot;A String&quot;, # Name of the environment variable. Must be a C_IDENTIFIER.
                &quot;valueFrom&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                    #
                    # Cloud Run on GKE: supported
                    #
                    # Source for the environment variable&#x27;s value. Cannot be used if value is not
                    # empty. +optional
                    #
                    # Cloud Run on GKE: supported
                    #
                    # EnvVarSource represents a source for the value of an EnvVar.
                  &quot;configMapKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                      #
                      # Cloud Run on GKE: supported
                      #
                      # Selects a key of a ConfigMap.
                      # +optional
                      #
                      # Cloud Run on GKE: supported
                      #
                      # Selects a key from a ConfigMap.
                    &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # Specify whether the ConfigMap or its key must be defined
                        # +optional
                    &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # The key to select.
                    &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # The ConfigMap to select from.
                    &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                        # directly into the message. Use the &quot;name&quot; field instead.
                        # referenced object inside the same namespace.
                      &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                          # More info:
                          # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                    },
                  },
                  &quot;secretKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                      #
                      # Cloud Run on GKE: supported
                      #
                      # Selects a key of a secret in the pod&#x27;s namespace
                      # +optional
                      #
                      # Cloud Run on GKE: supported
                      #
                      # SecretKeySelector selects a key of a Secret.
                    &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                        # directly into the message. Use the &quot;name&quot; field instead.
                        # referenced object inside the same namespace.
                      &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                          # More info:
                          # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                    },
                    &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # Specify whether the Secret or its key must be defined
                        # +optional
                    &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # The key of the secret to select from.  Must be a valid secret key.
                    &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # The name of the secret in the pod&#x27;s namespace to select from.
                  },
                },
              },
            ],
            &quot;resources&quot;: { # 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
              &quot;requestsInMap&quot;: { # 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&lt;string, Quantity&gt; requests field. This is done to become compliant
                  # with k8s style API.
                  # This field is deprecated in favor of requests field.
                &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                    # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                  &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                },
              },
              &quot;requests&quot;: { # 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 &#x27;quantity&#x27; k8s type:
                  # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;limits&quot;: { # Limits describes the maximum amount of compute resources allowed.
                  # The values of the map is string form of the &#x27;quantity&#x27; k8s type:
                  # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;limitsInMap&quot;: { # Limits describes the maximum amount of compute resources allowed.
                  # This is a temporary field created to migrate away from the
                  # map&lt;string, Quantity&gt; limits field. This is done to become compliant
                  # with k8s style API.
                  # This field is deprecated in favor of limits field.
                &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                    # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                  &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                },
              },
            },
            &quot;readinessProbe&quot;: { # 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.
              &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                  # having succeeded. Defaults to 3. Minimum value is 1. +optional
              &quot;initialDelaySeconds&quot;: 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
              &quot;timeoutSeconds&quot;: 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
              &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                    # Exec specifies the action to take.
                    # +optional
                  &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                      # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                      # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                      # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                },
                &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                    # +optional
                  &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                      # +optional
                    { # HTTPHeader describes a custom header to be used in HTTP probes
                      &quot;value&quot;: &quot;A String&quot;, # The header field value
                      &quot;name&quot;: &quot;A String&quot;, # The header field name
                    },
                  ],
                  &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                      # +optional
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                      # &quot;Host&quot; in httpHeaders instead.
                      # +optional
                  &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                      # Defaults to HTTP.
                      # +optional
                },
                &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                    # TCP hooks not yet supported
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                      # +optional
                },
              },
              &quot;successThreshold&quot;: 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
              &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                  # Default to 10 seconds. Minimum value is 1.
                  # +optional
            },
            &quot;imagePullPolicy&quot;: &quot;A String&quot;, # 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
          },
          &quot;timeoutSeconds&quot;: 42, # TimeoutSeconds holds the max duration the instance is allowed for
              # responding to a request.
              # Not currently used by Cloud Run.
          &quot;volumes&quot;: [
            { # Volume represents a named volume in a container.
              &quot;configMap&quot;: { # Adapts a ConfigMap into a volume.
                  # The contents of the target ConfigMap&#x27;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.
                &quot;name&quot;: &quot;A String&quot;, # Name of the config.
                &quot;defaultMode&quot;: 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.
                &quot;items&quot;: [ # 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.
                    &quot;key&quot;: &quot;A String&quot;, # The key to project.
                    &quot;path&quot;: &quot;A String&quot;, # The relative path of the file to map the key to.
                        # May not be an absolute path.
                        # May not contain the path element &#x27;..&#x27;.
                        # May not start with the string &#x27;..&#x27;.
                    &quot;mode&quot;: 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
                  },
                ],
                &quot;optional&quot;: True or False, # Specify whether the Secret or its keys must be defined.
              },
              &quot;name&quot;: &quot;A String&quot;, # Volume&#x27;s name.
              &quot;secret&quot;: { # The contents of the target Secret&#x27;s Data field will be presented in a volume
                  # as files using the keys in the Data field as the file names.
                &quot;optional&quot;: True or False, # Specify whether the Secret or its keys must be defined.
                &quot;defaultMode&quot;: 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.
                &quot;secretName&quot;: &quot;A String&quot;, # Name of the secret in the container&#x27;s namespace to use.
                &quot;items&quot;: [ # 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.
                    &quot;key&quot;: &quot;A String&quot;, # The key to project.
                    &quot;path&quot;: &quot;A String&quot;, # The relative path of the file to map the key to.
                        # May not be an absolute path.
                        # May not contain the path element &#x27;..&#x27;.
                        # May not start with the string &#x27;..&#x27;.
                    &quot;mode&quot;: 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
                  },
                ],
              },
            },
          ],
        },
      },
      &quot;revisionTemplate&quot;: { # RevisionTemplateSpec describes the data a revision should have when created # RevisionTemplate holds the latest specification for the Revision to
          # be stamped out. The template references the container image, and may also
          # include labels and annotations that should be attached to the Revision.
          # To correlate a Revision, and/or to force a Revision to be created when the
          # spec doesn&#x27;t otherwise change, a nonce label may be provided in the
          # template metadata. For more details, see:
          # https://github.com/knative/serving/blob/master/docs/client-conventions.md#associate-modifications-with-revisions
          #
          # Cloud Run does not currently support referencing a build that is
          # responsible for materializing the container image from source.
          # from a template. Based on:
          # https://github.com/kubernetes/api/blob/e771f807/core/v1/types.go#L3179-L3190
        &quot;metadata&quot;: { # ObjectMeta is metadata that all persisted resources must have, which includes # Optional metadata for this Revision, including labels and annotations. Name
            # will be generated by the Configuration.
            # To set minimum instances for this revision, use the
            # &quot;autoscaling.knative.dev/minScale&quot; annotation key. (Cloud Run on GKE only).
            # To set maximum instances for this revision, use the
            # &quot;autoscaling.knative.dev/maxScale&quot; annotation key.
            # To set Cloud SQL connections for the revision, use the
            # &quot;run.googleapis.com/cloudsql-instances&quot; annotation key. Values should be
            # comma separated.
            # all objects users must create.
          &quot;annotations&quot;: { # 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
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;generateName&quot;: &quot;A String&quot;, # 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;
          &quot;name&quot;: &quot;A String&quot;, # 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
          &quot;clusterName&quot;: &quot;A String&quot;, # 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
          &quot;deletionGracePeriodSeconds&quot;: 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
          &quot;finalizers&quot;: [ # 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
            &quot;A String&quot;,
          ],
          &quot;deletionTimestamp&quot;: &quot;A String&quot;, # 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
          &quot;ownerReferences&quot;: [ # 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.
              &quot;apiVersion&quot;: &quot;A String&quot;, # API version of the referent.
              &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                  # More info: http://kubernetes.io/docs/user-guide/identifiers#names
              &quot;uid&quot;: &quot;A String&quot;, # UID of the referent.
                  # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
              &quot;controller&quot;: True or False, # If true, this reference points to the managing controller.
                  # +optional
              &quot;kind&quot;: &quot;A String&quot;, # Kind of the referent.
                  # More info:
                  # https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
              &quot;blockOwnerDeletion&quot;: True or False, # If true, AND if the owner has the &quot;foregroundDeletion&quot; 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 &quot;delete&quot; permission of the owner,
                  # otherwise 422 (Unprocessable Entity) will be returned.
                  # +optional
            },
          ],
          &quot;creationTimestamp&quot;: &quot;A String&quot;, # 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
          &quot;labels&quot;: { # 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
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;generation&quot;: 42, # A sequence number representing a specific generation of the desired state.
              # Populated by the system. Read-only.
              # +optional
          &quot;resourceVersion&quot;: &quot;A String&quot;, # 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
          &quot;uid&quot;: &quot;A String&quot;, # 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
          &quot;selfLink&quot;: &quot;A String&quot;, # SelfLink is a URL representing this object.
              # Populated by the system.
              # Read-only.
              # +optional
              #  string selfLink = 4;
          &quot;namespace&quot;: &quot;A String&quot;, # 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.
        },
        &quot;spec&quot;: { # RevisionSpec holds the desired state of the Revision (from the client). # RevisionSpec holds the desired state of the Revision (from the client).
          &quot;containerConcurrency&quot;: 42, # (Optional)
              #
              # ContainerConcurrency specifies the maximum allowed in-flight (concurrent)
              # requests per container instance of the Revision.
              #
              # Cloud Run fully managed: supported, defaults to 80
              #
              # Cloud Run on GKE: supported, defaults to 0, which means concurrency
              # to the application is not limited, and the system decides the
              # target concurrency for the autoscaler.
          &quot;serviceAccountName&quot;: &quot;A String&quot;, # Email address of the IAM service account associated with the revision
              # of the service. The service account represents the identity of the
              # running revision, and determines what permissions the revision has. If
              # not provided, the revision will use the project&#x27;s default service account.
          &quot;containers&quot;: [ # 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.
              # In Cloud Run, only a single container may be provided.
            { # 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.
              &quot;terminationMessagePath&quot;: &quot;A String&quot;, # Optional: Path at which the file to which the container&#x27;s termination
                  # message will be written is mounted into the container&#x27;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
              &quot;lifecycle&quot;: { # 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.
                &quot;preStop&quot;: { # 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
                  &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                      # Exec specifies the action to take.
                      # +optional
                    &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                        # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                        # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                        # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                  },
                  &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                      # +optional
                    &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                        # +optional
                      { # HTTPHeader describes a custom header to be used in HTTP probes
                        &quot;value&quot;: &quot;A String&quot;, # The header field value
                        &quot;name&quot;: &quot;A String&quot;, # The header field name
                      },
                    ],
                    &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                        # +optional
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                        # &quot;Host&quot; in httpHeaders instead.
                        # +optional
                    &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                        # Defaults to HTTP.
                        # +optional
                  },
                  &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                      # TCP hooks not yet supported
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                        # +optional
                  },
                },
                &quot;postStart&quot;: { # 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
                  &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                      # Exec specifies the action to take.
                      # +optional
                    &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                        # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                        # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                        # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                  },
                  &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                      # +optional
                    &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                        # +optional
                      { # HTTPHeader describes a custom header to be used in HTTP probes
                        &quot;value&quot;: &quot;A String&quot;, # The header field value
                        &quot;name&quot;: &quot;A String&quot;, # The header field name
                      },
                    ],
                    &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                        # +optional
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                        # &quot;Host&quot; in httpHeaders instead.
                        # +optional
                    &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                        # Defaults to HTTP.
                        # +optional
                  },
                  &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                      # TCP hooks not yet supported
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                        # +optional
                  },
                },
              },
              &quot;stdin&quot;: 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
              &quot;tty&quot;: True or False, # Whether this container should allocate a TTY for itself, also requires
                  # &#x27;stdin&#x27; to be true. Default is false. +optional
              &quot;volumeMounts&quot;: [ # Pod volumes to mount into the container&#x27;s filesystem.
                  # Cannot be updated.
                  # +optional
                { # VolumeMount describes a mounting of a Volume within a container.
                  &quot;readOnly&quot;: True or False, # Mounted read-only if true, read-write otherwise (false or unspecified).
                      # Defaults to false.
                      # +optional
                  &quot;mountPropagation&quot;: &quot;A String&quot;, # 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
                  &quot;mountPath&quot;: &quot;A String&quot;, # Path within the container at which the volume should be mounted.  Must
                      # not contain &#x27;:&#x27;.
                  &quot;subPath&quot;: &quot;A String&quot;, # Path within the volume from which the container&#x27;s volume should be mounted.
                      # Defaults to &quot;&quot; (volume&#x27;s root).
                      # +optional
                  &quot;name&quot;: &quot;A String&quot;, # This must match the Name of a Volume.
                },
              ],
              &quot;volumeDevices&quot;: [ # 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.
                  &quot;name&quot;: &quot;A String&quot;, # name must match the name of a persistentVolumeClaim in the pod
                  &quot;devicePath&quot;: &quot;A String&quot;, # devicePath is the path inside of the container that the device will be
                      # mapped to.
                },
              ],
              &quot;ports&quot;: [ # 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 &quot;0.0.0.0&quot; address inside a container will be
                  # accessible from the network.
                  # Cannot be updated.
                  # +optional
                { # ContainerPort represents a network port in a single container.
                  &quot;hostPort&quot;: 42, # Number of port to expose on the host.
                      # If specified, this must be a valid port number, 0 &lt; x &lt; 65536.
                      # If HostNetwork is specified, this must match ContainerPort.
                      # Most containers do not need this.
                      # +optional
                  &quot;containerPort&quot;: 42, # Number of port to expose on the pod&#x27;s IP address.
                      # This must be a valid port number, 0 &lt; x &lt; 65536.
                  &quot;protocol&quot;: &quot;A String&quot;, # Protocol for port. Must be UDP or TCP.
                      # Defaults to &quot;TCP&quot;.
                      # +optional
                  &quot;hostIP&quot;: &quot;A String&quot;, # What host IP to bind the external port to.
                      # +optional
                  &quot;name&quot;: &quot;A String&quot;, # 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
                },
              ],
              &quot;workingDir&quot;: &quot;A String&quot;, # Container&#x27;s working directory.
                  # If not specified, the container runtime&#x27;s default will be used, which
                  # might be configured in the container image.
                  # Cannot be updated.
                  # +optional
              &quot;args&quot;: [ # Arguments to the entrypoint.
                  # The docker image&#x27;s CMD is used if this is not provided.
                  # Variable references $(VAR_NAME) are expanded using the container&#x27;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
                &quot;A String&quot;,
              ],
              &quot;stdinOnce&quot;: 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
              &quot;envFrom&quot;: [ # 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
                  &quot;configMapRef&quot;: { # ConfigMapEnvSource selects a ConfigMap to populate the environment # The ConfigMap to select from
                      # +optional
                      # variables with.
                      #
                      # The contents of the target ConfigMap&#x27;s Data field will represent the
                      # key-value pairs as environment variables.
                    &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run for Anthos: supported
                        #
                        # The ConfigMap to select from.
                    &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                        # directly into the message. Use the &quot;name&quot; field instead.
                        # referenced object inside the same namespace.
                      &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                          # More info:
                          # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                    },
                    &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run for Anthos: supported
                        #
                        # Specify whether the ConfigMap must be defined
                        # +optional
                  },
                  &quot;secretRef&quot;: { # SecretEnvSource selects a Secret to populate the environment # The Secret to select from
                      # +optional
                      # variables with.
                      #
                      # The contents of the target Secret&#x27;s Data field will represent the
                      # key-value pairs as environment variables.
                    &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                        # directly into the message. Use the &quot;name&quot; field instead.
                        # referenced object inside the same namespace.
                      &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                          # More info:
                          # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                    },
                    &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run for Anthos: supported
                        #
                        # Specify whether the Secret must be defined
                        # +optional
                    &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run for Anthos: supported
                        #
                        # The Secret to select from.
                  },
                  &quot;prefix&quot;: &quot;A String&quot;, # An optional identifier to prepend to each key in the ConfigMap. Must be a
                      # C_IDENTIFIER. +optional
                },
              ],
              &quot;image&quot;: &quot;A String&quot;, # Docker image name.
                  # More info: https://kubernetes.io/docs/concepts/containers/images
              &quot;name&quot;: &quot;A String&quot;, # Name of the container specified as a DNS_LABEL.
                  # Each container must have a unique name (DNS_LABEL).
                  # Cannot be updated.
              &quot;command&quot;: [ # Entrypoint array. Not executed within a shell.
                  # The docker image&#x27;s ENTRYPOINT is used if this is not provided.
                  # Variable references $(VAR_NAME) are expanded using the container&#x27;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
                &quot;A String&quot;,
              ],
              &quot;terminationMessagePolicy&quot;: &quot;A String&quot;, # 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
              &quot;securityContext&quot;: { # 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.
                &quot;capabilities&quot;: { # 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
                  &quot;add&quot;: [ # Added capabilities
                      # +optional
                    &quot;A String&quot;,
                  ],
                  &quot;drop&quot;: [ # Removed capabilities
                      # +optional
                    &quot;A String&quot;,
                  ],
                },
                &quot;runAsNonRoot&quot;: 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
                &quot;runAsGroup&quot;: 42, # 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
                &quot;privileged&quot;: True or False, # Run container in privileged mode.
                    # Processes in privileged containers are essentially equivalent to root on
                    # the host. Defaults to false. +optional
                &quot;allowPrivilegeEscalation&quot;: 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
                &quot;seLinuxOptions&quot;: { # 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
                  &quot;role&quot;: &quot;A String&quot;, # Role is a SELinux role label that applies to the container.
                      # +optional
                  &quot;level&quot;: &quot;A String&quot;, # Level is SELinux level label that applies to the container.
                      # +optional
                  &quot;user&quot;: &quot;A String&quot;, # User is a SELinux user label that applies to the container.
                      # +optional
                  &quot;type&quot;: &quot;A String&quot;, # Type is a SELinux type label that applies to the container.
                      # +optional
                },
                &quot;readOnlyRootFilesystem&quot;: True or False, # Whether this container has a read-only root filesystem.
                    # Default is false.
                    # +optional
                &quot;runAsUser&quot;: 42, # 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
              },
              &quot;livenessProbe&quot;: { # 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.
                &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                    # having succeeded. Defaults to 3. Minimum value is 1. +optional
                &quot;initialDelaySeconds&quot;: 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
                &quot;timeoutSeconds&quot;: 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
                &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                  &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                      # Exec specifies the action to take.
                      # +optional
                    &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                        # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                        # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                        # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                  },
                  &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                      # +optional
                    &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                        # +optional
                      { # HTTPHeader describes a custom header to be used in HTTP probes
                        &quot;value&quot;: &quot;A String&quot;, # The header field value
                        &quot;name&quot;: &quot;A String&quot;, # The header field name
                      },
                    ],
                    &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                        # +optional
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                        # &quot;Host&quot; in httpHeaders instead.
                        # +optional
                    &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                        # Defaults to HTTP.
                        # +optional
                  },
                  &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                      # TCP hooks not yet supported
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                        # +optional
                  },
                },
                &quot;successThreshold&quot;: 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
                &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                    # Default to 10 seconds. Minimum value is 1.
                    # +optional
              },
              &quot;env&quot;: [ # List of environment variables to set in the container.
                  # Cannot be updated.
                  # +optional
                { # EnvVar represents an environment variable present in a Container.
                  &quot;value&quot;: &quot;A String&quot;, # 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 &quot;&quot;.
                      # +optional
                  &quot;name&quot;: &quot;A String&quot;, # Name of the environment variable. Must be a C_IDENTIFIER.
                  &quot;valueFrom&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                      #
                      # Cloud Run on GKE: supported
                      #
                      # Source for the environment variable&#x27;s value. Cannot be used if value is not
                      # empty. +optional
                      #
                      # Cloud Run on GKE: supported
                      #
                      # EnvVarSource represents a source for the value of an EnvVar.
                    &quot;configMapKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # Selects a key of a ConfigMap.
                        # +optional
                        #
                        # Cloud Run on GKE: supported
                        #
                        # Selects a key from a ConfigMap.
                      &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # Specify whether the ConfigMap or its key must be defined
                          # +optional
                      &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # The key to select.
                      &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # The ConfigMap to select from.
                      &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                          # directly into the message. Use the &quot;name&quot; field instead.
                          # referenced object inside the same namespace.
                        &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                            # More info:
                            # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                      },
                    },
                    &quot;secretKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # Selects a key of a secret in the pod&#x27;s namespace
                        # +optional
                        #
                        # Cloud Run on GKE: supported
                        #
                        # SecretKeySelector selects a key of a Secret.
                      &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                          # directly into the message. Use the &quot;name&quot; field instead.
                          # referenced object inside the same namespace.
                        &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                            # More info:
                            # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                      },
                      &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # Specify whether the Secret or its key must be defined
                          # +optional
                      &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # The key of the secret to select from.  Must be a valid secret key.
                      &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # The name of the secret in the pod&#x27;s namespace to select from.
                    },
                  },
                },
              ],
              &quot;resources&quot;: { # 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
                &quot;requestsInMap&quot;: { # 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&lt;string, Quantity&gt; requests field. This is done to become compliant
                    # with k8s style API.
                    # This field is deprecated in favor of requests field.
                  &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                      # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                    &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                  },
                },
                &quot;requests&quot;: { # 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 &#x27;quantity&#x27; k8s type:
                    # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                  &quot;a_key&quot;: &quot;A String&quot;,
                },
                &quot;limits&quot;: { # Limits describes the maximum amount of compute resources allowed.
                    # The values of the map is string form of the &#x27;quantity&#x27; k8s type:
                    # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                  &quot;a_key&quot;: &quot;A String&quot;,
                },
                &quot;limitsInMap&quot;: { # Limits describes the maximum amount of compute resources allowed.
                    # This is a temporary field created to migrate away from the
                    # map&lt;string, Quantity&gt; limits field. This is done to become compliant
                    # with k8s style API.
                    # This field is deprecated in favor of limits field.
                  &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                      # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                    &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                  },
                },
              },
              &quot;readinessProbe&quot;: { # 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.
                &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                    # having succeeded. Defaults to 3. Minimum value is 1. +optional
                &quot;initialDelaySeconds&quot;: 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
                &quot;timeoutSeconds&quot;: 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
                &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                  &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                      # Exec specifies the action to take.
                      # +optional
                    &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                        # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                        # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                        # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                  },
                  &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                      # +optional
                    &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                        # +optional
                      { # HTTPHeader describes a custom header to be used in HTTP probes
                        &quot;value&quot;: &quot;A String&quot;, # The header field value
                        &quot;name&quot;: &quot;A String&quot;, # The header field name
                      },
                    ],
                    &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                        # +optional
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                        # &quot;Host&quot; in httpHeaders instead.
                        # +optional
                    &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                        # Defaults to HTTP.
                        # +optional
                  },
                  &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                      # TCP hooks not yet supported
                    &quot;port&quot;: { # 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.
                      &quot;type&quot;: 42, # The type of the value.
                      &quot;intVal&quot;: 42, # The int value.
                      &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                    },
                    &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                        # +optional
                  },
                },
                &quot;successThreshold&quot;: 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
                &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                    # Default to 10 seconds. Minimum value is 1.
                    # +optional
              },
              &quot;imagePullPolicy&quot;: &quot;A String&quot;, # 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
            },
          ],
          &quot;generation&quot;: 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.
          &quot;servingState&quot;: &quot;A String&quot;, # 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.
          &quot;concurrencyModel&quot;: &quot;A String&quot;, # ConcurrencyModel specifies the desired concurrency model
              # (Single or Multi) for the Revision. Defaults to Multi.
              # Deprecated in favor of ContainerConcurrency.
              # +optional
          &quot;container&quot;: { # 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.
            &quot;terminationMessagePath&quot;: &quot;A String&quot;, # Optional: Path at which the file to which the container&#x27;s termination
                # message will be written is mounted into the container&#x27;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
            &quot;lifecycle&quot;: { # 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.
              &quot;preStop&quot;: { # 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
                &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                    # Exec specifies the action to take.
                    # +optional
                  &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                      # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                      # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                      # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                },
                &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                    # +optional
                  &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                      # +optional
                    { # HTTPHeader describes a custom header to be used in HTTP probes
                      &quot;value&quot;: &quot;A String&quot;, # The header field value
                      &quot;name&quot;: &quot;A String&quot;, # The header field name
                    },
                  ],
                  &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                      # +optional
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                      # &quot;Host&quot; in httpHeaders instead.
                      # +optional
                  &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                      # Defaults to HTTP.
                      # +optional
                },
                &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                    # TCP hooks not yet supported
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                      # +optional
                },
              },
              &quot;postStart&quot;: { # 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
                &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                    # Exec specifies the action to take.
                    # +optional
                  &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                      # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                      # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                      # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                },
                &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                    # +optional
                  &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                      # +optional
                    { # HTTPHeader describes a custom header to be used in HTTP probes
                      &quot;value&quot;: &quot;A String&quot;, # The header field value
                      &quot;name&quot;: &quot;A String&quot;, # The header field name
                    },
                  ],
                  &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                      # +optional
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                      # &quot;Host&quot; in httpHeaders instead.
                      # +optional
                  &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                      # Defaults to HTTP.
                      # +optional
                },
                &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                    # TCP hooks not yet supported
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                      # +optional
                },
              },
            },
            &quot;stdin&quot;: 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
            &quot;tty&quot;: True or False, # Whether this container should allocate a TTY for itself, also requires
                # &#x27;stdin&#x27; to be true. Default is false. +optional
            &quot;volumeMounts&quot;: [ # Pod volumes to mount into the container&#x27;s filesystem.
                # Cannot be updated.
                # +optional
              { # VolumeMount describes a mounting of a Volume within a container.
                &quot;readOnly&quot;: True or False, # Mounted read-only if true, read-write otherwise (false or unspecified).
                    # Defaults to false.
                    # +optional
                &quot;mountPropagation&quot;: &quot;A String&quot;, # 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
                &quot;mountPath&quot;: &quot;A String&quot;, # Path within the container at which the volume should be mounted.  Must
                    # not contain &#x27;:&#x27;.
                &quot;subPath&quot;: &quot;A String&quot;, # Path within the volume from which the container&#x27;s volume should be mounted.
                    # Defaults to &quot;&quot; (volume&#x27;s root).
                    # +optional
                &quot;name&quot;: &quot;A String&quot;, # This must match the Name of a Volume.
              },
            ],
            &quot;volumeDevices&quot;: [ # 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.
                &quot;name&quot;: &quot;A String&quot;, # name must match the name of a persistentVolumeClaim in the pod
                &quot;devicePath&quot;: &quot;A String&quot;, # devicePath is the path inside of the container that the device will be
                    # mapped to.
              },
            ],
            &quot;ports&quot;: [ # 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 &quot;0.0.0.0&quot; address inside a container will be
                # accessible from the network.
                # Cannot be updated.
                # +optional
              { # ContainerPort represents a network port in a single container.
                &quot;hostPort&quot;: 42, # Number of port to expose on the host.
                    # If specified, this must be a valid port number, 0 &lt; x &lt; 65536.
                    # If HostNetwork is specified, this must match ContainerPort.
                    # Most containers do not need this.
                    # +optional
                &quot;containerPort&quot;: 42, # Number of port to expose on the pod&#x27;s IP address.
                    # This must be a valid port number, 0 &lt; x &lt; 65536.
                &quot;protocol&quot;: &quot;A String&quot;, # Protocol for port. Must be UDP or TCP.
                    # Defaults to &quot;TCP&quot;.
                    # +optional
                &quot;hostIP&quot;: &quot;A String&quot;, # What host IP to bind the external port to.
                    # +optional
                &quot;name&quot;: &quot;A String&quot;, # 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
              },
            ],
            &quot;workingDir&quot;: &quot;A String&quot;, # Container&#x27;s working directory.
                # If not specified, the container runtime&#x27;s default will be used, which
                # might be configured in the container image.
                # Cannot be updated.
                # +optional
            &quot;args&quot;: [ # Arguments to the entrypoint.
                # The docker image&#x27;s CMD is used if this is not provided.
                # Variable references $(VAR_NAME) are expanded using the container&#x27;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
              &quot;A String&quot;,
            ],
            &quot;stdinOnce&quot;: 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
            &quot;envFrom&quot;: [ # 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
                &quot;configMapRef&quot;: { # ConfigMapEnvSource selects a ConfigMap to populate the environment # The ConfigMap to select from
                    # +optional
                    # variables with.
                    #
                    # The contents of the target ConfigMap&#x27;s Data field will represent the
                    # key-value pairs as environment variables.
                  &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                      #
                      # Cloud Run for Anthos: supported
                      #
                      # The ConfigMap to select from.
                  &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                      # directly into the message. Use the &quot;name&quot; field instead.
                      # referenced object inside the same namespace.
                    &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                        # More info:
                        # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                  },
                  &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                      #
                      # Cloud Run for Anthos: supported
                      #
                      # Specify whether the ConfigMap must be defined
                      # +optional
                },
                &quot;secretRef&quot;: { # SecretEnvSource selects a Secret to populate the environment # The Secret to select from
                    # +optional
                    # variables with.
                    #
                    # The contents of the target Secret&#x27;s Data field will represent the
                    # key-value pairs as environment variables.
                  &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                      # directly into the message. Use the &quot;name&quot; field instead.
                      # referenced object inside the same namespace.
                    &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                        # More info:
                        # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                  },
                  &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                      #
                      # Cloud Run for Anthos: supported
                      #
                      # Specify whether the Secret must be defined
                      # +optional
                  &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                      #
                      # Cloud Run for Anthos: supported
                      #
                      # The Secret to select from.
                },
                &quot;prefix&quot;: &quot;A String&quot;, # An optional identifier to prepend to each key in the ConfigMap. Must be a
                    # C_IDENTIFIER. +optional
              },
            ],
            &quot;image&quot;: &quot;A String&quot;, # Docker image name.
                # More info: https://kubernetes.io/docs/concepts/containers/images
            &quot;name&quot;: &quot;A String&quot;, # Name of the container specified as a DNS_LABEL.
                # Each container must have a unique name (DNS_LABEL).
                # Cannot be updated.
            &quot;command&quot;: [ # Entrypoint array. Not executed within a shell.
                # The docker image&#x27;s ENTRYPOINT is used if this is not provided.
                # Variable references $(VAR_NAME) are expanded using the container&#x27;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
              &quot;A String&quot;,
            ],
            &quot;terminationMessagePolicy&quot;: &quot;A String&quot;, # 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
            &quot;securityContext&quot;: { # 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.
              &quot;capabilities&quot;: { # 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
                &quot;add&quot;: [ # Added capabilities
                    # +optional
                  &quot;A String&quot;,
                ],
                &quot;drop&quot;: [ # Removed capabilities
                    # +optional
                  &quot;A String&quot;,
                ],
              },
              &quot;runAsNonRoot&quot;: 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
              &quot;runAsGroup&quot;: 42, # 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
              &quot;privileged&quot;: True or False, # Run container in privileged mode.
                  # Processes in privileged containers are essentially equivalent to root on
                  # the host. Defaults to false. +optional
              &quot;allowPrivilegeEscalation&quot;: 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
              &quot;seLinuxOptions&quot;: { # 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
                &quot;role&quot;: &quot;A String&quot;, # Role is a SELinux role label that applies to the container.
                    # +optional
                &quot;level&quot;: &quot;A String&quot;, # Level is SELinux level label that applies to the container.
                    # +optional
                &quot;user&quot;: &quot;A String&quot;, # User is a SELinux user label that applies to the container.
                    # +optional
                &quot;type&quot;: &quot;A String&quot;, # Type is a SELinux type label that applies to the container.
                    # +optional
              },
              &quot;readOnlyRootFilesystem&quot;: True or False, # Whether this container has a read-only root filesystem.
                  # Default is false.
                  # +optional
              &quot;runAsUser&quot;: 42, # 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
            },
            &quot;livenessProbe&quot;: { # 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.
              &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                  # having succeeded. Defaults to 3. Minimum value is 1. +optional
              &quot;initialDelaySeconds&quot;: 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
              &quot;timeoutSeconds&quot;: 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
              &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                    # Exec specifies the action to take.
                    # +optional
                  &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                      # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                      # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                      # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                },
                &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                    # +optional
                  &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                      # +optional
                    { # HTTPHeader describes a custom header to be used in HTTP probes
                      &quot;value&quot;: &quot;A String&quot;, # The header field value
                      &quot;name&quot;: &quot;A String&quot;, # The header field name
                    },
                  ],
                  &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                      # +optional
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                      # &quot;Host&quot; in httpHeaders instead.
                      # +optional
                  &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                      # Defaults to HTTP.
                      # +optional
                },
                &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                    # TCP hooks not yet supported
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                      # +optional
                },
              },
              &quot;successThreshold&quot;: 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
              &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                  # Default to 10 seconds. Minimum value is 1.
                  # +optional
            },
            &quot;env&quot;: [ # List of environment variables to set in the container.
                # Cannot be updated.
                # +optional
              { # EnvVar represents an environment variable present in a Container.
                &quot;value&quot;: &quot;A String&quot;, # 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 &quot;&quot;.
                    # +optional
                &quot;name&quot;: &quot;A String&quot;, # Name of the environment variable. Must be a C_IDENTIFIER.
                &quot;valueFrom&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                    #
                    # Cloud Run on GKE: supported
                    #
                    # Source for the environment variable&#x27;s value. Cannot be used if value is not
                    # empty. +optional
                    #
                    # Cloud Run on GKE: supported
                    #
                    # EnvVarSource represents a source for the value of an EnvVar.
                  &quot;configMapKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                      #
                      # Cloud Run on GKE: supported
                      #
                      # Selects a key of a ConfigMap.
                      # +optional
                      #
                      # Cloud Run on GKE: supported
                      #
                      # Selects a key from a ConfigMap.
                    &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # Specify whether the ConfigMap or its key must be defined
                        # +optional
                    &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # The key to select.
                    &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # The ConfigMap to select from.
                    &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                        # directly into the message. Use the &quot;name&quot; field instead.
                        # referenced object inside the same namespace.
                      &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                          # More info:
                          # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                    },
                  },
                  &quot;secretKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                      #
                      # Cloud Run on GKE: supported
                      #
                      # Selects a key of a secret in the pod&#x27;s namespace
                      # +optional
                      #
                      # Cloud Run on GKE: supported
                      #
                      # SecretKeySelector selects a key of a Secret.
                    &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                        # directly into the message. Use the &quot;name&quot; field instead.
                        # referenced object inside the same namespace.
                      &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                          # More info:
                          # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                    },
                    &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # Specify whether the Secret or its key must be defined
                        # +optional
                    &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # The key of the secret to select from.  Must be a valid secret key.
                    &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # The name of the secret in the pod&#x27;s namespace to select from.
                  },
                },
              },
            ],
            &quot;resources&quot;: { # 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
              &quot;requestsInMap&quot;: { # 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&lt;string, Quantity&gt; requests field. This is done to become compliant
                  # with k8s style API.
                  # This field is deprecated in favor of requests field.
                &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                    # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                  &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                },
              },
              &quot;requests&quot;: { # 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 &#x27;quantity&#x27; k8s type:
                  # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;limits&quot;: { # Limits describes the maximum amount of compute resources allowed.
                  # The values of the map is string form of the &#x27;quantity&#x27; k8s type:
                  # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;limitsInMap&quot;: { # Limits describes the maximum amount of compute resources allowed.
                  # This is a temporary field created to migrate away from the
                  # map&lt;string, Quantity&gt; limits field. This is done to become compliant
                  # with k8s style API.
                  # This field is deprecated in favor of limits field.
                &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                    # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                  &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                },
              },
            },
            &quot;readinessProbe&quot;: { # 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.
              &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                  # having succeeded. Defaults to 3. Minimum value is 1. +optional
              &quot;initialDelaySeconds&quot;: 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
              &quot;timeoutSeconds&quot;: 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
              &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                    # Exec specifies the action to take.
                    # +optional
                  &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                      # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                      # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                      # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                },
                &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                    # +optional
                  &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                      # +optional
                    { # HTTPHeader describes a custom header to be used in HTTP probes
                      &quot;value&quot;: &quot;A String&quot;, # The header field value
                      &quot;name&quot;: &quot;A String&quot;, # The header field name
                    },
                  ],
                  &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                      # +optional
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                      # &quot;Host&quot; in httpHeaders instead.
                      # +optional
                  &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                      # Defaults to HTTP.
                      # +optional
                },
                &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                    # TCP hooks not yet supported
                  &quot;port&quot;: { # 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.
                    &quot;type&quot;: 42, # The type of the value.
                    &quot;intVal&quot;: 42, # The int value.
                    &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                  },
                  &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                      # +optional
                },
              },
              &quot;successThreshold&quot;: 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
              &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                  # Default to 10 seconds. Minimum value is 1.
                  # +optional
            },
            &quot;imagePullPolicy&quot;: &quot;A String&quot;, # 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
          },
          &quot;timeoutSeconds&quot;: 42, # TimeoutSeconds holds the max duration the instance is allowed for
              # responding to a request.
              # Not currently used by Cloud Run.
          &quot;volumes&quot;: [
            { # Volume represents a named volume in a container.
              &quot;configMap&quot;: { # Adapts a ConfigMap into a volume.
                  # The contents of the target ConfigMap&#x27;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.
                &quot;name&quot;: &quot;A String&quot;, # Name of the config.
                &quot;defaultMode&quot;: 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.
                &quot;items&quot;: [ # 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.
                    &quot;key&quot;: &quot;A String&quot;, # The key to project.
                    &quot;path&quot;: &quot;A String&quot;, # The relative path of the file to map the key to.
                        # May not be an absolute path.
                        # May not contain the path element &#x27;..&#x27;.
                        # May not start with the string &#x27;..&#x27;.
                    &quot;mode&quot;: 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
                  },
                ],
                &quot;optional&quot;: True or False, # Specify whether the Secret or its keys must be defined.
              },
              &quot;name&quot;: &quot;A String&quot;, # Volume&#x27;s name.
              &quot;secret&quot;: { # The contents of the target Secret&#x27;s Data field will be presented in a volume
                  # as files using the keys in the Data field as the file names.
                &quot;optional&quot;: True or False, # Specify whether the Secret or its keys must be defined.
                &quot;defaultMode&quot;: 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.
                &quot;secretName&quot;: &quot;A String&quot;, # Name of the secret in the container&#x27;s namespace to use.
                &quot;items&quot;: [ # 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.
                    &quot;key&quot;: &quot;A String&quot;, # The key to project.
                    &quot;path&quot;: &quot;A String&quot;, # The relative path of the file to map the key to.
                        # May not be an absolute path.
                        # May not contain the path element &#x27;..&#x27;.
                        # May not start with the string &#x27;..&#x27;.
                    &quot;mode&quot;: 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
                  },
                ],
              },
            },
          ],
        },
      },
      &quot;generation&quot;: 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.
    },
    &quot;kind&quot;: &quot;A String&quot;, # The kind of resource, in this case always &quot;Configuration&quot;.
    &quot;metadata&quot;: { # ObjectMeta is metadata that all persisted resources must have, which includes # Metadata associated with this Configuration, including name, namespace,
        # labels, and annotations.
        # all objects users must create.
      &quot;annotations&quot;: { # 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
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;generateName&quot;: &quot;A String&quot;, # 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;
      &quot;name&quot;: &quot;A String&quot;, # 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
      &quot;clusterName&quot;: &quot;A String&quot;, # 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
      &quot;deletionGracePeriodSeconds&quot;: 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
      &quot;finalizers&quot;: [ # 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
        &quot;A String&quot;,
      ],
      &quot;deletionTimestamp&quot;: &quot;A String&quot;, # 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
      &quot;ownerReferences&quot;: [ # 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.
          &quot;apiVersion&quot;: &quot;A String&quot;, # API version of the referent.
          &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
              # More info: http://kubernetes.io/docs/user-guide/identifiers#names
          &quot;uid&quot;: &quot;A String&quot;, # UID of the referent.
              # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
          &quot;controller&quot;: True or False, # If true, this reference points to the managing controller.
              # +optional
          &quot;kind&quot;: &quot;A String&quot;, # Kind of the referent.
              # More info:
              # https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
          &quot;blockOwnerDeletion&quot;: True or False, # If true, AND if the owner has the &quot;foregroundDeletion&quot; 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 &quot;delete&quot; permission of the owner,
              # otherwise 422 (Unprocessable Entity) will be returned.
              # +optional
        },
      ],
      &quot;creationTimestamp&quot;: &quot;A String&quot;, # 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
      &quot;labels&quot;: { # 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
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;generation&quot;: 42, # A sequence number representing a specific generation of the desired state.
          # Populated by the system. Read-only.
          # +optional
      &quot;resourceVersion&quot;: &quot;A String&quot;, # 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
      &quot;uid&quot;: &quot;A String&quot;, # 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
      &quot;selfLink&quot;: &quot;A String&quot;, # SelfLink is a URL representing this object.
          # Populated by the system.
          # Read-only.
          # +optional
          #  string selfLink = 4;
      &quot;namespace&quot;: &quot;A String&quot;, # 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.
    },
    &quot;status&quot;: { # ConfigurationStatus communicates the observed state of the Configuration # Status communicates the observed state of the Configuration (from the
        # controller).
        # (from the controller).
      &quot;conditions&quot;: [ # Conditions communicates information about ongoing/complete
          # reconciliation processes that bring the &quot;spec&quot; inline with the observed
          # state of the world.
        { # ConfigurationCondition defines a readiness condition for a Configuration.
          &quot;message&quot;: &quot;A String&quot;, # Human-readable message indicating details about last transition.
              # +optional
          &quot;lastTransitionTime&quot;: &quot;A String&quot;, # Last time the condition transitioned from one status to another.
              # +optional
          &quot;status&quot;: &quot;A String&quot;, # Status of the condition, one of True, False, Unknown.
          &quot;severity&quot;: &quot;A String&quot;, # How to interpret failures of this condition, one of Error, Warning, Info
              # +optional
          &quot;reason&quot;: &quot;A String&quot;, # One-word CamelCase reason for the condition&#x27;s last transition.
              # +optional
          &quot;type&quot;: &quot;A String&quot;, # ConfigurationConditionType 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:&quot;Ready&quot;
        },
      ],
      &quot;observedGeneration&quot;: 42, # ObservedGeneration is the &#x27;Generation&#x27; of the Configuration that
          # was last processed by the controller. The observed generation is updated
          # even if the controller failed to process the spec and create the Revision.
          #
          # Clients polling for completed reconciliation should poll until
          # observedGeneration = metadata.generation, and the Ready condition&#x27;s status
          # is True or False.
      &quot;latestCreatedRevisionName&quot;: &quot;A String&quot;, # LatestCreatedRevisionName is the last revision that was created from this
          # Configuration. It might not be ready yet, for that use
          # LatestReadyRevisionName.
      &quot;latestReadyRevisionName&quot;: &quot;A String&quot;, # LatestReadyRevisionName holds the name of the latest Revision stamped out
          # from this Configuration that has had its &quot;Ready&quot; condition become &quot;True&quot;.
    },
  }</pre>
</div>

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

Args:
  parent: string, The project ID or project number from which the configurations should be
listed. (required)
  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.
  labelSelector: string, Allows to filter resources based on a label. Supported operations are
=, !=, exists, in, and notIn.
  resourceVersion: string, The baseline resource version from which the list or watch operation should
start. Not currently used by Cloud Run.
  includeUninitialized: boolean, Not currently used by Cloud Run.
  fieldSelector: string, Allows to filter resources based on a specific value for a field name.
Send this in a query string format. i.e. &#x27;metadata.name%3Dlorem&#x27;.
Not currently used by Cloud Run.
  continue: string, Optional encoded string to continue paging.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # ListConfigurationsResponse is a list of Configuration resources.
    &quot;metadata&quot;: { # ListMeta describes metadata that synthetic resources must have, including # Metadata associated with this Configuration list.
        # lists and various status objects. A resource may have only one of
        # {ObjectMeta, ListMeta}.
      &quot;resourceVersion&quot;: &quot;A String&quot;, # String that identifies the server&#x27;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
      &quot;continue&quot;: &quot;A String&quot;, # 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.
      &quot;selfLink&quot;: &quot;A String&quot;, # SelfLink is a URL representing this object.
          # Populated by the system.
          # Read-only.
          # +optional
    },
    &quot;items&quot;: [ # List of Configurations.
      { # Configuration represents the &quot;floating HEAD&quot; of a linear history of
          # Revisions, and optionally how the containers those revisions reference are
          # built. Users create new Revisions by updating the Configuration&#x27;s spec. The
          # &quot;latest created&quot; revision&#x27;s name is available under status, as is the &quot;latest
          # ready&quot; revision&#x27;s name. See also:
          # https://github.com/knative/serving/blob/master/docs/spec/overview.md#configuration
        &quot;apiVersion&quot;: &quot;A String&quot;, # The API version for this call such as &quot;serving.knative.dev/v1alpha1&quot;.
        &quot;spec&quot;: { # ConfigurationSpec holds the desired state of the Configuration (from the # Spec holds the desired state of the Configuration (from the client).
            # client).
          &quot;template&quot;: { # RevisionTemplateSpec describes the data a revision should have when created # Template holds the latest specification for the Revision to be stamped out.
              # from a template. Based on:
              # https://github.com/kubernetes/api/blob/e771f807/core/v1/types.go#L3179-L3190
            &quot;metadata&quot;: { # ObjectMeta is metadata that all persisted resources must have, which includes # Optional metadata for this Revision, including labels and annotations. Name
                # will be generated by the Configuration.
                # To set minimum instances for this revision, use the
                # &quot;autoscaling.knative.dev/minScale&quot; annotation key. (Cloud Run on GKE only).
                # To set maximum instances for this revision, use the
                # &quot;autoscaling.knative.dev/maxScale&quot; annotation key.
                # To set Cloud SQL connections for the revision, use the
                # &quot;run.googleapis.com/cloudsql-instances&quot; annotation key. Values should be
                # comma separated.
                # all objects users must create.
              &quot;annotations&quot;: { # 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
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;generateName&quot;: &quot;A String&quot;, # 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;
              &quot;name&quot;: &quot;A String&quot;, # 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
              &quot;clusterName&quot;: &quot;A String&quot;, # 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
              &quot;deletionGracePeriodSeconds&quot;: 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
              &quot;finalizers&quot;: [ # 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
                &quot;A String&quot;,
              ],
              &quot;deletionTimestamp&quot;: &quot;A String&quot;, # 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
              &quot;ownerReferences&quot;: [ # 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.
                  &quot;apiVersion&quot;: &quot;A String&quot;, # API version of the referent.
                  &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                      # More info: http://kubernetes.io/docs/user-guide/identifiers#names
                  &quot;uid&quot;: &quot;A String&quot;, # UID of the referent.
                      # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
                  &quot;controller&quot;: True or False, # If true, this reference points to the managing controller.
                      # +optional
                  &quot;kind&quot;: &quot;A String&quot;, # Kind of the referent.
                      # More info:
                      # https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
                  &quot;blockOwnerDeletion&quot;: True or False, # If true, AND if the owner has the &quot;foregroundDeletion&quot; 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 &quot;delete&quot; permission of the owner,
                      # otherwise 422 (Unprocessable Entity) will be returned.
                      # +optional
                },
              ],
              &quot;creationTimestamp&quot;: &quot;A String&quot;, # 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
              &quot;labels&quot;: { # 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
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;generation&quot;: 42, # A sequence number representing a specific generation of the desired state.
                  # Populated by the system. Read-only.
                  # +optional
              &quot;resourceVersion&quot;: &quot;A String&quot;, # 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
              &quot;uid&quot;: &quot;A String&quot;, # 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
              &quot;selfLink&quot;: &quot;A String&quot;, # SelfLink is a URL representing this object.
                  # Populated by the system.
                  # Read-only.
                  # +optional
                  #  string selfLink = 4;
              &quot;namespace&quot;: &quot;A String&quot;, # 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.
            },
            &quot;spec&quot;: { # RevisionSpec holds the desired state of the Revision (from the client). # RevisionSpec holds the desired state of the Revision (from the client).
              &quot;containerConcurrency&quot;: 42, # (Optional)
                  #
                  # ContainerConcurrency specifies the maximum allowed in-flight (concurrent)
                  # requests per container instance of the Revision.
                  #
                  # Cloud Run fully managed: supported, defaults to 80
                  #
                  # Cloud Run on GKE: supported, defaults to 0, which means concurrency
                  # to the application is not limited, and the system decides the
                  # target concurrency for the autoscaler.
              &quot;serviceAccountName&quot;: &quot;A String&quot;, # Email address of the IAM service account associated with the revision
                  # of the service. The service account represents the identity of the
                  # running revision, and determines what permissions the revision has. If
                  # not provided, the revision will use the project&#x27;s default service account.
              &quot;containers&quot;: [ # 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.
                  # In Cloud Run, only a single container may be provided.
                { # 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.
                  &quot;terminationMessagePath&quot;: &quot;A String&quot;, # Optional: Path at which the file to which the container&#x27;s termination
                      # message will be written is mounted into the container&#x27;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
                  &quot;lifecycle&quot;: { # 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.
                    &quot;preStop&quot;: { # 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
                      &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                          # Exec specifies the action to take.
                          # +optional
                        &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                            # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                            # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                            # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                      },
                      &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                          # +optional
                        &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                            # +optional
                          { # HTTPHeader describes a custom header to be used in HTTP probes
                            &quot;value&quot;: &quot;A String&quot;, # The header field value
                            &quot;name&quot;: &quot;A String&quot;, # The header field name
                          },
                        ],
                        &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                            # +optional
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                            # &quot;Host&quot; in httpHeaders instead.
                            # +optional
                        &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                            # Defaults to HTTP.
                            # +optional
                      },
                      &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                          # TCP hooks not yet supported
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                            # +optional
                      },
                    },
                    &quot;postStart&quot;: { # 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
                      &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                          # Exec specifies the action to take.
                          # +optional
                        &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                            # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                            # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                            # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                      },
                      &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                          # +optional
                        &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                            # +optional
                          { # HTTPHeader describes a custom header to be used in HTTP probes
                            &quot;value&quot;: &quot;A String&quot;, # The header field value
                            &quot;name&quot;: &quot;A String&quot;, # The header field name
                          },
                        ],
                        &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                            # +optional
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                            # &quot;Host&quot; in httpHeaders instead.
                            # +optional
                        &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                            # Defaults to HTTP.
                            # +optional
                      },
                      &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                          # TCP hooks not yet supported
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                            # +optional
                      },
                    },
                  },
                  &quot;stdin&quot;: 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
                  &quot;tty&quot;: True or False, # Whether this container should allocate a TTY for itself, also requires
                      # &#x27;stdin&#x27; to be true. Default is false. +optional
                  &quot;volumeMounts&quot;: [ # Pod volumes to mount into the container&#x27;s filesystem.
                      # Cannot be updated.
                      # +optional
                    { # VolumeMount describes a mounting of a Volume within a container.
                      &quot;readOnly&quot;: True or False, # Mounted read-only if true, read-write otherwise (false or unspecified).
                          # Defaults to false.
                          # +optional
                      &quot;mountPropagation&quot;: &quot;A String&quot;, # 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
                      &quot;mountPath&quot;: &quot;A String&quot;, # Path within the container at which the volume should be mounted.  Must
                          # not contain &#x27;:&#x27;.
                      &quot;subPath&quot;: &quot;A String&quot;, # Path within the volume from which the container&#x27;s volume should be mounted.
                          # Defaults to &quot;&quot; (volume&#x27;s root).
                          # +optional
                      &quot;name&quot;: &quot;A String&quot;, # This must match the Name of a Volume.
                    },
                  ],
                  &quot;volumeDevices&quot;: [ # 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.
                      &quot;name&quot;: &quot;A String&quot;, # name must match the name of a persistentVolumeClaim in the pod
                      &quot;devicePath&quot;: &quot;A String&quot;, # devicePath is the path inside of the container that the device will be
                          # mapped to.
                    },
                  ],
                  &quot;ports&quot;: [ # 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 &quot;0.0.0.0&quot; address inside a container will be
                      # accessible from the network.
                      # Cannot be updated.
                      # +optional
                    { # ContainerPort represents a network port in a single container.
                      &quot;hostPort&quot;: 42, # Number of port to expose on the host.
                          # If specified, this must be a valid port number, 0 &lt; x &lt; 65536.
                          # If HostNetwork is specified, this must match ContainerPort.
                          # Most containers do not need this.
                          # +optional
                      &quot;containerPort&quot;: 42, # Number of port to expose on the pod&#x27;s IP address.
                          # This must be a valid port number, 0 &lt; x &lt; 65536.
                      &quot;protocol&quot;: &quot;A String&quot;, # Protocol for port. Must be UDP or TCP.
                          # Defaults to &quot;TCP&quot;.
                          # +optional
                      &quot;hostIP&quot;: &quot;A String&quot;, # What host IP to bind the external port to.
                          # +optional
                      &quot;name&quot;: &quot;A String&quot;, # 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
                    },
                  ],
                  &quot;workingDir&quot;: &quot;A String&quot;, # Container&#x27;s working directory.
                      # If not specified, the container runtime&#x27;s default will be used, which
                      # might be configured in the container image.
                      # Cannot be updated.
                      # +optional
                  &quot;args&quot;: [ # Arguments to the entrypoint.
                      # The docker image&#x27;s CMD is used if this is not provided.
                      # Variable references $(VAR_NAME) are expanded using the container&#x27;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
                    &quot;A String&quot;,
                  ],
                  &quot;stdinOnce&quot;: 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
                  &quot;envFrom&quot;: [ # 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
                      &quot;configMapRef&quot;: { # ConfigMapEnvSource selects a ConfigMap to populate the environment # The ConfigMap to select from
                          # +optional
                          # variables with.
                          #
                          # The contents of the target ConfigMap&#x27;s Data field will represent the
                          # key-value pairs as environment variables.
                        &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run for Anthos: supported
                            #
                            # The ConfigMap to select from.
                        &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                            # directly into the message. Use the &quot;name&quot; field instead.
                            # referenced object inside the same namespace.
                          &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                              # More info:
                              # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                        },
                        &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run for Anthos: supported
                            #
                            # Specify whether the ConfigMap must be defined
                            # +optional
                      },
                      &quot;secretRef&quot;: { # SecretEnvSource selects a Secret to populate the environment # The Secret to select from
                          # +optional
                          # variables with.
                          #
                          # The contents of the target Secret&#x27;s Data field will represent the
                          # key-value pairs as environment variables.
                        &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                            # directly into the message. Use the &quot;name&quot; field instead.
                            # referenced object inside the same namespace.
                          &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                              # More info:
                              # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                        },
                        &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run for Anthos: supported
                            #
                            # Specify whether the Secret must be defined
                            # +optional
                        &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run for Anthos: supported
                            #
                            # The Secret to select from.
                      },
                      &quot;prefix&quot;: &quot;A String&quot;, # An optional identifier to prepend to each key in the ConfigMap. Must be a
                          # C_IDENTIFIER. +optional
                    },
                  ],
                  &quot;image&quot;: &quot;A String&quot;, # Docker image name.
                      # More info: https://kubernetes.io/docs/concepts/containers/images
                  &quot;name&quot;: &quot;A String&quot;, # Name of the container specified as a DNS_LABEL.
                      # Each container must have a unique name (DNS_LABEL).
                      # Cannot be updated.
                  &quot;command&quot;: [ # Entrypoint array. Not executed within a shell.
                      # The docker image&#x27;s ENTRYPOINT is used if this is not provided.
                      # Variable references $(VAR_NAME) are expanded using the container&#x27;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
                    &quot;A String&quot;,
                  ],
                  &quot;terminationMessagePolicy&quot;: &quot;A String&quot;, # 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
                  &quot;securityContext&quot;: { # 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.
                    &quot;capabilities&quot;: { # 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
                      &quot;add&quot;: [ # Added capabilities
                          # +optional
                        &quot;A String&quot;,
                      ],
                      &quot;drop&quot;: [ # Removed capabilities
                          # +optional
                        &quot;A String&quot;,
                      ],
                    },
                    &quot;runAsNonRoot&quot;: 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
                    &quot;runAsGroup&quot;: 42, # 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
                    &quot;privileged&quot;: True or False, # Run container in privileged mode.
                        # Processes in privileged containers are essentially equivalent to root on
                        # the host. Defaults to false. +optional
                    &quot;allowPrivilegeEscalation&quot;: 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
                    &quot;seLinuxOptions&quot;: { # 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
                      &quot;role&quot;: &quot;A String&quot;, # Role is a SELinux role label that applies to the container.
                          # +optional
                      &quot;level&quot;: &quot;A String&quot;, # Level is SELinux level label that applies to the container.
                          # +optional
                      &quot;user&quot;: &quot;A String&quot;, # User is a SELinux user label that applies to the container.
                          # +optional
                      &quot;type&quot;: &quot;A String&quot;, # Type is a SELinux type label that applies to the container.
                          # +optional
                    },
                    &quot;readOnlyRootFilesystem&quot;: True or False, # Whether this container has a read-only root filesystem.
                        # Default is false.
                        # +optional
                    &quot;runAsUser&quot;: 42, # 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
                  },
                  &quot;livenessProbe&quot;: { # 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.
                    &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                        # having succeeded. Defaults to 3. Minimum value is 1. +optional
                    &quot;initialDelaySeconds&quot;: 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
                    &quot;timeoutSeconds&quot;: 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
                    &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                      &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                          # Exec specifies the action to take.
                          # +optional
                        &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                            # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                            # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                            # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                      },
                      &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                          # +optional
                        &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                            # +optional
                          { # HTTPHeader describes a custom header to be used in HTTP probes
                            &quot;value&quot;: &quot;A String&quot;, # The header field value
                            &quot;name&quot;: &quot;A String&quot;, # The header field name
                          },
                        ],
                        &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                            # +optional
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                            # &quot;Host&quot; in httpHeaders instead.
                            # +optional
                        &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                            # Defaults to HTTP.
                            # +optional
                      },
                      &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                          # TCP hooks not yet supported
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                            # +optional
                      },
                    },
                    &quot;successThreshold&quot;: 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
                    &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                        # Default to 10 seconds. Minimum value is 1.
                        # +optional
                  },
                  &quot;env&quot;: [ # List of environment variables to set in the container.
                      # Cannot be updated.
                      # +optional
                    { # EnvVar represents an environment variable present in a Container.
                      &quot;value&quot;: &quot;A String&quot;, # 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 &quot;&quot;.
                          # +optional
                      &quot;name&quot;: &quot;A String&quot;, # Name of the environment variable. Must be a C_IDENTIFIER.
                      &quot;valueFrom&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # Source for the environment variable&#x27;s value. Cannot be used if value is not
                          # empty. +optional
                          #
                          # Cloud Run on GKE: supported
                          #
                          # EnvVarSource represents a source for the value of an EnvVar.
                        &quot;configMapKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # Selects a key of a ConfigMap.
                            # +optional
                            #
                            # Cloud Run on GKE: supported
                            #
                            # Selects a key from a ConfigMap.
                          &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                              #
                              # Cloud Run on GKE: supported
                              #
                              # Specify whether the ConfigMap or its key must be defined
                              # +optional
                          &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                              #
                              # Cloud Run on GKE: supported
                              #
                              # The key to select.
                          &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                              #
                              # Cloud Run on GKE: supported
                              #
                              # The ConfigMap to select from.
                          &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                              # directly into the message. Use the &quot;name&quot; field instead.
                              # referenced object inside the same namespace.
                            &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                                # More info:
                                # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                          },
                        },
                        &quot;secretKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # Selects a key of a secret in the pod&#x27;s namespace
                            # +optional
                            #
                            # Cloud Run on GKE: supported
                            #
                            # SecretKeySelector selects a key of a Secret.
                          &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                              # directly into the message. Use the &quot;name&quot; field instead.
                              # referenced object inside the same namespace.
                            &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                                # More info:
                                # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                          },
                          &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                              #
                              # Cloud Run on GKE: supported
                              #
                              # Specify whether the Secret or its key must be defined
                              # +optional
                          &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                              #
                              # Cloud Run on GKE: supported
                              #
                              # The key of the secret to select from.  Must be a valid secret key.
                          &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                              #
                              # Cloud Run on GKE: supported
                              #
                              # The name of the secret in the pod&#x27;s namespace to select from.
                        },
                      },
                    },
                  ],
                  &quot;resources&quot;: { # 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
                    &quot;requestsInMap&quot;: { # 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&lt;string, Quantity&gt; requests field. This is done to become compliant
                        # with k8s style API.
                        # This field is deprecated in favor of requests field.
                      &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                          # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                        &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                      },
                    },
                    &quot;requests&quot;: { # 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 &#x27;quantity&#x27; k8s type:
                        # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                      &quot;a_key&quot;: &quot;A String&quot;,
                    },
                    &quot;limits&quot;: { # Limits describes the maximum amount of compute resources allowed.
                        # The values of the map is string form of the &#x27;quantity&#x27; k8s type:
                        # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                      &quot;a_key&quot;: &quot;A String&quot;,
                    },
                    &quot;limitsInMap&quot;: { # Limits describes the maximum amount of compute resources allowed.
                        # This is a temporary field created to migrate away from the
                        # map&lt;string, Quantity&gt; limits field. This is done to become compliant
                        # with k8s style API.
                        # This field is deprecated in favor of limits field.
                      &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                          # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                        &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                      },
                    },
                  },
                  &quot;readinessProbe&quot;: { # 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.
                    &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                        # having succeeded. Defaults to 3. Minimum value is 1. +optional
                    &quot;initialDelaySeconds&quot;: 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
                    &quot;timeoutSeconds&quot;: 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
                    &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                      &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                          # Exec specifies the action to take.
                          # +optional
                        &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                            # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                            # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                            # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                      },
                      &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                          # +optional
                        &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                            # +optional
                          { # HTTPHeader describes a custom header to be used in HTTP probes
                            &quot;value&quot;: &quot;A String&quot;, # The header field value
                            &quot;name&quot;: &quot;A String&quot;, # The header field name
                          },
                        ],
                        &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                            # +optional
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                            # &quot;Host&quot; in httpHeaders instead.
                            # +optional
                        &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                            # Defaults to HTTP.
                            # +optional
                      },
                      &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                          # TCP hooks not yet supported
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                            # +optional
                      },
                    },
                    &quot;successThreshold&quot;: 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
                    &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                        # Default to 10 seconds. Minimum value is 1.
                        # +optional
                  },
                  &quot;imagePullPolicy&quot;: &quot;A String&quot;, # 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
                },
              ],
              &quot;generation&quot;: 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.
              &quot;servingState&quot;: &quot;A String&quot;, # 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.
              &quot;concurrencyModel&quot;: &quot;A String&quot;, # ConcurrencyModel specifies the desired concurrency model
                  # (Single or Multi) for the Revision. Defaults to Multi.
                  # Deprecated in favor of ContainerConcurrency.
                  # +optional
              &quot;container&quot;: { # 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.
                &quot;terminationMessagePath&quot;: &quot;A String&quot;, # Optional: Path at which the file to which the container&#x27;s termination
                    # message will be written is mounted into the container&#x27;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
                &quot;lifecycle&quot;: { # 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.
                  &quot;preStop&quot;: { # 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
                    &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                        # Exec specifies the action to take.
                        # +optional
                      &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                          # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                          # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                          # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                    },
                    &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                        # +optional
                      &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                          # +optional
                        { # HTTPHeader describes a custom header to be used in HTTP probes
                          &quot;value&quot;: &quot;A String&quot;, # The header field value
                          &quot;name&quot;: &quot;A String&quot;, # The header field name
                        },
                      ],
                      &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                          # +optional
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                          # &quot;Host&quot; in httpHeaders instead.
                          # +optional
                      &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                          # Defaults to HTTP.
                          # +optional
                    },
                    &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                        # TCP hooks not yet supported
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                          # +optional
                    },
                  },
                  &quot;postStart&quot;: { # 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
                    &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                        # Exec specifies the action to take.
                        # +optional
                      &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                          # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                          # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                          # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                    },
                    &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                        # +optional
                      &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                          # +optional
                        { # HTTPHeader describes a custom header to be used in HTTP probes
                          &quot;value&quot;: &quot;A String&quot;, # The header field value
                          &quot;name&quot;: &quot;A String&quot;, # The header field name
                        },
                      ],
                      &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                          # +optional
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                          # &quot;Host&quot; in httpHeaders instead.
                          # +optional
                      &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                          # Defaults to HTTP.
                          # +optional
                    },
                    &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                        # TCP hooks not yet supported
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                          # +optional
                    },
                  },
                },
                &quot;stdin&quot;: 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
                &quot;tty&quot;: True or False, # Whether this container should allocate a TTY for itself, also requires
                    # &#x27;stdin&#x27; to be true. Default is false. +optional
                &quot;volumeMounts&quot;: [ # Pod volumes to mount into the container&#x27;s filesystem.
                    # Cannot be updated.
                    # +optional
                  { # VolumeMount describes a mounting of a Volume within a container.
                    &quot;readOnly&quot;: True or False, # Mounted read-only if true, read-write otherwise (false or unspecified).
                        # Defaults to false.
                        # +optional
                    &quot;mountPropagation&quot;: &quot;A String&quot;, # 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
                    &quot;mountPath&quot;: &quot;A String&quot;, # Path within the container at which the volume should be mounted.  Must
                        # not contain &#x27;:&#x27;.
                    &quot;subPath&quot;: &quot;A String&quot;, # Path within the volume from which the container&#x27;s volume should be mounted.
                        # Defaults to &quot;&quot; (volume&#x27;s root).
                        # +optional
                    &quot;name&quot;: &quot;A String&quot;, # This must match the Name of a Volume.
                  },
                ],
                &quot;volumeDevices&quot;: [ # 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.
                    &quot;name&quot;: &quot;A String&quot;, # name must match the name of a persistentVolumeClaim in the pod
                    &quot;devicePath&quot;: &quot;A String&quot;, # devicePath is the path inside of the container that the device will be
                        # mapped to.
                  },
                ],
                &quot;ports&quot;: [ # 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 &quot;0.0.0.0&quot; address inside a container will be
                    # accessible from the network.
                    # Cannot be updated.
                    # +optional
                  { # ContainerPort represents a network port in a single container.
                    &quot;hostPort&quot;: 42, # Number of port to expose on the host.
                        # If specified, this must be a valid port number, 0 &lt; x &lt; 65536.
                        # If HostNetwork is specified, this must match ContainerPort.
                        # Most containers do not need this.
                        # +optional
                    &quot;containerPort&quot;: 42, # Number of port to expose on the pod&#x27;s IP address.
                        # This must be a valid port number, 0 &lt; x &lt; 65536.
                    &quot;protocol&quot;: &quot;A String&quot;, # Protocol for port. Must be UDP or TCP.
                        # Defaults to &quot;TCP&quot;.
                        # +optional
                    &quot;hostIP&quot;: &quot;A String&quot;, # What host IP to bind the external port to.
                        # +optional
                    &quot;name&quot;: &quot;A String&quot;, # 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
                  },
                ],
                &quot;workingDir&quot;: &quot;A String&quot;, # Container&#x27;s working directory.
                    # If not specified, the container runtime&#x27;s default will be used, which
                    # might be configured in the container image.
                    # Cannot be updated.
                    # +optional
                &quot;args&quot;: [ # Arguments to the entrypoint.
                    # The docker image&#x27;s CMD is used if this is not provided.
                    # Variable references $(VAR_NAME) are expanded using the container&#x27;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
                  &quot;A String&quot;,
                ],
                &quot;stdinOnce&quot;: 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
                &quot;envFrom&quot;: [ # 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
                    &quot;configMapRef&quot;: { # ConfigMapEnvSource selects a ConfigMap to populate the environment # The ConfigMap to select from
                        # +optional
                        # variables with.
                        #
                        # The contents of the target ConfigMap&#x27;s Data field will represent the
                        # key-value pairs as environment variables.
                      &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run for Anthos: supported
                          #
                          # The ConfigMap to select from.
                      &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                          # directly into the message. Use the &quot;name&quot; field instead.
                          # referenced object inside the same namespace.
                        &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                            # More info:
                            # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                      },
                      &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run for Anthos: supported
                          #
                          # Specify whether the ConfigMap must be defined
                          # +optional
                    },
                    &quot;secretRef&quot;: { # SecretEnvSource selects a Secret to populate the environment # The Secret to select from
                        # +optional
                        # variables with.
                        #
                        # The contents of the target Secret&#x27;s Data field will represent the
                        # key-value pairs as environment variables.
                      &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                          # directly into the message. Use the &quot;name&quot; field instead.
                          # referenced object inside the same namespace.
                        &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                            # More info:
                            # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                      },
                      &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run for Anthos: supported
                          #
                          # Specify whether the Secret must be defined
                          # +optional
                      &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run for Anthos: supported
                          #
                          # The Secret to select from.
                    },
                    &quot;prefix&quot;: &quot;A String&quot;, # An optional identifier to prepend to each key in the ConfigMap. Must be a
                        # C_IDENTIFIER. +optional
                  },
                ],
                &quot;image&quot;: &quot;A String&quot;, # Docker image name.
                    # More info: https://kubernetes.io/docs/concepts/containers/images
                &quot;name&quot;: &quot;A String&quot;, # Name of the container specified as a DNS_LABEL.
                    # Each container must have a unique name (DNS_LABEL).
                    # Cannot be updated.
                &quot;command&quot;: [ # Entrypoint array. Not executed within a shell.
                    # The docker image&#x27;s ENTRYPOINT is used if this is not provided.
                    # Variable references $(VAR_NAME) are expanded using the container&#x27;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
                  &quot;A String&quot;,
                ],
                &quot;terminationMessagePolicy&quot;: &quot;A String&quot;, # 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
                &quot;securityContext&quot;: { # 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.
                  &quot;capabilities&quot;: { # 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
                    &quot;add&quot;: [ # Added capabilities
                        # +optional
                      &quot;A String&quot;,
                    ],
                    &quot;drop&quot;: [ # Removed capabilities
                        # +optional
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;runAsNonRoot&quot;: 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
                  &quot;runAsGroup&quot;: 42, # 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
                  &quot;privileged&quot;: True or False, # Run container in privileged mode.
                      # Processes in privileged containers are essentially equivalent to root on
                      # the host. Defaults to false. +optional
                  &quot;allowPrivilegeEscalation&quot;: 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
                  &quot;seLinuxOptions&quot;: { # 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
                    &quot;role&quot;: &quot;A String&quot;, # Role is a SELinux role label that applies to the container.
                        # +optional
                    &quot;level&quot;: &quot;A String&quot;, # Level is SELinux level label that applies to the container.
                        # +optional
                    &quot;user&quot;: &quot;A String&quot;, # User is a SELinux user label that applies to the container.
                        # +optional
                    &quot;type&quot;: &quot;A String&quot;, # Type is a SELinux type label that applies to the container.
                        # +optional
                  },
                  &quot;readOnlyRootFilesystem&quot;: True or False, # Whether this container has a read-only root filesystem.
                      # Default is false.
                      # +optional
                  &quot;runAsUser&quot;: 42, # 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
                },
                &quot;livenessProbe&quot;: { # 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.
                  &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                      # having succeeded. Defaults to 3. Minimum value is 1. +optional
                  &quot;initialDelaySeconds&quot;: 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
                  &quot;timeoutSeconds&quot;: 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
                  &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                    &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                        # Exec specifies the action to take.
                        # +optional
                      &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                          # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                          # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                          # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                    },
                    &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                        # +optional
                      &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                          # +optional
                        { # HTTPHeader describes a custom header to be used in HTTP probes
                          &quot;value&quot;: &quot;A String&quot;, # The header field value
                          &quot;name&quot;: &quot;A String&quot;, # The header field name
                        },
                      ],
                      &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                          # +optional
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                          # &quot;Host&quot; in httpHeaders instead.
                          # +optional
                      &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                          # Defaults to HTTP.
                          # +optional
                    },
                    &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                        # TCP hooks not yet supported
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                          # +optional
                    },
                  },
                  &quot;successThreshold&quot;: 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
                  &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                      # Default to 10 seconds. Minimum value is 1.
                      # +optional
                },
                &quot;env&quot;: [ # List of environment variables to set in the container.
                    # Cannot be updated.
                    # +optional
                  { # EnvVar represents an environment variable present in a Container.
                    &quot;value&quot;: &quot;A String&quot;, # 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 &quot;&quot;.
                        # +optional
                    &quot;name&quot;: &quot;A String&quot;, # Name of the environment variable. Must be a C_IDENTIFIER.
                    &quot;valueFrom&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # Source for the environment variable&#x27;s value. Cannot be used if value is not
                        # empty. +optional
                        #
                        # Cloud Run on GKE: supported
                        #
                        # EnvVarSource represents a source for the value of an EnvVar.
                      &quot;configMapKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # Selects a key of a ConfigMap.
                          # +optional
                          #
                          # Cloud Run on GKE: supported
                          #
                          # Selects a key from a ConfigMap.
                        &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # Specify whether the ConfigMap or its key must be defined
                            # +optional
                        &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # The key to select.
                        &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # The ConfigMap to select from.
                        &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                            # directly into the message. Use the &quot;name&quot; field instead.
                            # referenced object inside the same namespace.
                          &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                              # More info:
                              # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                        },
                      },
                      &quot;secretKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # Selects a key of a secret in the pod&#x27;s namespace
                          # +optional
                          #
                          # Cloud Run on GKE: supported
                          #
                          # SecretKeySelector selects a key of a Secret.
                        &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                            # directly into the message. Use the &quot;name&quot; field instead.
                            # referenced object inside the same namespace.
                          &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                              # More info:
                              # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                        },
                        &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # Specify whether the Secret or its key must be defined
                            # +optional
                        &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # The key of the secret to select from.  Must be a valid secret key.
                        &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # The name of the secret in the pod&#x27;s namespace to select from.
                      },
                    },
                  },
                ],
                &quot;resources&quot;: { # 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
                  &quot;requestsInMap&quot;: { # 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&lt;string, Quantity&gt; requests field. This is done to become compliant
                      # with k8s style API.
                      # This field is deprecated in favor of requests field.
                    &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                        # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                      &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                    },
                  },
                  &quot;requests&quot;: { # 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 &#x27;quantity&#x27; k8s type:
                      # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                    &quot;a_key&quot;: &quot;A String&quot;,
                  },
                  &quot;limits&quot;: { # Limits describes the maximum amount of compute resources allowed.
                      # The values of the map is string form of the &#x27;quantity&#x27; k8s type:
                      # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                    &quot;a_key&quot;: &quot;A String&quot;,
                  },
                  &quot;limitsInMap&quot;: { # Limits describes the maximum amount of compute resources allowed.
                      # This is a temporary field created to migrate away from the
                      # map&lt;string, Quantity&gt; limits field. This is done to become compliant
                      # with k8s style API.
                      # This field is deprecated in favor of limits field.
                    &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                        # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                      &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                    },
                  },
                },
                &quot;readinessProbe&quot;: { # 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.
                  &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                      # having succeeded. Defaults to 3. Minimum value is 1. +optional
                  &quot;initialDelaySeconds&quot;: 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
                  &quot;timeoutSeconds&quot;: 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
                  &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                    &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                        # Exec specifies the action to take.
                        # +optional
                      &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                          # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                          # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                          # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                    },
                    &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                        # +optional
                      &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                          # +optional
                        { # HTTPHeader describes a custom header to be used in HTTP probes
                          &quot;value&quot;: &quot;A String&quot;, # The header field value
                          &quot;name&quot;: &quot;A String&quot;, # The header field name
                        },
                      ],
                      &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                          # +optional
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                          # &quot;Host&quot; in httpHeaders instead.
                          # +optional
                      &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                          # Defaults to HTTP.
                          # +optional
                    },
                    &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                        # TCP hooks not yet supported
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                          # +optional
                    },
                  },
                  &quot;successThreshold&quot;: 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
                  &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                      # Default to 10 seconds. Minimum value is 1.
                      # +optional
                },
                &quot;imagePullPolicy&quot;: &quot;A String&quot;, # 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
              },
              &quot;timeoutSeconds&quot;: 42, # TimeoutSeconds holds the max duration the instance is allowed for
                  # responding to a request.
                  # Not currently used by Cloud Run.
              &quot;volumes&quot;: [
                { # Volume represents a named volume in a container.
                  &quot;configMap&quot;: { # Adapts a ConfigMap into a volume.
                      # The contents of the target ConfigMap&#x27;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.
                    &quot;name&quot;: &quot;A String&quot;, # Name of the config.
                    &quot;defaultMode&quot;: 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.
                    &quot;items&quot;: [ # 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.
                        &quot;key&quot;: &quot;A String&quot;, # The key to project.
                        &quot;path&quot;: &quot;A String&quot;, # The relative path of the file to map the key to.
                            # May not be an absolute path.
                            # May not contain the path element &#x27;..&#x27;.
                            # May not start with the string &#x27;..&#x27;.
                        &quot;mode&quot;: 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
                      },
                    ],
                    &quot;optional&quot;: True or False, # Specify whether the Secret or its keys must be defined.
                  },
                  &quot;name&quot;: &quot;A String&quot;, # Volume&#x27;s name.
                  &quot;secret&quot;: { # The contents of the target Secret&#x27;s Data field will be presented in a volume
                      # as files using the keys in the Data field as the file names.
                    &quot;optional&quot;: True or False, # Specify whether the Secret or its keys must be defined.
                    &quot;defaultMode&quot;: 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.
                    &quot;secretName&quot;: &quot;A String&quot;, # Name of the secret in the container&#x27;s namespace to use.
                    &quot;items&quot;: [ # 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.
                        &quot;key&quot;: &quot;A String&quot;, # The key to project.
                        &quot;path&quot;: &quot;A String&quot;, # The relative path of the file to map the key to.
                            # May not be an absolute path.
                            # May not contain the path element &#x27;..&#x27;.
                            # May not start with the string &#x27;..&#x27;.
                        &quot;mode&quot;: 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
                      },
                    ],
                  },
                },
              ],
            },
          },
          &quot;revisionTemplate&quot;: { # RevisionTemplateSpec describes the data a revision should have when created # RevisionTemplate holds the latest specification for the Revision to
              # be stamped out. The template references the container image, and may also
              # include labels and annotations that should be attached to the Revision.
              # To correlate a Revision, and/or to force a Revision to be created when the
              # spec doesn&#x27;t otherwise change, a nonce label may be provided in the
              # template metadata. For more details, see:
              # https://github.com/knative/serving/blob/master/docs/client-conventions.md#associate-modifications-with-revisions
              #
              # Cloud Run does not currently support referencing a build that is
              # responsible for materializing the container image from source.
              # from a template. Based on:
              # https://github.com/kubernetes/api/blob/e771f807/core/v1/types.go#L3179-L3190
            &quot;metadata&quot;: { # ObjectMeta is metadata that all persisted resources must have, which includes # Optional metadata for this Revision, including labels and annotations. Name
                # will be generated by the Configuration.
                # To set minimum instances for this revision, use the
                # &quot;autoscaling.knative.dev/minScale&quot; annotation key. (Cloud Run on GKE only).
                # To set maximum instances for this revision, use the
                # &quot;autoscaling.knative.dev/maxScale&quot; annotation key.
                # To set Cloud SQL connections for the revision, use the
                # &quot;run.googleapis.com/cloudsql-instances&quot; annotation key. Values should be
                # comma separated.
                # all objects users must create.
              &quot;annotations&quot;: { # 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
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;generateName&quot;: &quot;A String&quot;, # 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;
              &quot;name&quot;: &quot;A String&quot;, # 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
              &quot;clusterName&quot;: &quot;A String&quot;, # 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
              &quot;deletionGracePeriodSeconds&quot;: 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
              &quot;finalizers&quot;: [ # 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
                &quot;A String&quot;,
              ],
              &quot;deletionTimestamp&quot;: &quot;A String&quot;, # 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
              &quot;ownerReferences&quot;: [ # 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.
                  &quot;apiVersion&quot;: &quot;A String&quot;, # API version of the referent.
                  &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                      # More info: http://kubernetes.io/docs/user-guide/identifiers#names
                  &quot;uid&quot;: &quot;A String&quot;, # UID of the referent.
                      # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
                  &quot;controller&quot;: True or False, # If true, this reference points to the managing controller.
                      # +optional
                  &quot;kind&quot;: &quot;A String&quot;, # Kind of the referent.
                      # More info:
                      # https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
                  &quot;blockOwnerDeletion&quot;: True or False, # If true, AND if the owner has the &quot;foregroundDeletion&quot; 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 &quot;delete&quot; permission of the owner,
                      # otherwise 422 (Unprocessable Entity) will be returned.
                      # +optional
                },
              ],
              &quot;creationTimestamp&quot;: &quot;A String&quot;, # 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
              &quot;labels&quot;: { # 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
                &quot;a_key&quot;: &quot;A String&quot;,
              },
              &quot;generation&quot;: 42, # A sequence number representing a specific generation of the desired state.
                  # Populated by the system. Read-only.
                  # +optional
              &quot;resourceVersion&quot;: &quot;A String&quot;, # 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
              &quot;uid&quot;: &quot;A String&quot;, # 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
              &quot;selfLink&quot;: &quot;A String&quot;, # SelfLink is a URL representing this object.
                  # Populated by the system.
                  # Read-only.
                  # +optional
                  #  string selfLink = 4;
              &quot;namespace&quot;: &quot;A String&quot;, # 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.
            },
            &quot;spec&quot;: { # RevisionSpec holds the desired state of the Revision (from the client). # RevisionSpec holds the desired state of the Revision (from the client).
              &quot;containerConcurrency&quot;: 42, # (Optional)
                  #
                  # ContainerConcurrency specifies the maximum allowed in-flight (concurrent)
                  # requests per container instance of the Revision.
                  #
                  # Cloud Run fully managed: supported, defaults to 80
                  #
                  # Cloud Run on GKE: supported, defaults to 0, which means concurrency
                  # to the application is not limited, and the system decides the
                  # target concurrency for the autoscaler.
              &quot;serviceAccountName&quot;: &quot;A String&quot;, # Email address of the IAM service account associated with the revision
                  # of the service. The service account represents the identity of the
                  # running revision, and determines what permissions the revision has. If
                  # not provided, the revision will use the project&#x27;s default service account.
              &quot;containers&quot;: [ # 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.
                  # In Cloud Run, only a single container may be provided.
                { # 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.
                  &quot;terminationMessagePath&quot;: &quot;A String&quot;, # Optional: Path at which the file to which the container&#x27;s termination
                      # message will be written is mounted into the container&#x27;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
                  &quot;lifecycle&quot;: { # 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.
                    &quot;preStop&quot;: { # 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
                      &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                          # Exec specifies the action to take.
                          # +optional
                        &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                            # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                            # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                            # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                      },
                      &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                          # +optional
                        &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                            # +optional
                          { # HTTPHeader describes a custom header to be used in HTTP probes
                            &quot;value&quot;: &quot;A String&quot;, # The header field value
                            &quot;name&quot;: &quot;A String&quot;, # The header field name
                          },
                        ],
                        &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                            # +optional
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                            # &quot;Host&quot; in httpHeaders instead.
                            # +optional
                        &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                            # Defaults to HTTP.
                            # +optional
                      },
                      &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                          # TCP hooks not yet supported
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                            # +optional
                      },
                    },
                    &quot;postStart&quot;: { # 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
                      &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                          # Exec specifies the action to take.
                          # +optional
                        &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                            # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                            # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                            # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                      },
                      &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                          # +optional
                        &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                            # +optional
                          { # HTTPHeader describes a custom header to be used in HTTP probes
                            &quot;value&quot;: &quot;A String&quot;, # The header field value
                            &quot;name&quot;: &quot;A String&quot;, # The header field name
                          },
                        ],
                        &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                            # +optional
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                            # &quot;Host&quot; in httpHeaders instead.
                            # +optional
                        &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                            # Defaults to HTTP.
                            # +optional
                      },
                      &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                          # TCP hooks not yet supported
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                            # +optional
                      },
                    },
                  },
                  &quot;stdin&quot;: 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
                  &quot;tty&quot;: True or False, # Whether this container should allocate a TTY for itself, also requires
                      # &#x27;stdin&#x27; to be true. Default is false. +optional
                  &quot;volumeMounts&quot;: [ # Pod volumes to mount into the container&#x27;s filesystem.
                      # Cannot be updated.
                      # +optional
                    { # VolumeMount describes a mounting of a Volume within a container.
                      &quot;readOnly&quot;: True or False, # Mounted read-only if true, read-write otherwise (false or unspecified).
                          # Defaults to false.
                          # +optional
                      &quot;mountPropagation&quot;: &quot;A String&quot;, # 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
                      &quot;mountPath&quot;: &quot;A String&quot;, # Path within the container at which the volume should be mounted.  Must
                          # not contain &#x27;:&#x27;.
                      &quot;subPath&quot;: &quot;A String&quot;, # Path within the volume from which the container&#x27;s volume should be mounted.
                          # Defaults to &quot;&quot; (volume&#x27;s root).
                          # +optional
                      &quot;name&quot;: &quot;A String&quot;, # This must match the Name of a Volume.
                    },
                  ],
                  &quot;volumeDevices&quot;: [ # 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.
                      &quot;name&quot;: &quot;A String&quot;, # name must match the name of a persistentVolumeClaim in the pod
                      &quot;devicePath&quot;: &quot;A String&quot;, # devicePath is the path inside of the container that the device will be
                          # mapped to.
                    },
                  ],
                  &quot;ports&quot;: [ # 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 &quot;0.0.0.0&quot; address inside a container will be
                      # accessible from the network.
                      # Cannot be updated.
                      # +optional
                    { # ContainerPort represents a network port in a single container.
                      &quot;hostPort&quot;: 42, # Number of port to expose on the host.
                          # If specified, this must be a valid port number, 0 &lt; x &lt; 65536.
                          # If HostNetwork is specified, this must match ContainerPort.
                          # Most containers do not need this.
                          # +optional
                      &quot;containerPort&quot;: 42, # Number of port to expose on the pod&#x27;s IP address.
                          # This must be a valid port number, 0 &lt; x &lt; 65536.
                      &quot;protocol&quot;: &quot;A String&quot;, # Protocol for port. Must be UDP or TCP.
                          # Defaults to &quot;TCP&quot;.
                          # +optional
                      &quot;hostIP&quot;: &quot;A String&quot;, # What host IP to bind the external port to.
                          # +optional
                      &quot;name&quot;: &quot;A String&quot;, # 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
                    },
                  ],
                  &quot;workingDir&quot;: &quot;A String&quot;, # Container&#x27;s working directory.
                      # If not specified, the container runtime&#x27;s default will be used, which
                      # might be configured in the container image.
                      # Cannot be updated.
                      # +optional
                  &quot;args&quot;: [ # Arguments to the entrypoint.
                      # The docker image&#x27;s CMD is used if this is not provided.
                      # Variable references $(VAR_NAME) are expanded using the container&#x27;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
                    &quot;A String&quot;,
                  ],
                  &quot;stdinOnce&quot;: 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
                  &quot;envFrom&quot;: [ # 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
                      &quot;configMapRef&quot;: { # ConfigMapEnvSource selects a ConfigMap to populate the environment # The ConfigMap to select from
                          # +optional
                          # variables with.
                          #
                          # The contents of the target ConfigMap&#x27;s Data field will represent the
                          # key-value pairs as environment variables.
                        &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run for Anthos: supported
                            #
                            # The ConfigMap to select from.
                        &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                            # directly into the message. Use the &quot;name&quot; field instead.
                            # referenced object inside the same namespace.
                          &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                              # More info:
                              # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                        },
                        &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run for Anthos: supported
                            #
                            # Specify whether the ConfigMap must be defined
                            # +optional
                      },
                      &quot;secretRef&quot;: { # SecretEnvSource selects a Secret to populate the environment # The Secret to select from
                          # +optional
                          # variables with.
                          #
                          # The contents of the target Secret&#x27;s Data field will represent the
                          # key-value pairs as environment variables.
                        &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                            # directly into the message. Use the &quot;name&quot; field instead.
                            # referenced object inside the same namespace.
                          &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                              # More info:
                              # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                        },
                        &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run for Anthos: supported
                            #
                            # Specify whether the Secret must be defined
                            # +optional
                        &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run for Anthos: supported
                            #
                            # The Secret to select from.
                      },
                      &quot;prefix&quot;: &quot;A String&quot;, # An optional identifier to prepend to each key in the ConfigMap. Must be a
                          # C_IDENTIFIER. +optional
                    },
                  ],
                  &quot;image&quot;: &quot;A String&quot;, # Docker image name.
                      # More info: https://kubernetes.io/docs/concepts/containers/images
                  &quot;name&quot;: &quot;A String&quot;, # Name of the container specified as a DNS_LABEL.
                      # Each container must have a unique name (DNS_LABEL).
                      # Cannot be updated.
                  &quot;command&quot;: [ # Entrypoint array. Not executed within a shell.
                      # The docker image&#x27;s ENTRYPOINT is used if this is not provided.
                      # Variable references $(VAR_NAME) are expanded using the container&#x27;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
                    &quot;A String&quot;,
                  ],
                  &quot;terminationMessagePolicy&quot;: &quot;A String&quot;, # 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
                  &quot;securityContext&quot;: { # 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.
                    &quot;capabilities&quot;: { # 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
                      &quot;add&quot;: [ # Added capabilities
                          # +optional
                        &quot;A String&quot;,
                      ],
                      &quot;drop&quot;: [ # Removed capabilities
                          # +optional
                        &quot;A String&quot;,
                      ],
                    },
                    &quot;runAsNonRoot&quot;: 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
                    &quot;runAsGroup&quot;: 42, # 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
                    &quot;privileged&quot;: True or False, # Run container in privileged mode.
                        # Processes in privileged containers are essentially equivalent to root on
                        # the host. Defaults to false. +optional
                    &quot;allowPrivilegeEscalation&quot;: 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
                    &quot;seLinuxOptions&quot;: { # 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
                      &quot;role&quot;: &quot;A String&quot;, # Role is a SELinux role label that applies to the container.
                          # +optional
                      &quot;level&quot;: &quot;A String&quot;, # Level is SELinux level label that applies to the container.
                          # +optional
                      &quot;user&quot;: &quot;A String&quot;, # User is a SELinux user label that applies to the container.
                          # +optional
                      &quot;type&quot;: &quot;A String&quot;, # Type is a SELinux type label that applies to the container.
                          # +optional
                    },
                    &quot;readOnlyRootFilesystem&quot;: True or False, # Whether this container has a read-only root filesystem.
                        # Default is false.
                        # +optional
                    &quot;runAsUser&quot;: 42, # 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
                  },
                  &quot;livenessProbe&quot;: { # 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.
                    &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                        # having succeeded. Defaults to 3. Minimum value is 1. +optional
                    &quot;initialDelaySeconds&quot;: 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
                    &quot;timeoutSeconds&quot;: 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
                    &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                      &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                          # Exec specifies the action to take.
                          # +optional
                        &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                            # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                            # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                            # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                      },
                      &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                          # +optional
                        &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                            # +optional
                          { # HTTPHeader describes a custom header to be used in HTTP probes
                            &quot;value&quot;: &quot;A String&quot;, # The header field value
                            &quot;name&quot;: &quot;A String&quot;, # The header field name
                          },
                        ],
                        &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                            # +optional
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                            # &quot;Host&quot; in httpHeaders instead.
                            # +optional
                        &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                            # Defaults to HTTP.
                            # +optional
                      },
                      &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                          # TCP hooks not yet supported
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                            # +optional
                      },
                    },
                    &quot;successThreshold&quot;: 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
                    &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                        # Default to 10 seconds. Minimum value is 1.
                        # +optional
                  },
                  &quot;env&quot;: [ # List of environment variables to set in the container.
                      # Cannot be updated.
                      # +optional
                    { # EnvVar represents an environment variable present in a Container.
                      &quot;value&quot;: &quot;A String&quot;, # 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 &quot;&quot;.
                          # +optional
                      &quot;name&quot;: &quot;A String&quot;, # Name of the environment variable. Must be a C_IDENTIFIER.
                      &quot;valueFrom&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # Source for the environment variable&#x27;s value. Cannot be used if value is not
                          # empty. +optional
                          #
                          # Cloud Run on GKE: supported
                          #
                          # EnvVarSource represents a source for the value of an EnvVar.
                        &quot;configMapKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # Selects a key of a ConfigMap.
                            # +optional
                            #
                            # Cloud Run on GKE: supported
                            #
                            # Selects a key from a ConfigMap.
                          &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                              #
                              # Cloud Run on GKE: supported
                              #
                              # Specify whether the ConfigMap or its key must be defined
                              # +optional
                          &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                              #
                              # Cloud Run on GKE: supported
                              #
                              # The key to select.
                          &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                              #
                              # Cloud Run on GKE: supported
                              #
                              # The ConfigMap to select from.
                          &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                              # directly into the message. Use the &quot;name&quot; field instead.
                              # referenced object inside the same namespace.
                            &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                                # More info:
                                # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                          },
                        },
                        &quot;secretKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # Selects a key of a secret in the pod&#x27;s namespace
                            # +optional
                            #
                            # Cloud Run on GKE: supported
                            #
                            # SecretKeySelector selects a key of a Secret.
                          &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                              # directly into the message. Use the &quot;name&quot; field instead.
                              # referenced object inside the same namespace.
                            &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                                # More info:
                                # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                          },
                          &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                              #
                              # Cloud Run on GKE: supported
                              #
                              # Specify whether the Secret or its key must be defined
                              # +optional
                          &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                              #
                              # Cloud Run on GKE: supported
                              #
                              # The key of the secret to select from.  Must be a valid secret key.
                          &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                              #
                              # Cloud Run on GKE: supported
                              #
                              # The name of the secret in the pod&#x27;s namespace to select from.
                        },
                      },
                    },
                  ],
                  &quot;resources&quot;: { # 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
                    &quot;requestsInMap&quot;: { # 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&lt;string, Quantity&gt; requests field. This is done to become compliant
                        # with k8s style API.
                        # This field is deprecated in favor of requests field.
                      &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                          # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                        &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                      },
                    },
                    &quot;requests&quot;: { # 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 &#x27;quantity&#x27; k8s type:
                        # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                      &quot;a_key&quot;: &quot;A String&quot;,
                    },
                    &quot;limits&quot;: { # Limits describes the maximum amount of compute resources allowed.
                        # The values of the map is string form of the &#x27;quantity&#x27; k8s type:
                        # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                      &quot;a_key&quot;: &quot;A String&quot;,
                    },
                    &quot;limitsInMap&quot;: { # Limits describes the maximum amount of compute resources allowed.
                        # This is a temporary field created to migrate away from the
                        # map&lt;string, Quantity&gt; limits field. This is done to become compliant
                        # with k8s style API.
                        # This field is deprecated in favor of limits field.
                      &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                          # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                        &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                      },
                    },
                  },
                  &quot;readinessProbe&quot;: { # 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.
                    &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                        # having succeeded. Defaults to 3. Minimum value is 1. +optional
                    &quot;initialDelaySeconds&quot;: 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
                    &quot;timeoutSeconds&quot;: 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
                    &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                      &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                          # Exec specifies the action to take.
                          # +optional
                        &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                            # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                            # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                            # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                      },
                      &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                          # +optional
                        &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                            # +optional
                          { # HTTPHeader describes a custom header to be used in HTTP probes
                            &quot;value&quot;: &quot;A String&quot;, # The header field value
                            &quot;name&quot;: &quot;A String&quot;, # The header field name
                          },
                        ],
                        &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                            # +optional
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                            # &quot;Host&quot; in httpHeaders instead.
                            # +optional
                        &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                            # Defaults to HTTP.
                            # +optional
                      },
                      &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                          # TCP hooks not yet supported
                        &quot;port&quot;: { # 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.
                          &quot;type&quot;: 42, # The type of the value.
                          &quot;intVal&quot;: 42, # The int value.
                          &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                        },
                        &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                            # +optional
                      },
                    },
                    &quot;successThreshold&quot;: 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
                    &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                        # Default to 10 seconds. Minimum value is 1.
                        # +optional
                  },
                  &quot;imagePullPolicy&quot;: &quot;A String&quot;, # 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
                },
              ],
              &quot;generation&quot;: 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.
              &quot;servingState&quot;: &quot;A String&quot;, # 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.
              &quot;concurrencyModel&quot;: &quot;A String&quot;, # ConcurrencyModel specifies the desired concurrency model
                  # (Single or Multi) for the Revision. Defaults to Multi.
                  # Deprecated in favor of ContainerConcurrency.
                  # +optional
              &quot;container&quot;: { # 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.
                &quot;terminationMessagePath&quot;: &quot;A String&quot;, # Optional: Path at which the file to which the container&#x27;s termination
                    # message will be written is mounted into the container&#x27;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
                &quot;lifecycle&quot;: { # 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.
                  &quot;preStop&quot;: { # 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
                    &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                        # Exec specifies the action to take.
                        # +optional
                      &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                          # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                          # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                          # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                    },
                    &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                        # +optional
                      &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                          # +optional
                        { # HTTPHeader describes a custom header to be used in HTTP probes
                          &quot;value&quot;: &quot;A String&quot;, # The header field value
                          &quot;name&quot;: &quot;A String&quot;, # The header field name
                        },
                      ],
                      &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                          # +optional
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                          # &quot;Host&quot; in httpHeaders instead.
                          # +optional
                      &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                          # Defaults to HTTP.
                          # +optional
                    },
                    &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                        # TCP hooks not yet supported
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                          # +optional
                    },
                  },
                  &quot;postStart&quot;: { # 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
                    &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                        # Exec specifies the action to take.
                        # +optional
                      &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                          # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                          # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                          # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                    },
                    &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                        # +optional
                      &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                          # +optional
                        { # HTTPHeader describes a custom header to be used in HTTP probes
                          &quot;value&quot;: &quot;A String&quot;, # The header field value
                          &quot;name&quot;: &quot;A String&quot;, # The header field name
                        },
                      ],
                      &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                          # +optional
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                          # &quot;Host&quot; in httpHeaders instead.
                          # +optional
                      &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                          # Defaults to HTTP.
                          # +optional
                    },
                    &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                        # TCP hooks not yet supported
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                          # +optional
                    },
                  },
                },
                &quot;stdin&quot;: 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
                &quot;tty&quot;: True or False, # Whether this container should allocate a TTY for itself, also requires
                    # &#x27;stdin&#x27; to be true. Default is false. +optional
                &quot;volumeMounts&quot;: [ # Pod volumes to mount into the container&#x27;s filesystem.
                    # Cannot be updated.
                    # +optional
                  { # VolumeMount describes a mounting of a Volume within a container.
                    &quot;readOnly&quot;: True or False, # Mounted read-only if true, read-write otherwise (false or unspecified).
                        # Defaults to false.
                        # +optional
                    &quot;mountPropagation&quot;: &quot;A String&quot;, # 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
                    &quot;mountPath&quot;: &quot;A String&quot;, # Path within the container at which the volume should be mounted.  Must
                        # not contain &#x27;:&#x27;.
                    &quot;subPath&quot;: &quot;A String&quot;, # Path within the volume from which the container&#x27;s volume should be mounted.
                        # Defaults to &quot;&quot; (volume&#x27;s root).
                        # +optional
                    &quot;name&quot;: &quot;A String&quot;, # This must match the Name of a Volume.
                  },
                ],
                &quot;volumeDevices&quot;: [ # 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.
                    &quot;name&quot;: &quot;A String&quot;, # name must match the name of a persistentVolumeClaim in the pod
                    &quot;devicePath&quot;: &quot;A String&quot;, # devicePath is the path inside of the container that the device will be
                        # mapped to.
                  },
                ],
                &quot;ports&quot;: [ # 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 &quot;0.0.0.0&quot; address inside a container will be
                    # accessible from the network.
                    # Cannot be updated.
                    # +optional
                  { # ContainerPort represents a network port in a single container.
                    &quot;hostPort&quot;: 42, # Number of port to expose on the host.
                        # If specified, this must be a valid port number, 0 &lt; x &lt; 65536.
                        # If HostNetwork is specified, this must match ContainerPort.
                        # Most containers do not need this.
                        # +optional
                    &quot;containerPort&quot;: 42, # Number of port to expose on the pod&#x27;s IP address.
                        # This must be a valid port number, 0 &lt; x &lt; 65536.
                    &quot;protocol&quot;: &quot;A String&quot;, # Protocol for port. Must be UDP or TCP.
                        # Defaults to &quot;TCP&quot;.
                        # +optional
                    &quot;hostIP&quot;: &quot;A String&quot;, # What host IP to bind the external port to.
                        # +optional
                    &quot;name&quot;: &quot;A String&quot;, # 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
                  },
                ],
                &quot;workingDir&quot;: &quot;A String&quot;, # Container&#x27;s working directory.
                    # If not specified, the container runtime&#x27;s default will be used, which
                    # might be configured in the container image.
                    # Cannot be updated.
                    # +optional
                &quot;args&quot;: [ # Arguments to the entrypoint.
                    # The docker image&#x27;s CMD is used if this is not provided.
                    # Variable references $(VAR_NAME) are expanded using the container&#x27;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
                  &quot;A String&quot;,
                ],
                &quot;stdinOnce&quot;: 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
                &quot;envFrom&quot;: [ # 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
                    &quot;configMapRef&quot;: { # ConfigMapEnvSource selects a ConfigMap to populate the environment # The ConfigMap to select from
                        # +optional
                        # variables with.
                        #
                        # The contents of the target ConfigMap&#x27;s Data field will represent the
                        # key-value pairs as environment variables.
                      &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run for Anthos: supported
                          #
                          # The ConfigMap to select from.
                      &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                          # directly into the message. Use the &quot;name&quot; field instead.
                          # referenced object inside the same namespace.
                        &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                            # More info:
                            # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                      },
                      &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run for Anthos: supported
                          #
                          # Specify whether the ConfigMap must be defined
                          # +optional
                    },
                    &quot;secretRef&quot;: { # SecretEnvSource selects a Secret to populate the environment # The Secret to select from
                        # +optional
                        # variables with.
                        #
                        # The contents of the target Secret&#x27;s Data field will represent the
                        # key-value pairs as environment variables.
                      &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                          # directly into the message. Use the &quot;name&quot; field instead.
                          # referenced object inside the same namespace.
                        &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                            # More info:
                            # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                      },
                      &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run for Anthos: supported
                          #
                          # Specify whether the Secret must be defined
                          # +optional
                      &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                          #
                          # Cloud Run for Anthos: supported
                          #
                          # The Secret to select from.
                    },
                    &quot;prefix&quot;: &quot;A String&quot;, # An optional identifier to prepend to each key in the ConfigMap. Must be a
                        # C_IDENTIFIER. +optional
                  },
                ],
                &quot;image&quot;: &quot;A String&quot;, # Docker image name.
                    # More info: https://kubernetes.io/docs/concepts/containers/images
                &quot;name&quot;: &quot;A String&quot;, # Name of the container specified as a DNS_LABEL.
                    # Each container must have a unique name (DNS_LABEL).
                    # Cannot be updated.
                &quot;command&quot;: [ # Entrypoint array. Not executed within a shell.
                    # The docker image&#x27;s ENTRYPOINT is used if this is not provided.
                    # Variable references $(VAR_NAME) are expanded using the container&#x27;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
                  &quot;A String&quot;,
                ],
                &quot;terminationMessagePolicy&quot;: &quot;A String&quot;, # 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
                &quot;securityContext&quot;: { # 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.
                  &quot;capabilities&quot;: { # 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
                    &quot;add&quot;: [ # Added capabilities
                        # +optional
                      &quot;A String&quot;,
                    ],
                    &quot;drop&quot;: [ # Removed capabilities
                        # +optional
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;runAsNonRoot&quot;: 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
                  &quot;runAsGroup&quot;: 42, # 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
                  &quot;privileged&quot;: True or False, # Run container in privileged mode.
                      # Processes in privileged containers are essentially equivalent to root on
                      # the host. Defaults to false. +optional
                  &quot;allowPrivilegeEscalation&quot;: 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
                  &quot;seLinuxOptions&quot;: { # 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
                    &quot;role&quot;: &quot;A String&quot;, # Role is a SELinux role label that applies to the container.
                        # +optional
                    &quot;level&quot;: &quot;A String&quot;, # Level is SELinux level label that applies to the container.
                        # +optional
                    &quot;user&quot;: &quot;A String&quot;, # User is a SELinux user label that applies to the container.
                        # +optional
                    &quot;type&quot;: &quot;A String&quot;, # Type is a SELinux type label that applies to the container.
                        # +optional
                  },
                  &quot;readOnlyRootFilesystem&quot;: True or False, # Whether this container has a read-only root filesystem.
                      # Default is false.
                      # +optional
                  &quot;runAsUser&quot;: 42, # 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
                },
                &quot;livenessProbe&quot;: { # 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.
                  &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                      # having succeeded. Defaults to 3. Minimum value is 1. +optional
                  &quot;initialDelaySeconds&quot;: 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
                  &quot;timeoutSeconds&quot;: 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
                  &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                    &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                        # Exec specifies the action to take.
                        # +optional
                      &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                          # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                          # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                          # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                    },
                    &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                        # +optional
                      &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                          # +optional
                        { # HTTPHeader describes a custom header to be used in HTTP probes
                          &quot;value&quot;: &quot;A String&quot;, # The header field value
                          &quot;name&quot;: &quot;A String&quot;, # The header field name
                        },
                      ],
                      &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                          # +optional
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                          # &quot;Host&quot; in httpHeaders instead.
                          # +optional
                      &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                          # Defaults to HTTP.
                          # +optional
                    },
                    &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                        # TCP hooks not yet supported
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                          # +optional
                    },
                  },
                  &quot;successThreshold&quot;: 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
                  &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                      # Default to 10 seconds. Minimum value is 1.
                      # +optional
                },
                &quot;env&quot;: [ # List of environment variables to set in the container.
                    # Cannot be updated.
                    # +optional
                  { # EnvVar represents an environment variable present in a Container.
                    &quot;value&quot;: &quot;A String&quot;, # 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 &quot;&quot;.
                        # +optional
                    &quot;name&quot;: &quot;A String&quot;, # Name of the environment variable. Must be a C_IDENTIFIER.
                    &quot;valueFrom&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                        #
                        # Cloud Run on GKE: supported
                        #
                        # Source for the environment variable&#x27;s value. Cannot be used if value is not
                        # empty. +optional
                        #
                        # Cloud Run on GKE: supported
                        #
                        # EnvVarSource represents a source for the value of an EnvVar.
                      &quot;configMapKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # Selects a key of a ConfigMap.
                          # +optional
                          #
                          # Cloud Run on GKE: supported
                          #
                          # Selects a key from a ConfigMap.
                        &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # Specify whether the ConfigMap or its key must be defined
                            # +optional
                        &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # The key to select.
                        &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # The ConfigMap to select from.
                        &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                            # directly into the message. Use the &quot;name&quot; field instead.
                            # referenced object inside the same namespace.
                          &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                              # More info:
                              # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                        },
                      },
                      &quot;secretKeyRef&quot;: { # Cloud Run fully managed: not supported # Cloud Run fully managed: not supported
                          #
                          # Cloud Run on GKE: supported
                          #
                          # Selects a key of a secret in the pod&#x27;s namespace
                          # +optional
                          #
                          # Cloud Run on GKE: supported
                          #
                          # SecretKeySelector selects a key of a Secret.
                        &quot;localObjectReference&quot;: { # LocalObjectReference contains enough information to let you locate the # This field should not be used directly as it is meant to be inlined
                            # directly into the message. Use the &quot;name&quot; field instead.
                            # referenced object inside the same namespace.
                          &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                              # More info:
                              # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
                        },
                        &quot;optional&quot;: True or False, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # Specify whether the Secret or its key must be defined
                            # +optional
                        &quot;key&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # The key of the secret to select from.  Must be a valid secret key.
                        &quot;name&quot;: &quot;A String&quot;, # Cloud Run fully managed: not supported
                            #
                            # Cloud Run on GKE: supported
                            #
                            # The name of the secret in the pod&#x27;s namespace to select from.
                      },
                    },
                  },
                ],
                &quot;resources&quot;: { # 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
                  &quot;requestsInMap&quot;: { # 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&lt;string, Quantity&gt; requests field. This is done to become compliant
                      # with k8s style API.
                      # This field is deprecated in favor of requests field.
                    &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                        # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                      &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                    },
                  },
                  &quot;requests&quot;: { # 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 &#x27;quantity&#x27; k8s type:
                      # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                    &quot;a_key&quot;: &quot;A String&quot;,
                  },
                  &quot;limits&quot;: { # Limits describes the maximum amount of compute resources allowed.
                      # The values of the map is string form of the &#x27;quantity&#x27; k8s type:
                      # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/quantity.go
                    &quot;a_key&quot;: &quot;A String&quot;,
                  },
                  &quot;limitsInMap&quot;: { # Limits describes the maximum amount of compute resources allowed.
                      # This is a temporary field created to migrate away from the
                      # map&lt;string, Quantity&gt; limits field. This is done to become compliant
                      # with k8s style API.
                      # This field is deprecated in favor of limits field.
                    &quot;a_key&quot;: { # The view model of a single quantity, e.g. &quot;800 MiB&quot;. Corresponds to
                        # https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/apimachinery/pkg/api/resource/generated.proto
                      &quot;string&quot;: &quot;A String&quot;, # Stringified version of the quantity, e.g., &quot;800 MiB&quot;.
                    },
                  },
                },
                &quot;readinessProbe&quot;: { # 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.
                  &quot;failureThreshold&quot;: 42, # Minimum consecutive failures for the probe to be considered failed after
                      # having succeeded. Defaults to 3. Minimum value is 1. +optional
                  &quot;initialDelaySeconds&quot;: 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
                  &quot;timeoutSeconds&quot;: 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
                  &quot;handler&quot;: { # Handler defines a specific action that should be taken # The action taken to determine the health of a container
                    &quot;exec&quot;: { # ExecAction describes a &quot;run in container&quot; action. # One and only one of the following should be specified.
                        # Exec specifies the action to take.
                        # +optional
                      &quot;command&quot;: &quot;A String&quot;, # Command is the command line to execute inside the container, the working
                          # directory for the command  is root (&#x27;/&#x27;) in the container&#x27;s filesystem. The
                          # command is simply exec&#x27;d, it is not run inside a shell, so traditional
                          # shell instructions (&#x27;|&#x27;, etc) won&#x27;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
                    },
                    &quot;httpGet&quot;: { # HTTPGetAction describes an action based on HTTP Get requests. # HTTPGet specifies the http request to perform.
                        # +optional
                      &quot;httpHeaders&quot;: [ # Custom headers to set in the request. HTTP allows repeated headers.
                          # +optional
                        { # HTTPHeader describes a custom header to be used in HTTP probes
                          &quot;value&quot;: &quot;A String&quot;, # The header field value
                          &quot;name&quot;: &quot;A String&quot;, # The header field name
                        },
                      ],
                      &quot;path&quot;: &quot;A String&quot;, # Path to access on the HTTP server.
                          # +optional
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Host name to connect to, defaults to the pod IP. You probably want to set
                          # &quot;Host&quot; in httpHeaders instead.
                          # +optional
                      &quot;scheme&quot;: &quot;A String&quot;, # Scheme to use for connecting to the host.
                          # Defaults to HTTP.
                          # +optional
                    },
                    &quot;tcpSocket&quot;: { # TCPSocketAction describes an action based on opening a socket # TCPSocket specifies an action involving a TCP port.
                        # TCP hooks not yet supported
                      &quot;port&quot;: { # 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.
                        &quot;type&quot;: 42, # The type of the value.
                        &quot;intVal&quot;: 42, # The int value.
                        &quot;strVal&quot;: &quot;A String&quot;, # The string value.
                      },
                      &quot;host&quot;: &quot;A String&quot;, # Optional: Host name to connect to, defaults to the pod IP.
                          # +optional
                    },
                  },
                  &quot;successThreshold&quot;: 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
                  &quot;periodSeconds&quot;: 42, # How often (in seconds) to perform the probe.
                      # Default to 10 seconds. Minimum value is 1.
                      # +optional
                },
                &quot;imagePullPolicy&quot;: &quot;A String&quot;, # 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
              },
              &quot;timeoutSeconds&quot;: 42, # TimeoutSeconds holds the max duration the instance is allowed for
                  # responding to a request.
                  # Not currently used by Cloud Run.
              &quot;volumes&quot;: [
                { # Volume represents a named volume in a container.
                  &quot;configMap&quot;: { # Adapts a ConfigMap into a volume.
                      # The contents of the target ConfigMap&#x27;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.
                    &quot;name&quot;: &quot;A String&quot;, # Name of the config.
                    &quot;defaultMode&quot;: 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.
                    &quot;items&quot;: [ # 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.
                        &quot;key&quot;: &quot;A String&quot;, # The key to project.
                        &quot;path&quot;: &quot;A String&quot;, # The relative path of the file to map the key to.
                            # May not be an absolute path.
                            # May not contain the path element &#x27;..&#x27;.
                            # May not start with the string &#x27;..&#x27;.
                        &quot;mode&quot;: 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
                      },
                    ],
                    &quot;optional&quot;: True or False, # Specify whether the Secret or its keys must be defined.
                  },
                  &quot;name&quot;: &quot;A String&quot;, # Volume&#x27;s name.
                  &quot;secret&quot;: { # The contents of the target Secret&#x27;s Data field will be presented in a volume
                      # as files using the keys in the Data field as the file names.
                    &quot;optional&quot;: True or False, # Specify whether the Secret or its keys must be defined.
                    &quot;defaultMode&quot;: 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.
                    &quot;secretName&quot;: &quot;A String&quot;, # Name of the secret in the container&#x27;s namespace to use.
                    &quot;items&quot;: [ # 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.
                        &quot;key&quot;: &quot;A String&quot;, # The key to project.
                        &quot;path&quot;: &quot;A String&quot;, # The relative path of the file to map the key to.
                            # May not be an absolute path.
                            # May not contain the path element &#x27;..&#x27;.
                            # May not start with the string &#x27;..&#x27;.
                        &quot;mode&quot;: 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
                      },
                    ],
                  },
                },
              ],
            },
          },
          &quot;generation&quot;: 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.
        },
        &quot;kind&quot;: &quot;A String&quot;, # The kind of resource, in this case always &quot;Configuration&quot;.
        &quot;metadata&quot;: { # ObjectMeta is metadata that all persisted resources must have, which includes # Metadata associated with this Configuration, including name, namespace,
            # labels, and annotations.
            # all objects users must create.
          &quot;annotations&quot;: { # 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
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;generateName&quot;: &quot;A String&quot;, # 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;
          &quot;name&quot;: &quot;A String&quot;, # 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
          &quot;clusterName&quot;: &quot;A String&quot;, # 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
          &quot;deletionGracePeriodSeconds&quot;: 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
          &quot;finalizers&quot;: [ # 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
            &quot;A String&quot;,
          ],
          &quot;deletionTimestamp&quot;: &quot;A String&quot;, # 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
          &quot;ownerReferences&quot;: [ # 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.
              &quot;apiVersion&quot;: &quot;A String&quot;, # API version of the referent.
              &quot;name&quot;: &quot;A String&quot;, # Name of the referent.
                  # More info: http://kubernetes.io/docs/user-guide/identifiers#names
              &quot;uid&quot;: &quot;A String&quot;, # UID of the referent.
                  # More info: http://kubernetes.io/docs/user-guide/identifiers#uids
              &quot;controller&quot;: True or False, # If true, this reference points to the managing controller.
                  # +optional
              &quot;kind&quot;: &quot;A String&quot;, # Kind of the referent.
                  # More info:
                  # https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
              &quot;blockOwnerDeletion&quot;: True or False, # If true, AND if the owner has the &quot;foregroundDeletion&quot; 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 &quot;delete&quot; permission of the owner,
                  # otherwise 422 (Unprocessable Entity) will be returned.
                  # +optional
            },
          ],
          &quot;creationTimestamp&quot;: &quot;A String&quot;, # 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
          &quot;labels&quot;: { # 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
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;generation&quot;: 42, # A sequence number representing a specific generation of the desired state.
              # Populated by the system. Read-only.
              # +optional
          &quot;resourceVersion&quot;: &quot;A String&quot;, # 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
          &quot;uid&quot;: &quot;A String&quot;, # 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
          &quot;selfLink&quot;: &quot;A String&quot;, # SelfLink is a URL representing this object.
              # Populated by the system.
              # Read-only.
              # +optional
              #  string selfLink = 4;
          &quot;namespace&quot;: &quot;A String&quot;, # 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.
        },
        &quot;status&quot;: { # ConfigurationStatus communicates the observed state of the Configuration # Status communicates the observed state of the Configuration (from the
            # controller).
            # (from the controller).
          &quot;conditions&quot;: [ # Conditions communicates information about ongoing/complete
              # reconciliation processes that bring the &quot;spec&quot; inline with the observed
              # state of the world.
            { # ConfigurationCondition defines a readiness condition for a Configuration.
              &quot;message&quot;: &quot;A String&quot;, # Human-readable message indicating details about last transition.
                  # +optional
              &quot;lastTransitionTime&quot;: &quot;A String&quot;, # Last time the condition transitioned from one status to another.
                  # +optional
              &quot;status&quot;: &quot;A String&quot;, # Status of the condition, one of True, False, Unknown.
              &quot;severity&quot;: &quot;A String&quot;, # How to interpret failures of this condition, one of Error, Warning, Info
                  # +optional
              &quot;reason&quot;: &quot;A String&quot;, # One-word CamelCase reason for the condition&#x27;s last transition.
                  # +optional
              &quot;type&quot;: &quot;A String&quot;, # ConfigurationConditionType 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:&quot;Ready&quot;
            },
          ],
          &quot;observedGeneration&quot;: 42, # ObservedGeneration is the &#x27;Generation&#x27; of the Configuration that
              # was last processed by the controller. The observed generation is updated
              # even if the controller failed to process the spec and create the Revision.
              #
              # Clients polling for completed reconciliation should poll until
              # observedGeneration = metadata.generation, and the Ready condition&#x27;s status
              # is True or False.
          &quot;latestCreatedRevisionName&quot;: &quot;A String&quot;, # LatestCreatedRevisionName is the last revision that was created from this
              # Configuration. It might not be ready yet, for that use
              # LatestReadyRevisionName.
          &quot;latestReadyRevisionName&quot;: &quot;A String&quot;, # LatestReadyRevisionName holds the name of the latest Revision stamped out
              # from this Configuration that has had its &quot;Ready&quot; condition become &quot;True&quot;.
        },
      },
    ],
    &quot;apiVersion&quot;: &quot;A String&quot;, # The API version for this call such as &quot;serving.knative.dev/v1alpha1&quot;.
    &quot;kind&quot;: &quot;A String&quot;, # The kind of this resource, in this case &quot;ConfigurationList&quot;.
    &quot;unreachable&quot;: [ # Locations that could not be reached.
      &quot;A String&quot;,
    ],
  }</pre>
</div>

</body></html>