{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/cloud-run-spec-v1/latest.json",
  "title": "Cloud Run Admin API",
  "x-lintel": {
    "source": "https://www.schemastore.org/cloud-run-v1.json",
    "sourceSha256": "6a59cf1ab15205fc09e926d705c5d2c15e00a4e801d99244fb836cbb1b6c7db0",
    "fileMatch": [
      "cloud-run-v1.yml",
      "cloud-run-v1.yaml"
    ],
    "parsers": [
      "yaml"
    ]
  },
  "type": "object",
  "$defs": {
    "Revision": {
      "description": "Revision is an immutable snapshot of code and configuration. A revision references a container image. Revisions are created by updates to a Configuration. See also: <https://github.com/knative/specs/blob/main/specs/serving/overview.md#revision>",
      "type": "object",
      "properties": {
        "apiVersion": {
          "description": "The API version for this call such as \"serving.knative.dev/v1\".",
          "type": "string"
        },
        "kind": {
          "description": "The kind of this resource, in this case \"Revision\".",
          "const": "Revision"
        },
        "metadata": {
          "$ref": "#/$defs/ObjectMeta",
          "description": "Metadata associated with this Revision, including name, namespace, labels, and annotations."
        },
        "spec": {
          "$ref": "#/$defs/RevisionSpec",
          "description": "Spec holds the desired state of the Revision (from the client)."
        },
        "status": {
          "$ref": "#/$defs/RevisionStatus",
          "description": "Status communicates the observed state of the Revision (from the controller)."
        }
      },
      "additionalProperties": false
    },
    "ObjectMeta": {
      "description": "google.cloud.run.meta.v1.ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Required. The name of the resource. Name is required when creating top-level resources (Service, Job), must be unique within a Cloud Run project/region, and cannot be changed once created.",
          "type": "string"
        },
        "namespace": {
          "description": "Required. Defines the space within each name must be unique within a Cloud Run region. In Cloud Run, it must be project ID or number.",
          "type": "string"
        },
        "selfLink": {
          "description": "URL representing this object.",
          "type": "string"
        },
        "labels": {
          "description": "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.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "annotations": {
          "description": "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. In Cloud Run, annotations with 'run.googleapis.com/' and 'autoscaling.knative.dev' are restricted, and the accepted annotations will be different depending on the resource type. * `autoscaling.knative.dev/maxScale`: Revision. * `autoscaling.knative.dev/minScale`: Revision. * `run.googleapis.com/base-images`: Service, Revision. * `run.googleapis.com/binary-authorization-breakglass`: Service, Job, * `run.googleapis.com/binary-authorization`: Service, Job, Execution. * `run.googleapis.com/build-base-image`: Service. * `run.googleapis.com/build-environment-variables`: Service. * `run.googleapis.com/build-id`: Service. * `run.googleapis.com/build-name`: Service. * `run.googleapis.com/build-service-account`: Service. * `run.googleapis.com/build-worker-pool`: Service. * `run.googleapis.com/client-name`: All resources. * `run.googleapis.com/cloudsql-instances`: Revision, Execution. * `run.googleapis.com/container-dependencies`: Revision . * `run.googleapis.com/cpu-throttling`: Revision. * `run.googleapis.com/custom-audiences`: Service. * `run.googleapis.com/default-url-disabled`: Service. * `run.googleapis.com/description`: Service. * `run.googleapis.com/enable-automatic-updates`: Service. * `run.googleapis.com/encryption-key-shutdown-hours`: Revision * `run.googleapis.com/encryption-key`: Revision, Execution. * `run.googleapis.com/execution-environment`: Revision, Execution. * `run.googleapis.com/function-target`: Service. * `run.googleapis.com/gc-traffic-tags`: Service. * `run.googleapis.com/image-uri`: Service. * `run.googleapis.com/ingress`: Service. * `run.googleapis.com/launch-stage`: Service, Job. * `run.googleapis.com/minScale`: Service (ALPHA) * `run.googleapis.com/network-interfaces`: Revision, Execution. * `run.googleapis.com/post-key-revocation-action-type`: Revision. * `run.googleapis.com/secrets`: Revision, Execution. * `run.googleapis.com/secure-session-agent`: Revision. * `run.googleapis.com/sessionAffinity`: Revision. * `run.googleapis.com/source-location`: Service. * `run.googleapis.com/startup-cpu-boost`: Revision. * `run.googleapis.com/vpc-access-connector`: Revision, Execution. * `run.googleapis.com/vpc-access-egress`: Revision, Execution.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "RevisionSpec": {
      "description": "RevisionSpec holds the desired state of the Revision (from the client).",
      "type": "object",
      "required": [
        "containers"
      ],
      "properties": {
        "containerConcurrency": {
          "description": "ContainerConcurrency specifies the maximum allowed in-flight (concurrent) requests per container instance of the Revision. If not specified or 0, defaults to 80 when requested CPU >= 1 and defaults to 1 when requested CPU < 1.",
          "type": "integer"
        },
        "timeoutSeconds": {
          "description": "TimeoutSeconds holds the max duration the instance is allowed for responding to a request. Cloud Run: defaults to 300 seconds (5 minutes). Maximum allowed value is 3600 seconds (1 hour).",
          "type": "integer",
          "maximum": 3600
        },
        "serviceAccountName": {
          "description": "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's default service account.",
          "type": "string"
        },
        "containers": {
          "description": "Required. Containers holds the list which define the units of execution for this Revision. In the context of a Revision, we disallow a number of fields on this Container, including: name and lifecycle.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Container"
          }
        },
        "volumes": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Volume"
          }
        },
        "runtimeClassName": {
          "description": "Runtime. Leave unset for default.",
          "type": "string"
        },
        "nodeSelector": {
          "description": "Optional. The Node Selector configuration. Map of selector key to a value which matches a node.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "Container": {
      "description": "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.",
      "type": "object",
      "required": [
        "image"
      ],
      "properties": {
        "name": {
          "description": "Name of the container specified as a DNS_LABEL (RFC 1123).",
          "type": "string"
        },
        "image": {
          "description": "Required. Name of the container image in Dockerhub, Google Artifact Registry, or Google Container Registry. If the host is not provided, Dockerhub is assumed.",
          "type": "string"
        },
        "command": {
          "description": "Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references are not supported in Cloud Run.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "args": {
          "description": "Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references are not supported in Cloud Run.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "env": {
          "description": "List of environment variables to set in the container. EnvVar with duplicate names are generally allowed; if referencing a secret, the name must be unique for the container. For non-secret EnvVar names, the Container will only get the last-declared one.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/EnvVar"
          }
        },
        "resources": {
          "$ref": "#/$defs/ResourceRequirements",
          "description": "Compute Resources required by this container."
        },
        "workingDir": {
          "description": "Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image.",
          "type": "string"
        },
        "ports": {
          "description": "List of ports to expose from the container. Only a single port can be specified. The specified ports must be listening on all interfaces (0.0.0.0) within the container to be accessible. If omitted, a port number will be chosen and passed to the container through the PORT environment variable for the container to listen on.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/ContainerPort"
          }
        },
        "volumeMounts": {
          "description": "Volume to mount into the container's filesystem. Only supports SecretVolumeSources. Pod volumes to mount into the container's filesystem.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/VolumeMount"
          }
        },
        "livenessProbe": {
          "$ref": "#/$defs/Probe",
          "description": "Periodic probe of container liveness. Container will be restarted if the probe fails."
        },
        "startupProbe": {
          "$ref": "#/$defs/Probe",
          "description": "Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not receive traffic if the probe fails. If not provided, a default startup probe with TCP socket action is used."
        },
        "terminationMessagePath": {
          "description": "Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log.",
          "type": "string"
        },
        "terminationMessagePolicy": {
          "description": "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.",
          "type": "string"
        },
        "imagePullPolicy": {
          "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.",
          "enum": [
            "Always",
            "Never",
            "IfNotPresent"
          ]
        }
      },
      "additionalProperties": false
    },
    "EnvVar": {
      "description": "EnvVar represents an environment variable present in a Container.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Required. Name of the environment variable.",
          "type": "string"
        },
        "value": {
          "description": "Value of the environment variable. Defaults to \"\". Variable references are not supported in Cloud Run.",
          "type": "string"
        },
        "valueFrom": {
          "$ref": "#/$defs/EnvVarSource",
          "description": "Source for the environment variable's value. Only supports secret_key_ref. Cannot be used if value is not empty."
        }
      },
      "additionalProperties": false
    },
    "EnvVarSource": {
      "description": "EnvVarSource represents a source for the value of an EnvVar.",
      "type": "object",
      "properties": {
        "secretKeyRef": {
          "$ref": "#/$defs/SecretKeySelector",
          "description": "Selects a key (version) of a secret in Secret Manager."
        }
      },
      "additionalProperties": false
    },
    "SecretKeySelector": {
      "description": "SecretKeySelector selects a key of a Secret.",
      "type": "object",
      "required": [
        "name",
        "key"
      ],
      "properties": {
        "key": {
          "description": "Required. A Cloud Secret Manager secret version. Must be 'latest' for the latest version, an integer for a specific version, or a version alias. The key of the secret to select from. Must be a valid secret key.",
          "type": "string"
        },
        "optional": {
          "description": "Specify whether the Secret or its key must be defined.",
          "type": "boolean"
        },
        "name": {
          "description": "The name of the secret in Cloud Secret Manager. By default, the secret is assumed to be in the same project. If the secret is in another project, you must define an alias. An alias definition has the form: :projects//secrets/. If multiple alias definitions are needed, they must be separated by commas. The alias definitions must be set on the run.googleapis.com/secrets annotation. The name of the secret in the pod's namespace to select from.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "ResourceRequirements": {
      "description": "ResourceRequirements describes the compute resource requirements.",
      "type": "object",
      "properties": {
        "limits": {
          "description": "Limits describes the maximum amount of compute resources allowed. Only 'cpu' and 'memory' keys are supported. * For supported 'cpu' values, go to <https://cloud.google.com/run/docs/configuring/cpu>. * For supported 'memory' values and syntax, go to <https://cloud.google.com/run/docs/configuring/memory-limits>",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "requests": {
          "description": "Requests describes the minimum amount of compute resources required. Only `cpu` and `memory` are supported. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. * For supported 'cpu' values, go to <https://cloud.google.com/run/docs/configuring/cpu>. * For supported 'memory' values and syntax, go to <https://cloud.google.com/run/docs/configuring/memory-limits>",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "ContainerPort": {
      "description": "ContainerPort represents a network port in a single container.",
      "type": "object",
      "properties": {
        "name": {
          "description": "If specified, used to specify which protocol to use. Allowed values are \"http1\" and \"h2c\".",
          "type": "string"
        },
        "containerPort": {
          "description": "Port number the container listens on. If present, this must be a valid port number, 0 < x < 65536. If not present, it will default to port 8080. For more information, see <https://cloud.google.com/run/docs/container-contract#port>",
          "type": "integer",
          "minimum": 1,
          "maximum": 65535
        },
        "protocol": {
          "description": "Protocol for port. Must be \"TCP\". Defaults to \"TCP\".",
          "const": "TCP"
        }
      },
      "additionalProperties": false
    },
    "VolumeMount": {
      "description": "VolumeMount describes a mounting of a Volume within a container.",
      "type": "object",
      "required": [
        "name",
        "mountPath"
      ],
      "properties": {
        "name": {
          "description": "Required. The name of the volume. There must be a corresponding Volume with the same name.",
          "type": "string"
        },
        "mountPath": {
          "description": "Required. Path within the container at which the volume should be mounted. Must not contain ':'.",
          "type": "string"
        },
        "subPath": {
          "description": "Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "Probe": {
      "description": "Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.",
      "type": "object",
      "properties": {
        "initialDelaySeconds": {
          "description": "Number of seconds after the container has started before the probe is initiated. Defaults to 0 seconds. Minimum value is 0. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240.",
          "type": "integer",
          "minimum": 0
        },
        "timeoutSeconds": {
          "description": "Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. Maximum value is 3600. Must be smaller than period_seconds; if period_seconds is not set, must be less or equal than 10.",
          "type": "integer",
          "minimum": 1,
          "maximum": 3600
        },
        "periodSeconds": {
          "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240. Must be greater or equal than timeout_seconds.",
          "type": "integer",
          "minimum": 1,
          "maximum": 3600
        },
        "successThreshold": {
          "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Must be 1 if set.",
          "const": 1
        },
        "failureThreshold": {
          "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.",
          "type": "integer",
          "minimum": 1
        },
        "httpGet": {
          "$ref": "#/$defs/HTTPGetAction",
          "description": "HTTPGet specifies the http request to perform."
        },
        "tcpSocket": {
          "$ref": "#/$defs/TCPSocketAction",
          "description": "TCPSocket specifies an action involving a TCP port."
        },
        "grpc": {
          "$ref": "#/$defs/GRPCAction",
          "description": "GRPCAction specifies an action involving a GRPC port."
        }
      },
      "additionalProperties": false
    },
    "HTTPGetAction": {
      "description": "HTTPGetAction describes an action based on HTTP Get requests.",
      "type": "object",
      "properties": {
        "path": {
          "description": "Path to access on the HTTP server.",
          "type": "string"
        },
        "httpHeaders": {
          "description": "Custom headers to set in the request. HTTP allows repeated headers.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "port": {
          "description": "Port number to access on the container. Number must be in the range 1 to 65535.",
          "type": "integer"
        }
      }
    },
    "TCPSocketAction": {
      "description": "TCPSocketAction describes an action based on opening a socket",
      "type": "object",
      "properties": {
        "port": {
          "description": "Port number to access on the container. Number must be in the range 1 to 65535.",
          "type": "integer",
          "minimum": 1,
          "maximum": 65535
        }
      },
      "additionalProperties": false
    },
    "GRPCAction": {
      "description": "GRPCAction describes an action involving a GRPC port.",
      "type": "object",
      "properties": {
        "port": {
          "description": "Port number of the gRPC service. Number must be in the range 1 to 65535.",
          "type": "integer",
          "minimum": 1,
          "maximum": 65535
        },
        "service": {
          "description": "Service is the name of the service to place in the gRPC HealthCheckRequest. If this is not specified, the default behavior is defined by gRPC.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "Volume": {
      "description": "Volume represents a named volume in a container.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Volume's name. In Cloud Run Fully Managed, the name 'cloudsql' is reserved.",
          "type": "string"
        },
        "secret": {
          "$ref": "#/$defs/SecretVolumeSource",
          "description": "The secret's value will be presented as the content of a file whose name is defined in the item path. If no items are defined, the name of the file is the secretName."
        },
        "emptyDir": {
          "$ref": "#/$defs/EmptyDirVolumeSource",
          "description": "Ephemeral storage used as a shared volume."
        },
        "nfs": {
          "$ref": "#/$defs/NFSVolumeSource"
        },
        "csi": {
          "$ref": "#/$defs/CSIVolumeSource",
          "description": "Volume specified by the Container Storage Interface driver"
        }
      },
      "additionalProperties": false
    },
    "SecretVolumeSource": {
      "description": "A volume representing a secret stored in Google Secret Manager. The secret's value will be presented as the content of a file whose name is defined in the item path. If no items are defined, the name of the file is the secret_name. The contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names.",
      "type": "object",
      "properties": {
        "secretName": {
          "description": "The name of the secret in Cloud Secret Manager. By default, the secret is assumed to be in the same project. If the secret is in another project, you must define an alias. An alias definition has the form: :projects//secrets/. If multiple alias definitions are needed, they must be separated by commas. The alias definitions must be set on the run.googleapis.com/secrets annotation. Name of the secret in the container's namespace to use.",
          "type": "string"
        },
        "items": {
          "description": "A list of secret versions to mount in the volume. If no items are specified, the volume will expose a file with the same name as the secret name. The contents of the file will be the data in the latest version of the secret. If items are specified, the key will be used as the version to fetch from Cloud Secret Manager and the path will be the name of the file exposed in the volume. When items are defined, they must specify both a key and a path.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/KeyToPath"
          }
        },
        "defaultMode": {
          "description": "Integer representation of mode bits to use on created files by default. Must be a value between 01 and 0777 (octal). If 0 or not set, it will default to 0444. Directories within the path are not affected by this setting. Notes * Internally, a umask of 0222 will be applied to any non-zero value. * This is an integer representation of the mode bits. So, the octal integer value should look exactly as the chmod numeric notation with a leading zero. Some examples: for chmod 777 (a=rwx), set to 0777 (octal) or 511 (base-10). For chmod 640 (u=rw,g=r), set to 0640 (octal) or 416 (base-10). For chmod 755 (u=rwx,g=rx,o=rx), set to 0755 (octal) or 493 (base-10). * This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.",
          "type": "integer",
          "minimum": 1,
          "maximum": 511
        }
      },
      "additionalProperties": false
    },
    "KeyToPath": {
      "description": "Maps a string key to a path within a volume.",
      "type": "object",
      "properties": {
        "key": {
          "description": "The Cloud Secret Manager secret version. Can be 'latest' for the latest value, or an integer or a secret alias for a specific version. The key to project.",
          "type": "string"
        },
        "path": {
          "description": "The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.",
          "type": "string"
        },
        "mode": {
          "description": "(Optional) Mode bits to use on this file, must be a value between 01 and 0777 (octal). If 0 or not set, the Volume's default mode will be used. Notes * Internally, a umask of 0222 will be applied to any non-zero value. * This is an integer representation of the mode bits. So, the octal integer value should look exactly as the chmod numeric notation with a leading zero. Some examples: for chmod 777 (a=rwx), set to 0777 (octal) or 511 (base-10). For chmod 640 (u=rw,g=r), set to 0640 (octal) or 416 (base-10). For chmod 755 (u=rwx,g=rx,o=rx), set to 0755 (octal) or 493 (base-10). * This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.",
          "type": "integer"
        }
      },
      "additionalProperties": false
    },
    "EmptyDirVolumeSource": {
      "description": "In memory (tmpfs) ephemeral storage. It is ephemeral in the sense that when the sandbox is taken down, the data is destroyed with it (it does not persist across sandbox runs).",
      "type": "object",
      "properties": {
        "medium": {
          "description": "The medium on which the data is stored. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: <https://kubernetes.io/docs/concepts/storage/volumes#emptydir>",
          "enum": [
            "",
            "Memory"
          ]
        },
        "sizeLimit": {
          "description": "Limit on the storage usable by this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers. The default is nil which means that the limit is undefined. More info: <https://cloud.google.com/run/docs/configuring/in-memory-volumes#configure-volume>. Info in Kubernetes: <https://kubernetes.io/docs/concepts/storage/volumes/#emptydir>",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "NFSVolumeSource": {
      "description": "Represents a persistent volume that will be mounted using NFS. This volume will be shared between all instances of the resource and data will not be deleted when the instance is shut down.",
      "type": "object",
      "properties": {
        "server": {
          "description": "Hostname or IP address of the NFS server.",
          "type": "string"
        },
        "path": {
          "description": "Path that is exported by the NFS server.",
          "type": "string"
        },
        "readOnly": {
          "description": "If true, mount the NFS volume as read only. Defaults to false.",
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "CSIVolumeSource": {
      "description": "Storage volume source using the Container Storage Interface.",
      "type": "object",
      "properties": {
        "driver": {
          "description": "name of the CSI driver for the requested storage system. Cloud Run supports the following drivers: * gcsfuse.run.googleapis.com : Mount a Cloud Storage Bucket as a volume.",
          "const": "gcsfuse.run.googleapis.com"
        },
        "readOnly": {
          "description": "If true, mount the volume as read only. Defaults to false.",
          "type": "boolean"
        },
        "volumeAttributes": {
          "description": "stores driver specific attributes. For Google Cloud Storage volumes, the following attributes are supported: * bucketName: the name of the Cloud Storage bucket to mount. The Cloud Run Service identity must have access to this bucket.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "RevisionStatus": {
      "description": "RevisionStatus communicates the observed state of the Revision (from the controller).",
      "type": "object",
      "properties": {
        "observedGeneration": {
          "description": "ObservedGeneration is the 'Generation' of the Revision that was last processed by the controller. Clients polling for completed reconciliation should poll until observedGeneration = metadata.generation, and the Ready condition's status is True or False.",
          "type": "integer"
        },
        "conditions": {
          "description": "Conditions communicate information about ongoing/complete reconciliation processes that bring the \"spec\" inline with the observed state of the world. As a Revision is being prepared, it will incrementally update conditions. Revision-specific conditions include: * `ResourcesAvailable`: `True` when underlying resources have been provisioned. * `ContainerHealthy`: `True` when the Revision readiness check completes. * `Active`: `True` when the Revision may receive traffic.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/GoogleCloudRunV1Condition"
          }
        },
        "logUrl": {
          "description": "Optional. Specifies the generated logging url for this particular revision based on the revision url template specified in the controller's config.",
          "type": "string"
        },
        "imageDigest": {
          "description": "ImageDigest holds the resolved digest for the image specified within .Spec.Container.Image. The digest is resolved during the creation of Revision. This field holds the digest value regardless of whether a tag or digest was originally specified in the Container object.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "GoogleCloudRunV1Condition": {
      "description": "Conditions show the status of reconciliation progress on a given resource. Most resource use a top-level condition type \"Ready\" or \"Completed\" to show overall status with other conditions to checkpoint each stage of reconciliation. Note that if metadata.Generation does not equal status.ObservedGeneration, the conditions shown may not be relevant for the current spec.",
      "type": "object",
      "properties": {
        "type": {
          "description": "type is used to communicate the status of the reconciliation process. Types common to all resources include: * \"Ready\" or \"Completed\": True when the Resource is ready.",
          "type": "string"
        },
        "status": {
          "description": "Status of the condition, one of True, False, Unknown.",
          "enum": [
            "True",
            "False",
            "Unknown"
          ]
        },
        "reason": {
          "description": "Optional. One-word CamelCase reason for the condition's last transition. These are intended to be stable, unique values which the client may use to trigger error handling logic, whereas messages which may be changed later by the server.",
          "type": "string"
        },
        "message": {
          "description": "Optional. Human readable message indicating details about the current status.",
          "type": "string"
        },
        "lastTransitionTime": {
          "description": "Optional. Last time the condition transitioned from one status to another.",
          "type": "string",
          "format": "date-time"
        },
        "severity": {
          "description": "Optional. How to interpret this condition. One of Error, Warning, or Info. Conditions of severity Info do not contribute to resource readiness.",
          "enum": [
            "Error",
            "Warning",
            "Info"
          ]
        }
      },
      "additionalProperties": false
    },
    "Configuration": {
      "description": "Configuration represents the \"floating HEAD\" of a linear history of Revisions, and optionally how the containers those revisions reference are built. Users create new Revisions by updating the Configuration's spec. The \"latest created\" revision's name is available under status, as is the \"latest ready\" revision's name.",
      "type": "object",
      "properties": {
        "apiVersion": {
          "description": "The API version for this call such as \"serving.knative.dev/v1\".",
          "type": "string"
        },
        "kind": {
          "description": "The kind of resource, in this case always \"Configuration\".",
          "const": "Configuration"
        },
        "metadata": {
          "$ref": "#/$defs/ObjectMeta",
          "description": "Metadata associated with this Configuration, including name, namespace, labels, and annotations."
        },
        "spec": {
          "$ref": "#/$defs/ConfigurationSpec",
          "description": "Spec holds the desired state of the Configuration (from the client)."
        },
        "status": {
          "$ref": "#/$defs/ConfigurationStatus",
          "description": "Status communicates the observed state of the Configuration (from the controller)."
        }
      },
      "additionalProperties": false
    },
    "ConfigurationSpec": {
      "description": "ConfigurationSpec holds the desired state of the Configuration (from the client).",
      "type": "object",
      "properties": {
        "template": {
          "$ref": "#/$defs/RevisionTemplate",
          "description": "Template holds the latest specification for the Revision to be stamped out."
        }
      },
      "additionalProperties": false
    },
    "RevisionTemplate": {
      "description": "RevisionTemplateSpec describes the data a revision should have when created from a template.",
      "type": "object",
      "properties": {
        "metadata": {
          "$ref": "#/$defs/ObjectMeta",
          "description": "Optional metadata for this Revision, including labels and annotations. Name will be generated by the Configuration. The following annotation keys set properties of the created revision: * `autoscaling.knative.dev/minScale` sets the minimum number of instances. * `autoscaling.knative.dev/maxScale` sets the maximum number of instances. * `run.googleapis.com/cloudsql-instances` sets Cloud SQL connections. Multiple values should be comma separated. * `run.googleapis.com/vpc-access-connector` sets a Serverless VPC Access connector. * `run.googleapis.com/vpc-access-egress` sets VPC egress. Supported values are `all-traffic`, `all` (deprecated), and `private-ranges-only`. `all-traffic` and `all` provide the same functionality. `all` is deprecated but will continue to be supported. Prefer `all-traffic`."
        },
        "spec": {
          "$ref": "#/$defs/RevisionSpec",
          "description": "RevisionSpec holds the desired state of the Revision (from the client)."
        }
      },
      "additionalProperties": false
    },
    "ConfigurationStatus": {
      "description": "ConfigurationStatus communicates the observed state of the Configuration (from the controller).",
      "type": "object",
      "properties": {
        "observedGeneration": {
          "description": "ObservedGeneration is the 'Generation' 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's status is True or False.",
          "type": "integer"
        },
        "latestCreatedRevisionName": {
          "description": "LatestCreatedRevisionName is the last revision that was created from this Configuration. It might not be ready yet, so for the latest ready revision, use LatestReadyRevisionName.",
          "type": "string"
        },
        "latestReadyRevisionName": {
          "description": "LatestReadyRevisionName holds the name of the latest Revision stamped out from this Configuration that has had its \"Ready\" condition become \"True\".",
          "type": "string"
        },
        "conditions": {
          "description": "Conditions communicate information about ongoing/complete reconciliation processes that bring the \"spec\" inline with the observed state of the world.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/GoogleCloudRunV1Condition"
          }
        }
      },
      "additionalProperties": false
    },
    "DomainMapping": {
      "description": "Resource to hold the state and status of a user's domain mapping. NOTE: This resource is currently in Beta.",
      "type": "object",
      "properties": {
        "apiVersion": {
          "description": "The API version for this call such as \"domains.cloudrun.com/v1\".",
          "type": "string"
        },
        "kind": {
          "description": "The kind of resource, in this case \"DomainMapping\".",
          "const": "DomainMapping"
        },
        "metadata": {
          "$ref": "#/$defs/ObjectMeta",
          "description": "Metadata associated with this BuildTemplate."
        },
        "spec": {
          "$ref": "#/$defs/DomainMappingSpec",
          "description": "The spec for this DomainMapping."
        },
        "status": {
          "$ref": "#/$defs/DomainMappingStatus",
          "description": "The current status of the DomainMapping."
        }
      },
      "additionalProperties": false
    },
    "DomainMappingSpec": {
      "description": "The desired state of the Domain Mapping.",
      "type": "object",
      "properties": {
        "routeName": {
          "description": "The name of the Knative Route that this DomainMapping applies to. The route must exist.",
          "type": "string"
        },
        "certificateMode": {
          "description": "The mode of the certificate.",
          "type": "string",
          "anyOf": [
            {
              "const": "CERTIFICATE_MODE_UNSPECIFIED",
              "title": ""
            },
            {
              "const": "NONE",
              "title": "Do not provision an HTTPS certificate."
            },
            {
              "const": "AUTOMATIC",
              "title": "Automatically provisions an HTTPS certificate via GoogleCA."
            }
          ]
        },
        "forceOverride": {
          "description": "If set, the mapping will override any mapping set before this spec was set. It is recommended that the user leaves this empty to receive an error warning about a potential conflict and only set it once the respective UI has given such a warning.",
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "DomainMappingStatus": {
      "description": "The current state of the Domain Mapping.",
      "type": "object",
      "properties": {
        "conditions": {
          "description": "Array of observed DomainMappingConditions, indicating the current state of the DomainMapping.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/GoogleCloudRunV1Condition"
          }
        },
        "observedGeneration": {
          "description": "ObservedGeneration is the 'Generation' of the DomainMapping that was last processed by the controller. Clients polling for completed reconciliation should poll until observedGeneration = metadata.generation and the Ready condition's status is True or False.",
          "type": "integer"
        },
        "resourceRecords": {
          "description": "The resource records required to configure this domain mapping. These records must be added to the domain's DNS configuration in order to serve the application via this domain mapping.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/ResourceRecord"
          }
        },
        "mappedRouteName": {
          "description": "The name of the route that the mapping currently points to.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "ResourceRecord": {
      "description": "A DNS resource record.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Relative name of the object affected by this record. Only applicable for `CNAME` records. Example: 'www'.",
          "type": "string"
        },
        "rrdata": {
          "description": "Data for this record. Values vary by record type, as defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1).",
          "type": "string"
        },
        "type": {
          "description": "Resource record type. Example: `AAAA`.",
          "type": "string",
          "anyOf": [
            {
              "const": "RECORD_TYPE_UNSPECIFIED",
              "title": "An unknown resource record."
            },
            {
              "const": "A",
              "title": "An A resource record. Data is an IPv4 address."
            },
            {
              "const": "AAAA",
              "title": "An AAAA resource record. Data is an IPv6 address."
            },
            {
              "const": "CNAME",
              "title": "A CNAME resource record. Data is a domain name to be aliased."
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "Task": {
      "description": "Task represents a single run of a container to completion.",
      "type": "object",
      "properties": {
        "apiVersion": {
          "description": "Optional. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.",
          "type": "string"
        },
        "kind": {
          "description": "Optional. Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.",
          "const": "Task"
        },
        "metadata": {
          "$ref": "#/$defs/ObjectMeta",
          "description": "Optional. Standard object's metadata."
        },
        "spec": {
          "$ref": "#/$defs/TaskSpec",
          "description": "Optional. Specification of the desired behavior of a task."
        }
      },
      "additionalProperties": false
    },
    "TaskSpec": {
      "description": "TaskSpec is a description of a task.",
      "type": "object",
      "properties": {
        "volumes": {
          "description": "Optional. List of volumes that can be mounted by containers belonging to the task.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Volume"
          }
        },
        "containers": {
          "description": "Optional. List of containers belonging to the task. We disallow a number of fields on this Container.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/Container"
          }
        },
        "maxRetries": {
          "description": "Optional. Number of retries allowed per task, before marking this job failed. Defaults to 3.",
          "type": "integer"
        },
        "timeoutSeconds": {
          "description": "Optional. Duration in seconds the task may be active before the system will actively try to mark it failed and kill associated containers. This applies per attempt of a task, meaning each retry can run for the full timeout. Defaults to 600 seconds.",
          "type": "string"
        },
        "serviceAccountName": {
          "description": "Optional. Email address of the IAM service account associated with the task of a job execution. The service account represents the identity of the running task, and determines what permissions the task has. If not provided, the task will use the project's default service account.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "Execution": {
      "description": "Execution represents the configuration of a single execution. An execution is an immutable resource that references a container image which is run to completion.",
      "type": "object",
      "properties": {
        "apiVersion": {
          "description": "Optional. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.",
          "type": "string"
        },
        "kind": {
          "description": "Optional. Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.",
          "const": "Execution"
        },
        "metadata": {
          "$ref": "#/$defs/ObjectMeta",
          "description": "Optional. Standard object's metadata."
        },
        "spec": {
          "$ref": "#/$defs/ExecutionSpec",
          "description": "Optional. Specification of the desired behavior of an execution."
        }
      },
      "additionalProperties": false
    },
    "ExecutionSpec": {
      "description": "ExecutionSpec describes how the execution will look.",
      "type": "object",
      "properties": {
        "parallelism": {
          "description": "Optional. Specifies the maximum desired number of tasks the execution should run at given time. Must be <= task_count. When the job is run, if this field is 0 or unset, the maximum possible value will be used for that execution. The actual number of tasks running in steady state will be less than this number when there are fewer tasks waiting to be completed, i.e. when the work left to do is less than max parallelism.",
          "type": "integer"
        },
        "taskCount": {
          "description": "Optional. Specifies the desired number of tasks the execution should run. Setting to 1 means that parallelism is limited to 1 and the success of that task signals the success of the execution. Defaults to 1.",
          "type": "integer"
        },
        "template": {
          "$ref": "#/$defs/TaskTemplateSpec",
          "description": "Optional. The template used to create tasks for this execution."
        }
      },
      "additionalProperties": false
    },
    "TaskTemplateSpec": {
      "description": "TaskTemplateSpec describes the data a task should have when created from a template.",
      "type": "object",
      "properties": {
        "spec": {
          "$ref": "#/$defs/TaskSpec",
          "description": "Optional. Specification of the desired behavior of the task."
        }
      },
      "additionalProperties": false
    },
    "Job": {
      "description": "Job represents the configuration of a single job, which references a container image which is run to completion.",
      "type": "object",
      "properties": {
        "apiVersion": {
          "description": "Optional. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.",
          "type": "string"
        },
        "kind": {
          "description": "Optional. Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.",
          "const": "Job"
        },
        "metadata": {
          "$ref": "#/$defs/ObjectMeta",
          "description": "Optional. Standard object's metadata."
        },
        "spec": {
          "$ref": "#/$defs/JobSpec",
          "description": "Optional. Specification of the desired behavior of a job."
        }
      },
      "additionalProperties": false
    },
    "JobSpec": {
      "description": "JobSpec describes how the job will look.",
      "type": "object",
      "properties": {
        "template": {
          "$ref": "#/$defs/ExecutionTemplateSpec",
          "description": "Optional. Describes the execution that will be created when running a job."
        },
        "startExecutionToken": {
          "description": "A unique string used as a suffix for creating a new execution. The Job will become ready when the execution is successfully started. The sum of job name and token length must be fewer than 63 characters.",
          "type": "string"
        },
        "runExecutionToken": {
          "description": "A unique string used as a suffix for creating a new execution. The Job will become ready when the execution is successfully completed. The sum of job name and token length must be fewer than 63 characters.",
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "ExecutionTemplateSpec": {
      "description": "ExecutionTemplateSpec describes the metadata and spec an Execution should have when created from a job.",
      "type": "object",
      "required": [
        "spec"
      ],
      "properties": {
        "metadata": {
          "$ref": "#/$defs/ObjectMeta",
          "description": "Optional. Optional metadata for this Execution, including labels and annotations. The following annotation keys set properties of the created execution: * `run.googleapis.com/cloudsql-instances` sets Cloud SQL connections. Multiple values should be comma separated. * `run.googleapis.com/vpc-access-connector` sets a Serverless VPC Access connector. * `run.googleapis.com/vpc-access-egress` sets VPC egress. Supported values are `all-traffic`, `all` (deprecated), and `private-ranges-only`. `all-traffic` and `all` provide the same functionality. `all` is deprecated but will continue to be supported. Prefer `all-traffic`."
        },
        "spec": {
          "$ref": "#/$defs/ExecutionSpec",
          "description": "Required. ExecutionSpec holds the desired configuration for executions of this job."
        }
      },
      "additionalProperties": false
    },
    "Route": {
      "description": "Route is responsible for configuring ingress over a collection of Revisions. Some of the Revisions a Route distributes traffic over may be specified by referencing the Configuration responsible for creating them; in these cases the Route is additionally responsible for monitoring the Configuration for \"latest ready\" revision changes, and smoothly rolling out latest revisions. Cloud Run currently supports referencing a single Configuration to automatically deploy the \"latest ready\" Revision from that Configuration.",
      "type": "object",
      "properties": {
        "apiVersion": {
          "description": "The API version for this call such as \"serving.knative.dev/v1\".",
          "type": "string"
        },
        "kind": {
          "description": "The kind of this resource, in this case always \"Route\".",
          "const": "Route"
        },
        "metadata": {
          "$ref": "#/$defs/ObjectMeta",
          "description": "Metadata associated with this Route, including name, namespace, labels, and annotations."
        },
        "spec": {
          "$ref": "#/$defs/RouteSpec",
          "description": "Spec holds the desired state of the Route (from the client)."
        },
        "status": {
          "$ref": "#/$defs/RouteStatus",
          "description": "Status communicates the observed state of the Route (from the controller)."
        }
      },
      "additionalProperties": false
    },
    "RouteSpec": {
      "description": "RouteSpec holds the desired state of the Route (from the client).",
      "type": "object",
      "properties": {
        "traffic": {
          "description": "Traffic specifies how to distribute traffic over a collection of Knative Revisions and Configurations. Cloud Run currently supports a single configurationName.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/TrafficTarget"
          }
        }
      },
      "additionalProperties": false
    },
    "TrafficTarget": {
      "description": "TrafficTarget holds a single entry of the routing table for a Route.",
      "type": "object",
      "properties": {
        "revisionName": {
          "description": "Points this traffic target to a specific Revision. This field is mutually exclusive with latest_revision.",
          "type": "string"
        },
        "percent": {
          "description": "Percent specifies percent of the traffic to this Revision or Configuration. This defaults to zero if unspecified.",
          "type": "integer"
        },
        "tag": {
          "description": "Tag is used to expose a dedicated url for referencing this target exclusively.",
          "type": "string"
        },
        "latestRevision": {
          "description": "Uses the \"status.latestReadyRevisionName\" of the Service to determine the traffic target. When it changes, traffic will automatically migrate from the prior \"latest ready\" revision to the new one. This field must be false if RevisionName is set. This field defaults to true otherwise. If the field is set to true on Status, this means that the Revision was resolved from the Service's latest ready revision.",
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "RouteStatus": {
      "description": "RouteStatus communicates the observed state of the Route (from the controller).",
      "type": "object",
      "properties": {
        "observedGeneration": {
          "description": "ObservedGeneration is the 'Generation' of the Route that was last processed by the controller. Clients polling for completed reconciliation should poll until observedGeneration = metadata.generation and the Ready condition's status is True or False. Note that providing a TrafficTarget that has latest_revision=True will result in a Route that does not increment either its metadata.generation or its observedGeneration, as new \"latest ready\" revisions from the Configuration are processed without an update to the Route's spec.",
          "type": "integer"
        },
        "conditions": {
          "description": "Conditions communicates information about ongoing/complete reconciliation processes that bring the \"spec\" inline with the observed state of the world.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/GoogleCloudRunV1Condition"
          }
        },
        "traffic": {
          "description": "Traffic holds the configured traffic distribution. These entries will always contain RevisionName references. When ConfigurationName appears in the spec, this will hold the LatestReadyRevisionName that was last observed.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/TrafficTarget"
          }
        },
        "url": {
          "description": "URL holds the url that will distribute traffic over the provided traffic targets. It generally has the form: `<https://{route-hash}-{project-hash}-{cluster-level-suffix}.a.run.app>`",
          "type": "string"
        },
        "address": {
          "$ref": "#/$defs/Addressable",
          "description": "Similar to url, information on where the service is available on HTTP."
        }
      },
      "additionalProperties": false
    },
    "Addressable": {
      "description": "Information for connecting over HTTP(s).",
      "type": "object",
      "properties": {
        "url": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "Service": {
      "description": "Service acts as a top-level container that manages a set of Routes and Configurations which implement a network service. Service exists to provide a singular abstraction which can be access controlled, reasoned about, and which encapsulates software lifecycle decisions such as rollout policy and team resource ownership. Service acts only as an orchestrator of the underlying Routes and Configurations (much as a kubernetes Deployment orchestrates ReplicaSets). The Service's controller will track the statuses of its owned Configuration and Route, reflecting their statuses and conditions as its own.",
      "type": "object",
      "properties": {
        "apiVersion": {
          "description": "The API version for this call. It must be \"serving.knative.dev/v1\".",
          "const": "serving.knative.dev/v1"
        },
        "kind": {
          "description": "The kind of resource. It must be \"Service\".",
          "const": "Service"
        },
        "metadata": {
          "$ref": "#/$defs/ObjectMeta",
          "description": "Metadata associated with this Service, including name, namespace, labels, and annotations. In Cloud Run, annotations with 'run.googleapis.com/' and 'autoscaling.knative.dev' are restricted, and the accepted annotations will be different depending on the resource type. The following Cloud Run-specific annotations are accepted in Service.metadata.annotations. * `run.googleapis.com/binary-authorization-breakglass` * `run.googleapis.com/binary-authorization` * `run.googleapis.com/client-name` * `run.googleapis.com/custom-audiences` * `run.googleapis.com/default-url-disabled` * `run.googleapis.com/description` * `run.googleapis.com/gc-traffic-tags` * `run.googleapis.com/ingress` * `run.googleapis.com/ingress` sets the ingress settings for the Service. See [the ingress settings documentation](/run/docs/securing/ingress) for details on configuring ingress settings. * `run.googleapis.com/ingress-status` is output-only and contains the currently active ingress settings for the Service. `run.googleapis.com/ingress-status` may differ from `run.googleapis.com/ingress` while the system is processing a change to `run.googleapis.com/ingress` or if the system failed to process a change to `run.googleapis.com/ingress`. When the system has processed all changes successfully `run.googleapis.com/ingress-status` and `run.googleapis.com/ingress` are equal."
        },
        "spec": {
          "$ref": "#/$defs/ServiceSpec",
          "description": "Holds the desired state of the Service (from the client)."
        }
      },
      "additionalProperties": false
    },
    "ServiceSpec": {
      "description": "ServiceSpec holds the desired state of the Route (from the client), which is used to manipulate the underlying Route and Configuration(s).",
      "type": "object",
      "properties": {
        "template": {
          "$ref": "#/$defs/RevisionTemplate",
          "description": "Holds the latest specification for the Revision to be stamped out."
        },
        "traffic": {
          "description": "Specifies how to distribute traffic over a collection of Knative Revisions and Configurations to the Service's main URL.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/TrafficTarget"
          }
        }
      },
      "additionalProperties": false
    }
  },
  "allOf": [
    {
      "if": {
        "properties": {
          "kind": {
            "const": "Revision"
          }
        }
      },
      "then": {
        "$ref": "#/$defs/Revision"
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "Configuration"
          }
        }
      },
      "then": {
        "$ref": "#/$defs/Configuration"
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "DomainMapping"
          }
        }
      },
      "then": {
        "$ref": "#/$defs/DomainMapping"
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "Task"
          }
        }
      },
      "then": {
        "$ref": "#/$defs/Task"
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "Execution"
          }
        }
      },
      "then": {
        "$ref": "#/$defs/Execution"
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "Job"
          }
        }
      },
      "then": {
        "$ref": "#/$defs/Job"
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "Route"
          }
        }
      },
      "then": {
        "$ref": "#/$defs/Route"
      }
    },
    {
      "if": {
        "properties": {
          "kind": {
            "const": "Service"
          }
        }
      },
      "then": {
        "$ref": "#/$defs/Service"
      }
    }
  ]
}
