{
  "description": "JobSchedulingConfiguration composes the reusable workload-aware scheduling building blocks.",
  "properties": {
    "disruptionMode": {
      "description": "WorkloadPodGroupDisruptionMode defines how individual pods within a group can be disrupted. Exactly one mode must be set.",
      "properties": {
        "all": {
          "description": "WorkloadPodGroupAllDisruptionMode indicates that all pods in the group must be disrupted together.",
          "type": [
            "object",
            "null"
          ]
        },
        "single": {
          "description": "WorkloadPodGroupSingleDisruptionMode indicates that individual pods can be disrupted independently.",
          "type": [
            "object",
            "null"
          ]
        }
      },
      "type": [
        "object",
        "null"
      ],
      "x-kubernetes-unions": [
        {
          "fields-to-discriminateBy": {
            "all": "All",
            "single": "Single"
          }
        }
      ]
    },
    "resourceClaims": {
      "description": "resourceClaims defines which ResourceClaims may be shared among Pods in the Job. Pods consume the devices allocated to a PodGroup's claim by defining a claim in its own Spec.ResourceClaims that matches the PodGroup's claim exactly. The claim must have the same name and refer to the same ResourceClaim or ResourceClaimTemplate. At most 4 claims may be set, matching the limit on the resulting PodGroup. This list is immutable after creation: entries may neither be added, removed, nor modified.",
      "items": {
        "description": "WorkloadPodGroupResourceClaim references a dynamic resource claim that is shared across pods in the group.",
        "properties": {
          "name": {
            "description": "name uniquely identifies this resource claim inside the group. This field is required. It must be a DNS_LABEL.",
            "type": "string"
          },
          "resourceClaimName": {
            "description": "resourceClaimName is the name of a ResourceClaim object in the same namespace. This field is optional. If it is not specified, no resource claim is used. If set, it must be a DNS subdomain.",
            "type": [
              "string",
              "null"
            ]
          },
          "resourceClaimTemplateName": {
            "description": "resourceClaimTemplateName is the name of a ResourceClaimTemplate object in the same namespace. This field is optional. If it is not specified, no resource claim template is used. If set, it must be a DNS subdomain.",
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "name"
        ],
        "type": [
          "object",
          "null"
        ]
      },
      "type": [
        "array",
        "null"
      ],
      "x-kubernetes-list-map-keys": [
        "name"
      ],
      "x-kubernetes-list-type": "map",
      "x-kubernetes-patch-merge-key": "name",
      "x-kubernetes-patch-strategy": "merge"
    },
    "schedulingConstraints": {
      "description": "WorkloadPodGroupSchedulingConstraints defines leaf-level scheduling constraints, such as topology.",
      "properties": {
        "topology": {
          "description": "topology specifies desired topological placements for all pods within the pod group. If unset, no topology placement is requested.",
          "items": {
            "description": "WorkloadTopologyConstraint defines a topology constraint for a group of pods managed by a workload controller.",
            "properties": {
              "key": {
                "description": "key specifies the key of the node label representing the topology domain. All pods within the PodGroup (or CompositePodGroup) must be colocated within the same domain instance. Different groups can land on different domain instances even if they derive from the same template. Nodes where this label is missing or has an empty value do not belong to any domain instance, so pods within the PodGroup/CompositePodGroup cannot be scheduled onto them. Examples: \"topology.kubernetes.io/rack\"",
                "type": "string"
              }
            },
            "required": [
              "key"
            ],
            "type": [
              "object",
              "null"
            ]
          },
          "type": [
            "array",
            "null"
          ],
          "x-kubernetes-list-type": "atomic"
        }
      },
      "type": [
        "object",
        "null"
      ]
    },
    "schedulingPolicy": {
      "description": "WorkloadPodGroupSchedulingPolicy defines the scheduling policy for a group of pods managed by a workload controller. Exactly one policy must be set.",
      "properties": {
        "basic": {
          "description": "WorkloadPodGroupBasicSchedulingPolicy indicates standard Kubernetes scheduling behavior.",
          "type": [
            "object",
            "null"
          ]
        },
        "gang": {
          "description": "WorkloadPodGroupGangSchedulingPolicy defines the parameters for gang (all-or-nothing) scheduling.",
          "properties": {
            "minCount": {
              "description": "minCount is the minimum number of pods that must be scheduled at the same time for the scheduler to admit the entire group. This field is optional. If it is not specified, the controller should inject a context-specific sane default (e.g., parallelism for a Job). If set, it must be a positive integer.",
              "format": "int32",
              "type": [
                "integer",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ]
        }
      },
      "type": [
        "object",
        "null"
      ],
      "x-kubernetes-unions": [
        {
          "fields-to-discriminateBy": {
            "basic": "Basic",
            "gang": "Gang"
          }
        }
      ]
    }
  },
  "type": "object",
  "$schema": "http://json-schema.org/schema#"
}