This is an automated email from the ASF dual-hosted git repository.

bugraoz93 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new df421a3a17b Fix Helm chart image volume schema validation (#65409)
df421a3a17b is described below

commit df421a3a17b0dab36698106c494a72c40031fccc
Author: Subham <[email protected]>
AuthorDate: Tue Apr 21 00:54:05 2026 +0530

    Fix Helm chart image volume schema validation (#65409)
---
 chart/values.schema.json                  | 232 +++++++++++++++++++++++-------
 scripts/ci/prek/vendor_k8s_json_schema.py |   2 +-
 2 files changed, 178 insertions(+), 56 deletions(-)

diff --git a/chart/values.schema.json b/chart/values.schema.json
index 8a75e53bd68..63104f69cc1 100644
--- a/chart/values.schema.json
+++ b/chart/values.schema.json
@@ -12298,6 +12298,32 @@
             "type": "object",
             "additionalProperties": false
         },
+        "io.k8s.api.core.v1.AppArmorProfile": {
+            "description": "AppArmorProfile defines a pod or container's 
AppArmor settings.",
+            "properties": {
+                "localhostProfile": {
+                    "description": "localhostProfile indicates a profile 
loaded on the node that should be used. The profile must be preconfigured on 
the node to work. Must match the loaded name of the profile. Must be set if and 
only if type is \"Localhost\".",
+                    "type": "string"
+                },
+                "type": {
+                    "description": "type indicates which kind of AppArmor 
profile will be applied. Valid options are:\n  Localhost - a profile pre-loaded 
on the node.\n  RuntimeDefault - the container runtime's default profile.\n  
Unconfined - no AppArmor enforcement.",
+                    "type": "string"
+                }
+            },
+            "required": [
+                "type"
+            ],
+            "type": "object",
+            "x-kubernetes-unions": [
+                {
+                    "discriminator": "type",
+                    "fields-to-discriminateBy": {
+                        "localhostProfile": "LocalhostProfile"
+                    }
+                }
+            ],
+            "additionalProperties": false
+        },
         "io.k8s.api.core.v1.AzureDiskVolumeSource": {
             "description": "AzureDisk represents an Azure Data Disk mount on 
the host and bind mount to the pod.",
             "properties": {
@@ -12397,14 +12423,16 @@
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "drop": {
                     "description": "Removed capabilities",
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 }
             },
             "type": "object",
@@ -12418,7 +12446,8 @@
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "path": {
                     "description": "path is Optional: Used as the mounted 
root, rather than the full Ceph tree, default is /",
@@ -12507,7 +12536,7 @@
             "description": "ConfigMapEnvSource selects a ConfigMap to populate 
the environment variables with.\n\nThe contents of the target ConfigMap's Data 
field will represent the key-value pairs as environment variables.",
             "properties": {
                 "name": {
-                    "description": "Name of the referent. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
+                    "description": "Name of the referent. This field is 
effectively required, but due to backwards compatibility is allowed to be 
empty. Instances of this type with an empty value here are almost certainly 
wrong. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
                     "type": "string"
                 },
                 "optional": {
@@ -12526,7 +12555,7 @@
                     "type": "string"
                 },
                 "name": {
-                    "description": "Name of the referent. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
+                    "description": "Name of the referent. This field is 
effectively required, but due to backwards compatibility is allowed to be 
empty. Instances of this type with an empty value here are almost certainly 
wrong. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
                     "type": "string"
                 },
                 "optional": {
@@ -12549,10 +12578,11 @@
                     "items": {
                         "$ref": "#/definitions/io.k8s.api.core.v1.KeyToPath"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "name": {
-                    "description": "Name of the referent. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
+                    "description": "Name of the referent. This field is 
effectively required, but due to backwards compatibility is allowed to be 
empty. Instances of this type with an empty value here are almost certainly 
wrong. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
                     "type": "string"
                 },
                 "optional": {
@@ -12576,10 +12606,11 @@
                     "items": {
                         "$ref": "#/definitions/io.k8s.api.core.v1.KeyToPath"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "name": {
-                    "description": "Name of the referent. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
+                    "description": "Name of the referent. This field is 
effectively required, but due to backwards compatibility is allowed to be 
empty. Instances of this type with an empty value here are almost certainly 
wrong. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
                     "type": "string"
                 },
                 "optional": {
@@ -12598,14 +12629,16 @@
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "command": {
                     "description": "Entrypoint array. Not executed within a 
shell. The container image's ENTRYPOINT is used if this is not provided. 
Variable references $(VAR_NAME) are expanded using the container's environment. 
If a variable cannot be resolved, the reference in the input string will be 
unchanged. Double $$ are reduced to a single $, which allows for escaping the 
$(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will produce the string literal 
\"$(VAR_NAME)\". Escaped references [...]
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "env": {
                     "description": "List of environment variables to set in 
the container. Cannot be updated.",
@@ -12613,6 +12646,10 @@
                         "$ref": "#/definitions/io.k8s.api.core.v1.EnvVar"
                     },
                     "type": "array",
+                    "x-kubernetes-list-map-keys": [
+                        "name"
+                    ],
+                    "x-kubernetes-list-type": "map",
                     "x-kubernetes-patch-merge-key": "name",
                     "x-kubernetes-patch-strategy": "merge"
                 },
@@ -12621,7 +12658,8 @@
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.api.core.v1.EnvFromSource"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "image": {
                     "description": "Container image name. More info: 
https://kubernetes.io/docs/concepts/containers/images This field is optional to 
allow higher level config management to default or override container images in 
workload controllers like Deployments and StatefulSets.",
@@ -12711,6 +12749,10 @@
                         "$ref": "#/definitions/io.k8s.api.core.v1.VolumeDevice"
                     },
                     "type": "array",
+                    "x-kubernetes-list-map-keys": [
+                        "devicePath"
+                    ],
+                    "x-kubernetes-list-type": "map",
                     "x-kubernetes-patch-merge-key": "devicePath",
                     "x-kubernetes-patch-strategy": "merge"
                 },
@@ -12720,6 +12762,10 @@
                         "$ref": "#/definitions/io.k8s.api.core.v1.VolumeMount"
                     },
                     "type": "array",
+                    "x-kubernetes-list-map-keys": [
+                        "mountPath"
+                    ],
+                    "x-kubernetes-list-type": "map",
                     "x-kubernetes-patch-merge-key": "mountPath",
                     "x-kubernetes-patch-strategy": "merge"
                 },
@@ -12793,7 +12839,8 @@
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 }
             },
             "type": "object",
@@ -12804,7 +12851,7 @@
             "properties": {
                 "fieldRef": {
                     "$ref": 
"#/definitions/io.k8s.api.core.v1.ObjectFieldSelector",
-                    "description": "Required: Selects a field of the pod: only 
annotations, labels, name and namespace are supported."
+                    "description": "Required: Selects a field of the pod: only 
annotations, labels, name, namespace and uid are supported."
                 },
                 "mode": {
                     "description": "Optional: mode bits used to set 
permissions on this file, must be an octal value between 0000 and 0777 or a 
decimal value between 0 and 511. YAML accepts both octal and decimal values, 
JSON requires decimal values for mode bits. 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.",
@@ -12839,7 +12886,8 @@
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeFile"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 }
             },
             "type": "object",
@@ -12943,7 +12991,8 @@
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 }
             },
             "type": "object",
@@ -12970,14 +13019,16 @@
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "wwids": {
                     "description": "wwids Optional: FC volume world wide 
identifiers (wwids) Either wwids or combination of targetWWNs and lun must be 
set, but not both simultaneously.",
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 }
             },
             "type": "object",
@@ -13133,7 +13184,8 @@
                     "items": {
                         "$ref": "#/definitions/io.k8s.api.core.v1.HTTPHeader"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "path": {
                     "description": "Path to access on the HTTP server.",
@@ -13181,13 +13233,17 @@
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "ip": {
                     "description": "IP address of the host file entry.",
                     "type": "string"
                 }
             },
+            "required": [
+                "ip"
+            ],
             "type": "object",
             "additionalProperties": false
         },
@@ -13246,7 +13302,8 @@
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "readOnly": {
                     "description": "readOnly here will force the ReadOnly 
setting in VolumeMounts. Defaults to false.",
@@ -13269,6 +13326,21 @@
             "type": "object",
             "additionalProperties": false
         },
+        "io.k8s.api.core.v1.ImageVolumeSource": {
+            "description": "ImageVolumeSource represents a image volume 
resource.",
+            "properties": {
+                "pullPolicy": {
+                    "description": "Policy for pulling OCI objects. Possible 
values are: Always: the kubelet always attempts to pull the reference. 
Container creation will fail If the pull fails. Never: the kubelet never pulls 
the reference and only uses a local image or artifact. Container creation will 
fail if the reference isn't present. IfNotPresent: the kubelet pulls if the 
reference isn't already present on disk. Container creation will fail if the 
reference isn't present and the p [...]
+                    "type": "string"
+                },
+                "reference": {
+                    "description": "Required: Image or artifact reference to 
be used. Behaves in the same way as pod.spec.containers[*].image. Pull secrets 
will be assembled in the same way as for the container image by looking up node 
credentials, SA image pull secrets, and pod spec image pull secrets. More info: 
https://kubernetes.io/docs/concepts/containers/images This field is optional to 
allow higher level config management to default or override container images in 
workload control [...]
+                    "type": "string"
+                }
+            },
+            "type": "object",
+            "additionalProperties": false
+        },
         "io.k8s.api.core.v1.KeyToPath": {
             "description": "Maps a string key to a path within a volume.",
             "properties": {
@@ -13384,7 +13456,7 @@
             "description": "LocalObjectReference contains enough information 
to let you locate the referenced object inside the same namespace.",
             "properties": {
                 "name": {
-                    "description": "Name of the referent. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
+                    "description": "Name of the referent. This field is 
effectively required, but due to backwards compatibility is allowed to be 
empty. Instances of this type with an empty value here are almost certainly 
wrong. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
                     "type": "string"
                 }
             },
@@ -13423,7 +13495,8 @@
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.api.core.v1.PreferredSchedulingTerm"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "requiredDuringSchedulingIgnoredDuringExecution": {
                     "$ref": "#/definitions/io.k8s.api.core.v1.NodeSelector",
@@ -13441,7 +13514,8 @@
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.api.core.v1.NodeSelectorTerm"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 }
             },
             "required": [
@@ -13467,7 +13541,8 @@
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 }
             },
             "required": [
@@ -13485,14 +13560,16 @@
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.api.core.v1.NodeSelectorRequirement"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "matchFields": {
                     "description": "A list of node selector requirements by 
node's fields.",
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.api.core.v1.NodeSelectorRequirement"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 }
             },
             "type": "object",
@@ -13526,7 +13603,8 @@
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "dataSource": {
                     "$ref": 
"#/definitions/io.k8s.api.core.v1.TypedLocalObjectReference",
@@ -13549,7 +13627,7 @@
                     "type": "string"
                 },
                 "volumeAttributesClassName": {
-                    "description": "volumeAttributesClassName may be used to 
set the VolumeAttributesClass used by this claim. If specified, the CSI driver 
will create or update the volume with the attributes defined in the 
corresponding VolumeAttributesClass. This has a different purpose than 
storageClassName, it can be changed after the claim is created. An empty string 
value means that no VolumeAttributesClass will be applied to the claim but it's 
not allowed to reset this field to em [...]
+                    "description": "volumeAttributesClassName may be used to 
set the VolumeAttributesClass used by this claim. If specified, the CSI driver 
will create or update the volume with the attributes defined in the 
corresponding VolumeAttributesClass. This has a different purpose than 
storageClassName, it can be changed after the claim is created. An empty string 
value means that no VolumeAttributesClass will be applied to the claim but it's 
not allowed to reset this field to em [...]
                     "type": "string"
                 },
                 "volumeMode": {
@@ -13626,14 +13704,16 @@
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "requiredDuringSchedulingIgnoredDuringExecution": {
                     "description": "If the affinity requirements specified by 
this field are not met at scheduling time, the pod will not be scheduled onto 
the node. If the affinity requirements specified by this field cease to be met 
at some point during pod execution (e.g. due to a pod label update), the system 
may or may not try to eventually evict the pod from its node. When there are 
multiple elements, the lists of nodes corresponding to each podAffinityTerm are 
intersected, i.e. al [...]
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.api.core.v1.PodAffinityTerm"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 }
             },
             "type": "object",
@@ -13647,7 +13727,7 @@
                     "description": "A label query over a set of resources, in 
this case pods. If it's null, this PodAffinityTerm matches with no Pods."
                 },
                 "matchLabelKeys": {
-                    "description": "MatchLabelKeys is a set of pod label keys 
to select which pods will be taken into consideration. The keys are used to 
lookup values from the incoming pod labels, those key-value labels are merged 
with `LabelSelector` as `key in (value)` to select the group of existing pods 
which pods will be taken into consideration for the incoming pod's pod (anti) 
affinity. Keys that don't exist in the incoming pod labels will be ignored. The 
default value is empty.  [...]
+                    "description": "MatchLabelKeys is a set of pod label keys 
to select which pods will be taken into consideration. The keys are used to 
lookup values from the incoming pod labels, those key-value labels are merged 
with `labelSelector` as `key in (value)` to select the group of existing pods 
which pods will be taken into consideration for the incoming pod's pod (anti) 
affinity. Keys that don't exist in the incoming pod labels will be ignored. The 
default value is empty.  [...]
                     "items": {
                         "type": "string"
                     },
@@ -13655,7 +13735,7 @@
                     "x-kubernetes-list-type": "atomic"
                 },
                 "mismatchLabelKeys": {
-                    "description": "MismatchLabelKeys is a set of pod label 
keys to select which pods will be taken into consideration. The keys are used 
to lookup values from the incoming pod labels, those key-value labels are 
merged with `LabelSelector` as `key notin (value)` to select the group of 
existing pods which pods will be taken into consideration for the incoming 
pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels 
will be ignored. The default value is e [...]
+                    "description": "MismatchLabelKeys is a set of pod label 
keys to select which pods will be taken into consideration. The keys are used 
to lookup values from the incoming pod labels, those key-value labels are 
merged with `labelSelector` as `key notin (value)` to select the group of 
existing pods which pods will be taken into consideration for the incoming 
pod's pod (anti) affinity. Keys that don't exist in the incoming pod labels 
will be ignored. The default value is e [...]
                     "items": {
                         "type": "string"
                     },
@@ -13671,7 +13751,8 @@
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "topologyKey": {
                     "description": "This pod should be co-located (affinity) 
or not co-located (anti-affinity) with the pods matching the labelSelector in 
the specified namespaces, where co-located is defined as running on a node 
whose value of the label with key topologyKey matches that of any node on which 
any of the selected pods is running. Empty topologyKey is not allowed.",
@@ -13692,14 +13773,16 @@
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.api.core.v1.WeightedPodAffinityTerm"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "requiredDuringSchedulingIgnoredDuringExecution": {
                     "description": "If the anti-affinity requirements 
specified by this field are not met at scheduling time, the pod will not be 
scheduled onto the node. If the anti-affinity requirements specified by this 
field cease to be met at some point during pod execution (e.g. due to a pod 
label update), the system may or may not try to eventually evict the pod from 
its node. When there are multiple elements, the lists of nodes corresponding to 
each podAffinityTerm are intersecte [...]
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.api.core.v1.PodAffinityTerm"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 }
             },
             "type": "object",
@@ -13708,6 +13791,10 @@
         "io.k8s.api.core.v1.PodSecurityContext": {
             "description": "PodSecurityContext holds pod-level security 
attributes and common container settings. Some fields are also present in 
container.securityContext.  Field values of container.securityContext take 
precedence over field values of PodSecurityContext.",
             "properties": {
+                "appArmorProfile": {
+                    "$ref": "#/definitions/io.k8s.api.core.v1.AppArmorProfile",
+                    "description": "appArmorProfile is the AppArmor options to 
use by the containers in this pod. Note that this field cannot be set when 
spec.os.name is windows."
+                },
                 "fsGroup": {
                     "description": "A special supplemental group that applies 
to all containers in a pod. Some volume types allow the Kubelet to change the 
ownership of that volume to be owned by the pod:\n\n1. The owning GID will be 
the FSGroup 2. The setgid bit is set (new files created in the volume will be 
owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n\nIf unset, 
the Kubelet will not modify the ownership and permissions of any volume. Note 
that this field cannot b [...]
                     "format": "int64",
@@ -13740,19 +13827,25 @@
                     "description": "The seccomp options to use by the 
containers in this pod. Note that this field cannot be set when spec.os.name is 
windows."
                 },
                 "supplementalGroups": {
-                    "description": "A list of groups applied to the first 
process run in each container, in addition to the container's primary GID, the 
fsGroup (if specified), and group memberships defined in the container image 
for the uid of the container process. If unspecified, no additional groups are 
added to any container. Note that group memberships defined in the container 
image for the uid of the container process are still effective, even if they 
are not included in this list [...]
+                    "description": "A list of groups applied to the first 
process run in each container, in addition to the container's primary GID and 
fsGroup (if specified).  If the SupplementalGroupsPolicy feature is enabled, 
the supplementalGroupsPolicy field determines whether these are in addition to 
or instead of any group memberships defined in the container image. If 
unspecified, no additional groups are added, though group memberships defined 
in the container image may still be [...]
                     "items": {
                         "format": "int64",
                         "type": "integer"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
+                },
+                "supplementalGroupsPolicy": {
+                    "description": "Defines how supplemental groups of the 
first container processes are calculated. Valid values are \"Merge\" and 
\"Strict\". If not specified, \"Merge\" is used. (Alpha) Using the field 
requires the SupplementalGroupsPolicy feature gate to be enabled and the 
container runtime must implement support for this feature. Note that this field 
cannot be set when spec.os.name is windows.",
+                    "type": "string"
                 },
                 "sysctls": {
                     "description": "Sysctls hold a list of namespaced sysctls 
used for the pod. Pods with unsupported sysctls (by the container runtime) 
might fail to launch. Note that this field cannot be set when spec.os.name is 
windows.",
                     "items": {
                         "$ref": "#/definitions/io.k8s.api.core.v1.Sysctl"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "windowsOptions": {
                     "$ref": 
"#/definitions/io.k8s.api.core.v1.WindowsSecurityContextOptions",
@@ -13866,11 +13959,12 @@
                     "type": "integer"
                 },
                 "sources": {
-                    "description": "sources is the list of volume projections",
+                    "description": "sources is the list of volume projections. 
Each entry in this list handles one source.",
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.api.core.v1.VolumeProjection"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 }
             },
             "type": "object",
@@ -13931,7 +14025,8 @@
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "pool": {
                     "description": "pool is the rados pool name. Default is 
rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it";,
@@ -13963,6 +14058,10 @@
                 "name": {
                     "description": "Name must match the name of one entry in 
pod.spec.resourceClaims of the Pod where this field is used. It makes that 
resource available inside a container.",
                     "type": "string"
+                },
+                "request": {
+                    "description": "Request is the name chosen for a request 
in the referenced claim. If empty, everything from the claim is made available, 
otherwise only the result of this request.",
+                    "type": "string"
                 }
             },
             "required": [
@@ -14131,7 +14230,7 @@
             "description": "SecretEnvSource selects a Secret to populate the 
environment variables with.\n\nThe contents of the target Secret's Data field 
will represent the key-value pairs as environment variables.",
             "properties": {
                 "name": {
-                    "description": "Name of the referent. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
+                    "description": "Name of the referent. This field is 
effectively required, but due to backwards compatibility is allowed to be 
empty. Instances of this type with an empty value here are almost certainly 
wrong. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
                     "type": "string"
                 },
                 "optional": {
@@ -14150,7 +14249,7 @@
                     "type": "string"
                 },
                 "name": {
-                    "description": "Name of the referent. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
+                    "description": "Name of the referent. This field is 
effectively required, but due to backwards compatibility is allowed to be 
empty. Instances of this type with an empty value here are almost certainly 
wrong. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
                     "type": "string"
                 },
                 "optional": {
@@ -14173,10 +14272,11 @@
                     "items": {
                         "$ref": "#/definitions/io.k8s.api.core.v1.KeyToPath"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "name": {
-                    "description": "Name of the referent. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
+                    "description": "Name of the referent. This field is 
effectively required, but due to backwards compatibility is allowed to be 
empty. Instances of this type with an empty value here are almost certainly 
wrong. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names";,
                     "type": "string"
                 },
                 "optional": {
@@ -14200,7 +14300,8 @@
                     "items": {
                         "$ref": "#/definitions/io.k8s.api.core.v1.KeyToPath"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "optional": {
                     "description": "optional field specify whether the Secret 
or its keys must be defined",
@@ -14221,6 +14322,10 @@
                     "description": "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 Note that this field cannot be set when 
spec.os.name is windows.",
                     "type": "boolean"
                 },
+                "appArmorProfile": {
+                    "$ref": "#/definitions/io.k8s.api.core.v1.AppArmorProfile",
+                    "description": "appArmorProfile is the AppArmor options to 
use by this container. If set, this profile overrides the pod's 
appArmorProfile. Note that this field cannot be set when spec.os.name is 
windows."
+                },
                 "capabilities": {
                     "$ref": "#/definitions/io.k8s.api.core.v1.Capabilities",
                     "description": "The capabilities to add/drop when running 
containers. Defaults to the default set of capabilities granted by the 
container runtime. Note that this field cannot be set when spec.os.name is 
windows."
@@ -14230,7 +14335,7 @@
                     "type": "boolean"
                 },
                 "procMount": {
-                    "description": "procMount denotes the type of proc mount 
to use for the containers. The default is DefaultProcMount which uses the 
container runtime defaults for readonly paths and masked paths. This requires 
the ProcMountType feature flag to be enabled. Note that this field cannot be 
set when spec.os.name is windows.",
+                    "description": "procMount denotes the type of proc mount 
to use for the containers. The default value is Default which uses the 
container runtime defaults for readonly paths and masked paths. This requires 
the ProcMountType feature flag to be enabled. Note that this field cannot be 
set when spec.os.name is windows.",
                     "type": "string"
                 },
                 "readOnlyRootFilesystem": {
@@ -14418,7 +14523,7 @@
                     "type": "integer"
                 },
                 "minDomains": {
-                    "description": "MinDomains indicates a minimum number of 
eligible domains. When the number of eligible domains with matching topology 
keys is less than minDomains, Pod Topology Spread treats \"global minimum\" as 
0, and then the calculation of Skew is performed. And when the number of 
eligible domains with matching topology keys equals or greater than minDomains, 
this value has no effect on scheduling. As a result, when the number of 
eligible domains is less than minD [...]
+                    "description": "MinDomains indicates a minimum number of 
eligible domains. When the number of eligible domains with matching topology 
keys is less than minDomains, Pod Topology Spread treats \"global minimum\" as 
0, and then the calculation of Skew is performed. And when the number of 
eligible domains with matching topology keys equals or greater than minDomains, 
this value has no effect on scheduling. As a result, when the number of 
eligible domains is less than minD [...]
                     "format": "int32",
                     "type": "integer"
                 },
@@ -14568,6 +14673,10 @@
                     "$ref": 
"#/definitions/io.k8s.api.core.v1.HostPathVolumeSource",
                     "description": "hostPath represents a pre-existing file or 
directory on the host machine that is directly exposed to the container. This 
is generally used for system agents or other privileged things that are allowed 
to see the host machine. Most containers will NOT need this. More info: 
https://kubernetes.io/docs/concepts/storage/volumes#hostpath";
                 },
+                "image": {
+                    "$ref": 
"#/definitions/io.k8s.api.core.v1.ImageVolumeSource",
+                    "description": "image represents an OCI object (a 
container image or artifact) pulled and mounted on the kubelet's host machine. 
The volume is resolved at pod startup depending on which PullPolicy value is 
provided:\n\n- Always: the kubelet always attempts to pull the reference. 
Container creation will fail If the pull fails. - Never: the kubelet never 
pulls the reference and only uses a local image or artifact. Container creation 
will fail if the reference isn't pres [...]
+                },
                 "iscsi": {
                     "$ref": 
"#/definitions/io.k8s.api.core.v1.ISCSIVolumeSource",
                     "description": "iscsi represents an ISCSI Disk resource 
that is attached to a kubelet's host machine and then exposed to the pod. More 
info: https://examples.k8s.io/volumes/iscsi/README.md";
@@ -14654,7 +14763,7 @@
                     "type": "string"
                 },
                 "mountPropagation": {
-                    "description": "mountPropagation determines how mounts are 
propagated from the host to container and the other way around. When not set, 
MountPropagationNone is used. This field is beta in 1.10.",
+                    "description": "mountPropagation determines how mounts are 
propagated from the host to container and the other way around. When not set, 
MountPropagationNone is used. This field is beta in 1.10. When 
RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be 
None or unspecified (which defaults to None).",
                     "type": "string"
                 },
                 "name": {
@@ -14665,6 +14774,10 @@
                     "description": "Mounted read-only if true, read-write 
otherwise (false or unspecified). Defaults to false.",
                     "type": "boolean"
                 },
+                "recursiveReadOnly": {
+                    "description": "RecursiveReadOnly specifies whether 
read-only mounts should be handled recursively.\n\nIf ReadOnly is false, this 
field has no meaning and must be unspecified.\n\nIf ReadOnly is true, and this 
field is set to Disabled, the mount is not made recursively read-only.  If this 
field is set to IfPossible, the mount is made recursively read-only, if it is 
supported by the container runtime.  If this field is set to Enabled, the mount 
is made recursively read- [...]
+                    "type": "string"
+                },
                 "subPath": {
                     "description": "Path within the volume from which the 
container's volume should be mounted. Defaults to \"\" (volume's root).",
                     "type": "string"
@@ -14682,7 +14795,7 @@
             "additionalProperties": false
         },
         "io.k8s.api.core.v1.VolumeProjection": {
-            "description": "Projection that may be projected along with other 
supported volume types",
+            "description": "Projection that may be projected along with other 
supported volume types. Exactly one of these fields must be set.",
             "properties": {
                 "clusterTrustBundle": {
                     "$ref": 
"#/definitions/io.k8s.api.core.v1.ClusterTrustBundleProjection",
@@ -14810,7 +14923,8 @@
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 }
             },
             "required": [
@@ -14880,7 +14994,8 @@
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelectorRequirement"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "matchLabels": {
                     "additionalProperties": {
@@ -14910,7 +15025,8 @@
                     "items": {
                         "type": "string"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 }
             },
             "required": [
@@ -14984,6 +15100,7 @@
                         "type": "string"
                     },
                     "type": "array",
+                    "x-kubernetes-list-type": "set",
                     "x-kubernetes-patch-strategy": "merge"
                 },
                 "generateName": {
@@ -15007,7 +15124,8 @@
                     "items": {
                         "$ref": 
"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ManagedFieldsEntry"
                     },
-                    "type": "array"
+                    "type": "array",
+                    "x-kubernetes-list-type": "atomic"
                 },
                 "name": {
                     "description": "Name must be unique within a namespace. 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: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names";,
@@ -15023,6 +15141,10 @@
                         "$ref": 
"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference"
                     },
                     "type": "array",
+                    "x-kubernetes-list-map-keys": [
+                        "uid"
+                    ],
+                    "x-kubernetes-list-type": "map",
                     "x-kubernetes-patch-merge-key": "uid",
                     "x-kubernetes-patch-strategy": "merge"
                 },
diff --git a/scripts/ci/prek/vendor_k8s_json_schema.py 
b/scripts/ci/prek/vendor_k8s_json_schema.py
index b7949d91172..197a796183b 100755
--- a/scripts/ci/prek/vendor_k8s_json_schema.py
+++ b/scripts/ci/prek/vendor_k8s_json_schema.py
@@ -32,7 +32,7 @@ from common_prek_utils import AIRFLOW_ROOT_PATH
 
 K8S_DEFINITIONS = (
     "https://raw.githubusercontent.com/yannh/kubernetes-json-schema";
-    "/master/v1.29.0-standalone-strict/_definitions.json"
+    "/master/v1.31.0-standalone-strict/_definitions.json"
 )
 VALUES_SCHEMA_FILE = AIRFLOW_ROOT_PATH / "chart/values.schema.json"
 


Reply via email to