Repository: kubernetes-sigs/kueue

Issue:
TAS integration with Kubeflow Trainer v2
**What would you like to be added**:

Support TAS running for Kubeflow Trainer v2. Currently it does not work as reported here: https://github.com/kubernetes-sigs/kueue/issues/6865#issuecomment-3327164428

This is currently waiting on https://github.com/kubeflow/trainer/issues/2784 with the pending PR https://github.com/kubeflow/trainer/pull/2785

Once the PR lands in Trainer we need to adjust Kueue.

**Why is this needed**:

We have users interested in the integration. Both Kubeflow Trainer v2 and TAS as major recent investments so it would be great to make them compatible.


Hints from issue comments:
@mimowo: cc @izturn @kaisoz @andreyvelich @tenzen-y @mwysokin @mimowo: I see this is merged https://github.com/kubeflow/trainer/pull/2785. So, basically, the integration should work when we have Trainer 2.1.0 released. In order to make sure there are no blockers I would appreciate to have already some PoC PR using the main branch on the Kubeflow Trainer v2.@kaisoz: /assign

I can take care of this one 😊 

Solution patch:
diff --git a/.gitignore b/.gitignore
index da528897b..beadfce66 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@
 *.dylib
 bin
 artifacts
+config/components/crd/_output
 testbin/*
 .DS_Store
 go.work*
diff --git a/.golangci.yaml b/.golangci.yaml
index e43fff907..16c9f0296 100644
--- a/.golangci.yaml
+++ b/.golangci.yaml
@@ -90,6 +90,12 @@ linters:
       - linters:
           - staticcheck
         text: 'SA1019: j.Status.RayClusterStatus.State is deprecated: the State field is replaced by the Conditions field.'
+      - linters:
+          - staticcheck
+        text: 'SA1019: kueue.LocalQueueFlavorStatus is deprecated: LocalQueueFlavorStatus is deprecated and marked for removal in v1beta2.'
+      - linters:
+        - staticcheck
+        text: 'SA1019: stats.Flavors is deprecated: Flavors is deprecated and marked for removal in v1beta2.'
       - linters:
           - fatcontext
         path: ^test/*
diff --git a/CHANGELOG/CHANGELOG-0.13.md b/CHANGELOG/CHANGELOG-0.13.md
index 189e1294a..0a3745267 100644
--- a/CHANGELOG/CHANGELOG-0.13.md
+++ b/CHANGELOG/CHANGELOG-0.13.md
@@ -1,3 +1,33 @@
+## v0.13.7
+
+Changes since `v0.13.6`:
+
+## Changes by Kind
+
+### Feature
+
+- JobFramework: Introduce an optional interface for custom Jobs, called JobWithCustomWorkloadActivation, which can be used to deactivate or active a custom CRD workload. (#7199, @tg123)
+
+### Bug or Regression
+
+- Fix existing workloads not being re-evaluated when new clusters are added to MultiKueueConfig. Previously, only newly created workloads would see updated cluster lists. (#7351, @mimowo)
+- Fix handling of RayJobs which specify the spec.clusterSelector and the "queue-name" label for Kueue. These jobs should be ignored by kueue as they are being submitted to a RayCluster which is where the resources are being used and was likely already admitted by kueue. No need to double admit.
+  Fix on a panic on kueue managed jobs if spec.rayClusterSpec wasn't specified. (#7257, @laurafitzgerald)
+- Fixed a bug that Kueue would keep sending empty updates to a Workload, along with sending the "UpdatedWorkload" event, even if the Workload didn't change. This would happen for Workloads using any other mechanism for setting
+  the priority than the WorkloadPriorityClass, eg. for Workloads for PodGroups. (#7306, @mbobrovskyi)
+- MultiKueue x ElasticJobs: fix webhook validation bug which prevented scale up operation when any other
+  than the default "AllAtOnce" MultiKueue dispatcher was used. (#7333, @mszadkow)
+- Visibility API: Fix a bug that the Config clientConnection is not respected in the visibility server. (#7224, @tenzen-y)
+
+### Other (Cleanup or Flake)
+
+- Improve the messages presented to the user in scheduling events, by clarifying the reason for "insufficient quota"
+  in case of workloads with multiple PodSets. 
+  
+  Example:
+  - before: "insufficient quota for resource-type in flavor example-flavor, request > maximum capacity (24 > 16)"
+  - after: "insufficient quota for resource-type in flavor example-flavor, previously considered podsets requests (16) + current podset request (8) > maximum capacity (16)" (#7294, @iomarsayed)
+
 ## v0.13.6
 
 Changes since `v0.13.5`:
diff --git a/CHANGELOG/CHANGELOG-0.14.md b/CHANGELOG/CHANGELOG-0.14.md
index 646848239..9bbbe272d 100644
--- a/CHANGELOG/CHANGELOG-0.14.md
+++ b/CHANGELOG/CHANGELOG-0.14.md
@@ -1,3 +1,41 @@
+## v0.14.2
+
+Changes since `v0.14.1`:
+
+## Changes by Kind
+
+### Feature
+
+- JobFramework: Introduce an optional interface for custom Jobs, called JobWithCustomWorkloadActivation, which can be used to deactivate or active a custom CRD workload. (#7286, @tg123)
+
+### Bug or Regression
+
+- Fix existing workloads not being re-evaluated when new clusters are added to MultiKueueConfig. Previously, only newly created workloads would see updated cluster lists. (#7349, @mimowo)
+- Fix handling of RayJobs which specify the spec.clusterSelector and the "queue-name" label for Kueue. These jobs should be ignored by kueue as they are being submitted to a RayCluster which is where the resources are being used and was likely already admitted by kueue. No need to double admit.
+  Fix on a panic on kueue managed jobs if spec.rayClusterSpec wasn't specified. (#7258, @laurafitzgerald)
+- Fixed a bug that Kueue would keep sending empty updates to a Workload, along with sending the "UpdatedWorkload" event, even if the Workload didn't change. This would happen for Workloads using any other mechanism for setting
+  the priority than the WorkloadPriorityClass, eg. for Workloads for PodGroups. (#7305, @mbobrovskyi)
+- MultiKueue x ElasticJobs: fix webhook validation bug which prevented scale up operation when any other
+  than the default "AllAtOnce" MultiKueue dispatcher was used. (#7332, @mszadkow)
+- TAS: Introduce missing validation against using incompatible `PodSet` grouping configuration in `JobSet, `MPIJob`, `LeaderWorkerSet`, `RayJob` and `RayCluster`. 
+  
+  Now, only groups of two `PodSet`s can be defined and one of the grouped `PodSet`s has to have only a single `Pod`.
+  The `PodSet`s within a group must specify the same topology request via one of the `kueue.x-k8s.io/podset-required-topology` and `kueue.x-k8s.io/podset-preferred-topology` annotations. (#7263, @kshalot)
+- Visibility API: Fix a bug that the Config clientConnection is not respected in the visibility server. (#7225, @tenzen-y)
+- WorkloadRequestUseMergePatch: use "strict" mode for admission patches during scheduling which
+  sends the ResourceVersion of the workload being admitted for comparing by kube-apiserver. 
+  This fixes the race-condition issue that Workload conditions added concurrently by other controllers
+  could be removed during scheduling. (#7279, @mszadkow)
+
+### Other (Cleanup or Flake)
+
+- Improve the messages presented to the user in scheduling events, by clarifying the reason for "insufficient quota"
+  in case of workloads with multiple PodSets. 
+  
+  Example:
+  - before: "insufficient quota for resource-type in flavor example-flavor, request > maximum capacity (24 > 16)"
+  - after: "insufficient quota for resource-type in flavor example-flavor, previously considered podsets requests (16) + current podset request (8) > maximum capacity (16)" (#7293, @iomarsayed)
+
 ## v0.14.1
 
 Changes since `v0.14.0`:
diff --git a/Makefile b/Makefile
index ad0470cd5..7c9b2db58 100644
--- a/Makefile
+++ b/Makefile
@@ -87,7 +87,7 @@ LD_FLAGS += -X '$(version_pkg).BuildDate=$(shell date -u +%Y-%m-%dT%H:%M:%SZ)'
 
 # Update these variables when preparing a new release or a release branch.
 # Then run `make prepare-release-branch`
-RELEASE_VERSION=v0.14.1
+RELEASE_VERSION=v0.14.2
 RELEASE_BRANCH=main
 # Application version for Helm and npm (strips leading 'v' from RELEASE_VERSION)
 APP_VERSION := $(shell echo $(RELEASE_VERSION) | cut -c2-)
@@ -127,6 +127,12 @@ manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and Cust
 		rbac:roleName=manager-role output:rbac:artifacts:config=config/components/rbac\
 		webhook output:webhook:artifacts:config=config/components/webhook\
 		paths="./pkg/controller/...;./pkg/webhooks/...;./pkg/util/cert/...;./pkg/visibility/..."
+	$(MAKE) compile-crd-manifests
+
+.PHONY: compile-crd-manifests
+compile-crd-manifests: kustomize
+	@mkdir -p config/components/crd/_output
+	$(KUSTOMIZE) build config/components/crd > config/components/crd/_output/crds-with-webhooks.yaml
 
 .PHONY: update-helm
 update-helm: manifests yq yaml-processor
diff --git a/Makefile-test.mk b/Makefile-test.mk
index eec13e1dc..d2ec63586 100644
--- a/Makefile-test.mk
+++ b/Makefile-test.mk
@@ -68,7 +68,7 @@ test: gotestsum ## Run tests.
 	TEST_LOG_LEVEL=$(TEST_LOG_LEVEL) $(GOTESTSUM) --junitfile $(ARTIFACTS)/junit.xml -- $(GOFLAGS) $(GO_TEST_FLAGS) $(shell $(GO_CMD) list $(GO_TEST_TARGET)/... | grep -v '/test/') -coverpkg=$(GO_TEST_TARGET)/... -coverprofile $(ARTIFACTS)/cover.out
 
 .PHONY: test-integration
-test-integration: gomod-download envtest ginkgo dep-crds kueuectl ginkgo-top ## Run integration tests for all singlecluster suites.
+test-integration: compile-crd-manifests gomod-download envtest ginkgo dep-crds kueuectl ginkgo-top ## Run integration tests for all singlecluster suites.
 	KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" \
 	PROJECT_DIR=$(PROJECT_DIR)/ \
 	KUEUE_BIN=$(BIN_DIR) \
@@ -86,7 +86,7 @@ test-integration-extended: INTEGRATION_FILTERS= --label-filter="slow || redundan
 test-integration-extended: test-integration ## Run extended integration tests for singlecluster suites.
 
 .PHONY: test-multikueue-integration
-test-multikueue-integration: gomod-download envtest ginkgo dep-crds ginkgo-top ## Run integration tests for MultiKueue suite.
+test-multikueue-integration: compile-crd-manifests gomod-download envtest ginkgo dep-crds ginkgo-top ## Run integration tests for MultiKueue suite.
 	KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" \
 	PROJECT_DIR=$(PROJECT_DIR)/ \
 	KUEUE_BIN=$(BIN_DIR) \
@@ -170,6 +170,7 @@ run-test-tas-e2e-%:
 		APPWRAPPER_VERSION=$(APPWRAPPER_VERSION) \
 		LEADERWORKERSET_VERSION=$(LEADERWORKERSET_VERSION) \
 		KUBERAY_VERSION=$(KUBERAY_VERSION) RAY_VERSION=$(RAY_VERSION) RAYMINI_VERSION=$(RAYMINI_VERSION) USE_RAY_FOR_TESTS=$(USE_RAY_FOR_TESTS) \
+		KUBEFLOW_TRAINER_VERSION=$(KUBEFLOW_TRAINER_VERSION) \
 		KIND_CLUSTER_FILE="tas-kind-cluster.yaml" E2E_TARGET_FOLDER="tas" \
 		TEST_LOG_LEVEL=$(TEST_LOG_LEVEL) \
 		E2E_RUN_ONLY_ENV=$(E2E_RUN_ONLY_ENV) \
diff --git a/README.md b/README.md
index 92546e738..38603c01b 100644
--- a/README.md
+++ b/README.md
@@ -63,7 +63,7 @@ Read the [overview](https://kueue.sigs.k8s.io/docs/overview/) and watch the Kueu
 To install the latest release of Kueue in your cluster, run the following command:
 
 ```shell
-kubectl apply --server-side -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.14.1/manifests.yaml
+kubectl apply --server-side -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.14.2/manifests.yaml
 ```
 
 The controller runs in the `kueue-system` namespace.
diff --git a/SECURITY-INSIGHTS.yaml b/SECURITY-INSIGHTS.yaml
index 339de146d..2384c6af6 100644
--- a/SECURITY-INSIGHTS.yaml
+++ b/SECURITY-INSIGHTS.yaml
@@ -1,11 +1,11 @@
 header:
   schema-version: 1.0.0
   expiration-date: '2024-09-28T01:00:00.000Z'
-  last-updated: '2025-10-08'
-  last-reviewed: '2025-10-08'
-  commit-hash: "bcdc1e482ba64f56fee107a1e5a27646825ab9e6"
+  last-updated: '2025-10-23'
+  last-reviewed: '2025-10-23'
+  commit-hash: "afb96efdd444eb95e357e6d6b77ce9cd2817fc91"
   project-url: 'https://github.com/kubernetes-sigs/kueue'
-  project-release: "0.14.1"
+  project-release: "0.14.2"
   changelog: 'https://github.com/kubernetes-sigs/kueue/tree/main/CHANGELOG'
   license: 'https://github.com/kubernetes-sigs/kueue/blob/main/LICENSE'
 project-lifecycle:
@@ -28,7 +28,7 @@ documentation:
   - 'https://kueue.sigs.k8s.io/docs/'
 distribution-points:
   - >-
-    https://github.com/kubernetes-sigs/kueue/releases/download/v0.14.1/manifests.yaml
+    https://github.com/kubernetes-sigs/kueue/releases/download/v0.14.2/manifests.yaml
 security-artifacts:
   threat-model:
     threat-model-created: false
@@ -62,5 +62,5 @@ dependencies:
   dependencies-lists:
     - 'https://github.com/kubernetes-sigs/kueue/blob/main/go.mod'
   sbom:
-    - sbom-file: https://github.com/kubernetes-sigs/kueue/releases/download/v0.14.1/kueue-v0.14.1.spdx.json
+    - sbom-file: https://github.com/kubernetes-sigs/kueue/releases/download/v0.14.2/kueue-v0.14.2.spdx.json
       sbom-format: SPDX
diff --git a/apis/kueue/v1beta1/clusterqueue_conversion.go b/apis/kueue/v1beta1/clusterqueue_conversion.go
new file mode 100644
index 000000000..0b30c5864
--- /dev/null
+++ b/apis/kueue/v1beta1/clusterqueue_conversion.go
@@ -0,0 +1,47 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1beta1
+
+import (
+	conversionapi "k8s.io/apimachinery/pkg/conversion"
+	"sigs.k8s.io/controller-runtime/pkg/conversion"
+
+	"sigs.k8s.io/kueue/apis/kueue/v1beta2"
+)
+
+//lint:file-ignore ST1003 "generated Convert_* calls below use underscores"
+//revive:disable:var-naming
+
+func (src *ClusterQueue) ConvertTo(dstRaw conversion.Hub) error {
+	dst := dstRaw.(*v1beta2.ClusterQueue)
+	return Convert_v1beta1_ClusterQueue_To_v1beta2_ClusterQueue(src, dst, nil)
+}
+
+func (dst *ClusterQueue) ConvertFrom(srcRaw conversion.Hub) error {
+	src := srcRaw.(*v1beta2.ClusterQueue)
+	return Convert_v1beta2_ClusterQueue_To_v1beta1_ClusterQueue(src, dst, nil)
+}
+
+func Convert_v1beta1_ClusterQueueSpec_To_v1beta2_ClusterQueueSpec(in *ClusterQueueSpec, out *v1beta2.ClusterQueueSpec, s conversionapi.Scope) error {
+	out.CohortName = v1beta2.CohortReference(in.Cohort)
+	return autoConvert_v1beta1_ClusterQueueSpec_To_v1beta2_ClusterQueueSpec(in, out, s)
+}
+
+func Convert_v1beta2_ClusterQueueSpec_To_v1beta1_ClusterQueueSpec(in *v1beta2.ClusterQueueSpec, out *ClusterQueueSpec, s conversionapi.Scope) error {
+	out.Cohort = CohortReference(in.CohortName)
+	return autoConvert_v1beta2_ClusterQueueSpec_To_v1beta1_ClusterQueueSpec(in, out, s)
+}
diff --git a/apis/kueue/v1beta1/doc.go b/apis/kueue/v1beta1/doc.go
index 905126881..17bdf9cc8 100644
--- a/apis/kueue/v1beta1/doc.go
+++ b/apis/kueue/v1beta1/doc.go
@@ -15,6 +15,7 @@ limitations under the License.
 */
 
 // +kubebuilder:object:generate=true
+// +k8s:conversion-gen=sigs.k8s.io/kueue/apis/kueue/v1beta2
 // +groupName=kueue.x-k8s.io
 
 package v1beta1
diff --git a/apis/kueue/v1beta1/groupversion_info.go b/apis/kueue/v1beta1/groupversion_info.go
index 1d1d3ed6d..9882f6b5f 100644
--- a/apis/kueue/v1beta1/groupversion_info.go
+++ b/apis/kueue/v1beta1/groupversion_info.go
@@ -20,8 +20,11 @@ limitations under the License.
 package v1beta1
 
 import (
+	apiruntime "k8s.io/apimachinery/pkg/runtime"
 	"k8s.io/apimachinery/pkg/runtime/schema"
 	"sigs.k8s.io/controller-runtime/pkg/scheme"
+
+	"sigs.k8s.io/kueue/apis/kueue/v1beta2"
 )
 
 var (
@@ -37,9 +40,20 @@ var (
 
 	// AddToScheme adds the types in this group-version to the given scheme.
 	AddToScheme = SchemeBuilder.AddToScheme
+
+	// required by zz_generated.conversion.go
+	localSchemeBuilder = &SchemeBuilder.SchemeBuilder
 )
 
 // Resource is required by pkg/client/listers/...
 func Resource(resource string) schema.GroupResource {
 	return GroupVersion.WithResource(resource).GroupResource()
 }
+
+var convScheme = apiruntime.NewScheme()
+
+func init() {
+	// register generated conversions into our local scheme
+	_ = AddToScheme(convScheme)
+	_ = v1beta2.AddToScheme(convScheme)
+}
diff --git a/apis/kueue/v1beta1/localqueue_conversion.go b/apis/kueue/v1beta1/localqueue_conversion.go
new file mode 100644
index 000000000..c50d2809d
--- /dev/null
+++ b/apis/kueue/v1beta1/localqueue_conversion.go
@@ -0,0 +1,57 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1beta1
+
+import (
+	conversionapi "k8s.io/apimachinery/pkg/conversion"
+	"sigs.k8s.io/controller-runtime/pkg/conversion"
+
+	"sigs.k8s.io/kueue/apis/kueue/v1beta2"
+)
+
+//lint:file-ignore ST1003 "generated Convert_* calls below use underscores"
+//revive:disable:var-naming
+
+func (src *LocalQueue) ConvertTo(dstRaw conversion.Hub) error {
+	dst := dstRaw.(*v1beta2.LocalQueue)
+	return Convert_v1beta1_LocalQueue_To_v1beta2_LocalQueue(src, dst, nil)
+}
+
+func (dst *LocalQueue) ConvertFrom(srcRaw conversion.Hub) error {
+	src := srcRaw.(*v1beta2.LocalQueue)
+	return Convert_v1beta2_LocalQueue_To_v1beta1_LocalQueue(src, dst, nil)
+}
+
+func Convert_v1beta2_LocalQueueStatus_To_v1beta1_LocalQueueStatus(in *v1beta2.LocalQueueStatus, out *LocalQueueStatus, s conversionapi.Scope) error {
+	out.FlavorUsage = make([]LocalQueueFlavorUsage, len(in.FlavorsUsage))
+	for i := range in.FlavorsUsage {
+		if err := autoConvert_v1beta2_LocalQueueFlavorUsage_To_v1beta1_LocalQueueFlavorUsage(&in.FlavorsUsage[i], &out.FlavorUsage[i], s); err != nil {
+			return err
+		}
+	}
+	return autoConvert_v1beta2_LocalQueueStatus_To_v1beta1_LocalQueueStatus(in, out, s)
+}
+
+func Convert_v1beta1_LocalQueueStatus_To_v1beta2_LocalQueueStatus(in *LocalQueueStatus, out *v1beta2.LocalQueueStatus, s conversionapi.Scope) error {
+	out.FlavorsUsage = make([]v1beta2.LocalQueueFlavorUsage, len(in.FlavorUsage))
+	for i := range in.FlavorUsage {
+		if err := autoConvert_v1beta1_LocalQueueFlavorUsage_To_v1beta2_LocalQueueFlavorUsage(&in.FlavorUsage[i], &out.FlavorsUsage[i], s); err != nil {
+			return err
+		}
+	}
+	return autoConvert_v1beta1_LocalQueueStatus_To_v1beta2_LocalQueueStatus(in, out, s)
+}
diff --git a/apis/kueue/v1beta1/localqueue_types.go b/apis/kueue/v1beta1/localqueue_types.go
index 564d24491..c46604d9c 100644
--- a/apis/kueue/v1beta1/localqueue_types.go
+++ b/apis/kueue/v1beta1/localqueue_types.go
@@ -56,6 +56,7 @@ type LocalQueueSpec struct {
 	FairSharing *FairSharing `json:"fairSharing,omitempty"`
 }
 
+// Deprecated: LocalQueueFlavorStatus is deprecated and marked for removal in v1beta2.
 type LocalQueueFlavorStatus struct {
 	// name of the flavor.
 	// +required
@@ -154,6 +155,7 @@ type LocalQueueStatus struct {
 	// +listMapKey=name
 	// +kubebuilder:validation:MaxItems=16
 	// +optional
+	// Deprecated: Flavors is deprecated and marked for removal in v1beta2.
 	Flavors []LocalQueueFlavorStatus `json:"flavors,omitempty"`
 
 	// fairSharing contains the information about the current status of fair sharing.
diff --git a/apis/kueue/v1beta1/workload_conversion.go b/apis/kueue/v1beta1/workload_conversion.go
new file mode 100644
index 000000000..55d407ec5
--- /dev/null
+++ b/apis/kueue/v1beta1/workload_conversion.go
@@ -0,0 +1,47 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1beta1
+
+import (
+	conversionapi "k8s.io/apimachinery/pkg/conversion"
+	"sigs.k8s.io/controller-runtime/pkg/conversion"
+
+	"sigs.k8s.io/kueue/apis/kueue/v1beta2"
+)
+
+//lint:file-ignore ST1003 "generated Convert_* calls below use underscores"
+//revive:disable:var-naming
+
+func (src *Workload) ConvertTo(dstRaw conversion.Hub) error {
+	dst := dstRaw.(*v1beta2.Workload)
+	return Convert_v1beta1_Workload_To_v1beta2_Workload(src, dst, nil)
+}
+
+func (dst *Workload) ConvertFrom(srcRaw conversion.Hub) error {
+	src := srcRaw.(*v1beta2.Workload)
+	return Convert_v1beta2_Workload_To_v1beta1_Workload(src, dst, nil)
+}
+
+func Convert_v1beta2_WorkloadStatus_To_v1beta1_WorkloadStatus(in *v1beta2.WorkloadStatus, out *WorkloadStatus, s conversionapi.Scope) error {
+	out.AccumulatedPastExexcutionTimeSeconds = in.AccumulatedPastExecutionTimeSeconds
+	return autoConvert_v1beta2_WorkloadStatus_To_v1beta1_WorkloadStatus(in, out, s)
+}
+
+func Convert_v1beta1_WorkloadStatus_To_v1beta2_WorkloadStatus(in *WorkloadStatus, out *v1beta2.WorkloadStatus, s conversionapi.Scope) error {
+	out.AccumulatedPastExecutionTimeSeconds = in.AccumulatedPastExexcutionTimeSeconds
+	return autoConvert_v1beta1_WorkloadStatus_To_v1beta2_WorkloadStatus(in, out, s)
+}
diff --git a/apis/kueue/v1beta1/workload_types.go b/apis/kueue/v1beta1/workload_types.go
index 8781aa2e8..7d297f96f 100644
--- a/apis/kueue/v1beta1/workload_types.go
+++ b/apis/kueue/v1beta1/workload_types.go
@@ -765,10 +765,10 @@ const (
 
 // Workload is the Schema for the workloads API
 // +kubebuilder:validation:XValidation:rule="has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True') && has(self.status.admission) ? size(self.spec.podSets) == size(self.status.admission.podSetAssignments) : true", message="podSetAssignments must have the same number of podSets as the spec"
-// +kubebuilder:validation:XValidation:rule="(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True')) ? (oldSelf.spec.priorityClassSource == self.spec.priorityClassSource) : true", message="field is immutable"
-// +kubebuilder:validation:XValidation:rule="(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True') && has(oldSelf.spec.priorityClassName) && has(self.spec.priorityClassName)) ? (oldSelf.spec.priorityClassName == self.spec.priorityClassName) : true", message="field is immutable"
-// +kubebuilder:validation:XValidation:rule="(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True')) && (has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True')) && has(oldSelf.spec.queueName) && has(self.spec.queueName) ? oldSelf.spec.queueName == self.spec.queueName : true", message="field is immutable"
-// +kubebuilder:validation:XValidation:rule="((has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'Admitted' && c.status == 'True')) && (has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == 'Admitted' && c.status == 'True')))?((has(oldSelf.spec.maximumExecutionTimeSeconds)?oldSelf.spec.maximumExecutionTimeSeconds:0) ==  (has(self.spec.maximumExecutionTimeSeconds)?self.spec.maximumExecutionTimeSeconds:0)):true", message="maximumExecutionTimeSeconds is immutable while admitted"
+// +kubebuilder:validation:XValidation:rule="(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True')) ? (oldSelf.spec.priorityClassSource == self.spec.priorityClassSource) : true", message="priorityClassSource is immutable while workload quota reserved"
+// +kubebuilder:validation:XValidation:rule="(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True') && has(oldSelf.spec.priorityClassName) && has(self.spec.priorityClassName)) ? (oldSelf.spec.priorityClassName == self.spec.priorityClassName) : true", message="priorityClassName is immutable while workload quota reserved"
+// +kubebuilder:validation:XValidation:rule="(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True')) && (has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True')) && has(oldSelf.spec.queueName) && has(self.spec.queueName) ? oldSelf.spec.queueName == self.spec.queueName : true", message="queueName is immutable while workload quota reserved"
+// +kubebuilder:validation:XValidation:rule="((has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'Admitted' && c.status == 'True')) && (has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == 'Admitted' && c.status == 'True')))?((has(oldSelf.spec.maximumExecutionTimeSeconds)?oldSelf.spec.maximumExecutionTimeSeconds:0) ==  (has(self.spec.maximumExecutionTimeSeconds)?self.spec.maximumExecutionTimeSeconds:0)):true", message="maximumExecutionTimeSeconds is immutable while workload quota reserved"
 type Workload struct {
 	metav1.TypeMeta `json:",inline"`
 	// metadata is the metadata of the Workload.
diff --git a/apis/kueue/v1beta1/zz_generated.conversion.go b/apis/kueue/v1beta1/zz_generated.conversion.go
new file mode 100644
index 000000000..7fb80707c
--- /dev/null
+++ b/apis/kueue/v1beta1/zz_generated.conversion.go
@@ -0,0 +1,2772 @@
+//go:build !ignore_autogenerated
+// +build !ignore_autogenerated
+
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by conversion-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	unsafe "unsafe"
+
+	corev1 "k8s.io/api/core/v1"
+	resource "k8s.io/apimachinery/pkg/api/resource"
+	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	conversion "k8s.io/apimachinery/pkg/conversion"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+	v1beta2 "sigs.k8s.io/kueue/apis/kueue/v1beta2"
+)
+
+func init() {
+	localSchemeBuilder.Register(RegisterConversions)
+}
+
+// RegisterConversions adds conversion functions to the given scheme.
+// Public to allow building arbitrary schemes.
+func RegisterConversions(s *runtime.Scheme) error {
+	if err := s.AddGeneratedConversionFunc((*Admission)(nil), (*v1beta2.Admission)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_Admission_To_v1beta2_Admission(a.(*Admission), b.(*v1beta2.Admission), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.Admission)(nil), (*Admission)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_Admission_To_v1beta1_Admission(a.(*v1beta2.Admission), b.(*Admission), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*AdmissionCheck)(nil), (*v1beta2.AdmissionCheck)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_AdmissionCheck_To_v1beta2_AdmissionCheck(a.(*AdmissionCheck), b.(*v1beta2.AdmissionCheck), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.AdmissionCheck)(nil), (*AdmissionCheck)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_AdmissionCheck_To_v1beta1_AdmissionCheck(a.(*v1beta2.AdmissionCheck), b.(*AdmissionCheck), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*AdmissionCheckList)(nil), (*v1beta2.AdmissionCheckList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_AdmissionCheckList_To_v1beta2_AdmissionCheckList(a.(*AdmissionCheckList), b.(*v1beta2.AdmissionCheckList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.AdmissionCheckList)(nil), (*AdmissionCheckList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_AdmissionCheckList_To_v1beta1_AdmissionCheckList(a.(*v1beta2.AdmissionCheckList), b.(*AdmissionCheckList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*AdmissionCheckParametersReference)(nil), (*v1beta2.AdmissionCheckParametersReference)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_AdmissionCheckParametersReference_To_v1beta2_AdmissionCheckParametersReference(a.(*AdmissionCheckParametersReference), b.(*v1beta2.AdmissionCheckParametersReference), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.AdmissionCheckParametersReference)(nil), (*AdmissionCheckParametersReference)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_AdmissionCheckParametersReference_To_v1beta1_AdmissionCheckParametersReference(a.(*v1beta2.AdmissionCheckParametersReference), b.(*AdmissionCheckParametersReference), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*AdmissionCheckSpec)(nil), (*v1beta2.AdmissionCheckSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_AdmissionCheckSpec_To_v1beta2_AdmissionCheckSpec(a.(*AdmissionCheckSpec), b.(*v1beta2.AdmissionCheckSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.AdmissionCheckSpec)(nil), (*AdmissionCheckSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_AdmissionCheckSpec_To_v1beta1_AdmissionCheckSpec(a.(*v1beta2.AdmissionCheckSpec), b.(*AdmissionCheckSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*AdmissionCheckState)(nil), (*v1beta2.AdmissionCheckState)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_AdmissionCheckState_To_v1beta2_AdmissionCheckState(a.(*AdmissionCheckState), b.(*v1beta2.AdmissionCheckState), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.AdmissionCheckState)(nil), (*AdmissionCheckState)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_AdmissionCheckState_To_v1beta1_AdmissionCheckState(a.(*v1beta2.AdmissionCheckState), b.(*AdmissionCheckState), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*AdmissionCheckStatus)(nil), (*v1beta2.AdmissionCheckStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_AdmissionCheckStatus_To_v1beta2_AdmissionCheckStatus(a.(*AdmissionCheckStatus), b.(*v1beta2.AdmissionCheckStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.AdmissionCheckStatus)(nil), (*AdmissionCheckStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_AdmissionCheckStatus_To_v1beta1_AdmissionCheckStatus(a.(*v1beta2.AdmissionCheckStatus), b.(*AdmissionCheckStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*AdmissionCheckStrategyRule)(nil), (*v1beta2.AdmissionCheckStrategyRule)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_AdmissionCheckStrategyRule_To_v1beta2_AdmissionCheckStrategyRule(a.(*AdmissionCheckStrategyRule), b.(*v1beta2.AdmissionCheckStrategyRule), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.AdmissionCheckStrategyRule)(nil), (*AdmissionCheckStrategyRule)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_AdmissionCheckStrategyRule_To_v1beta1_AdmissionCheckStrategyRule(a.(*v1beta2.AdmissionCheckStrategyRule), b.(*AdmissionCheckStrategyRule), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*AdmissionChecksStrategy)(nil), (*v1beta2.AdmissionChecksStrategy)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_AdmissionChecksStrategy_To_v1beta2_AdmissionChecksStrategy(a.(*AdmissionChecksStrategy), b.(*v1beta2.AdmissionChecksStrategy), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.AdmissionChecksStrategy)(nil), (*AdmissionChecksStrategy)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_AdmissionChecksStrategy_To_v1beta1_AdmissionChecksStrategy(a.(*v1beta2.AdmissionChecksStrategy), b.(*AdmissionChecksStrategy), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*AdmissionFairSharingStatus)(nil), (*v1beta2.AdmissionFairSharingStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_AdmissionFairSharingStatus_To_v1beta2_AdmissionFairSharingStatus(a.(*AdmissionFairSharingStatus), b.(*v1beta2.AdmissionFairSharingStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.AdmissionFairSharingStatus)(nil), (*AdmissionFairSharingStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_AdmissionFairSharingStatus_To_v1beta1_AdmissionFairSharingStatus(a.(*v1beta2.AdmissionFairSharingStatus), b.(*AdmissionFairSharingStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*AdmissionScope)(nil), (*v1beta2.AdmissionScope)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_AdmissionScope_To_v1beta2_AdmissionScope(a.(*AdmissionScope), b.(*v1beta2.AdmissionScope), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.AdmissionScope)(nil), (*AdmissionScope)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_AdmissionScope_To_v1beta1_AdmissionScope(a.(*v1beta2.AdmissionScope), b.(*AdmissionScope), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*BorrowWithinCohort)(nil), (*v1beta2.BorrowWithinCohort)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_BorrowWithinCohort_To_v1beta2_BorrowWithinCohort(a.(*BorrowWithinCohort), b.(*v1beta2.BorrowWithinCohort), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.BorrowWithinCohort)(nil), (*BorrowWithinCohort)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_BorrowWithinCohort_To_v1beta1_BorrowWithinCohort(a.(*v1beta2.BorrowWithinCohort), b.(*BorrowWithinCohort), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ClusterQueue)(nil), (*v1beta2.ClusterQueue)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ClusterQueue_To_v1beta2_ClusterQueue(a.(*ClusterQueue), b.(*v1beta2.ClusterQueue), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ClusterQueue)(nil), (*ClusterQueue)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ClusterQueue_To_v1beta1_ClusterQueue(a.(*v1beta2.ClusterQueue), b.(*ClusterQueue), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ClusterQueueList)(nil), (*v1beta2.ClusterQueueList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ClusterQueueList_To_v1beta2_ClusterQueueList(a.(*ClusterQueueList), b.(*v1beta2.ClusterQueueList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ClusterQueueList)(nil), (*ClusterQueueList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ClusterQueueList_To_v1beta1_ClusterQueueList(a.(*v1beta2.ClusterQueueList), b.(*ClusterQueueList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ClusterQueuePendingWorkload)(nil), (*v1beta2.ClusterQueuePendingWorkload)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ClusterQueuePendingWorkload_To_v1beta2_ClusterQueuePendingWorkload(a.(*ClusterQueuePendingWorkload), b.(*v1beta2.ClusterQueuePendingWorkload), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ClusterQueuePendingWorkload)(nil), (*ClusterQueuePendingWorkload)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ClusterQueuePendingWorkload_To_v1beta1_ClusterQueuePendingWorkload(a.(*v1beta2.ClusterQueuePendingWorkload), b.(*ClusterQueuePendingWorkload), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ClusterQueuePendingWorkloadsStatus)(nil), (*v1beta2.ClusterQueuePendingWorkloadsStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ClusterQueuePendingWorkloadsStatus_To_v1beta2_ClusterQueuePendingWorkloadsStatus(a.(*ClusterQueuePendingWorkloadsStatus), b.(*v1beta2.ClusterQueuePendingWorkloadsStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ClusterQueuePendingWorkloadsStatus)(nil), (*ClusterQueuePendingWorkloadsStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ClusterQueuePendingWorkloadsStatus_To_v1beta1_ClusterQueuePendingWorkloadsStatus(a.(*v1beta2.ClusterQueuePendingWorkloadsStatus), b.(*ClusterQueuePendingWorkloadsStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ClusterQueuePreemption)(nil), (*v1beta2.ClusterQueuePreemption)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ClusterQueuePreemption_To_v1beta2_ClusterQueuePreemption(a.(*ClusterQueuePreemption), b.(*v1beta2.ClusterQueuePreemption), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ClusterQueuePreemption)(nil), (*ClusterQueuePreemption)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ClusterQueuePreemption_To_v1beta1_ClusterQueuePreemption(a.(*v1beta2.ClusterQueuePreemption), b.(*ClusterQueuePreemption), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ClusterQueueStatus)(nil), (*v1beta2.ClusterQueueStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ClusterQueueStatus_To_v1beta2_ClusterQueueStatus(a.(*ClusterQueueStatus), b.(*v1beta2.ClusterQueueStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ClusterQueueStatus)(nil), (*ClusterQueueStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ClusterQueueStatus_To_v1beta1_ClusterQueueStatus(a.(*v1beta2.ClusterQueueStatus), b.(*ClusterQueueStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*Cohort)(nil), (*v1beta2.Cohort)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_Cohort_To_v1beta2_Cohort(a.(*Cohort), b.(*v1beta2.Cohort), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.Cohort)(nil), (*Cohort)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_Cohort_To_v1beta1_Cohort(a.(*v1beta2.Cohort), b.(*Cohort), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*CohortList)(nil), (*v1beta2.CohortList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_CohortList_To_v1beta2_CohortList(a.(*CohortList), b.(*v1beta2.CohortList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.CohortList)(nil), (*CohortList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_CohortList_To_v1beta1_CohortList(a.(*v1beta2.CohortList), b.(*CohortList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*CohortSpec)(nil), (*v1beta2.CohortSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_CohortSpec_To_v1beta2_CohortSpec(a.(*CohortSpec), b.(*v1beta2.CohortSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.CohortSpec)(nil), (*CohortSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_CohortSpec_To_v1beta1_CohortSpec(a.(*v1beta2.CohortSpec), b.(*CohortSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*CohortStatus)(nil), (*v1beta2.CohortStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_CohortStatus_To_v1beta2_CohortStatus(a.(*CohortStatus), b.(*v1beta2.CohortStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.CohortStatus)(nil), (*CohortStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_CohortStatus_To_v1beta1_CohortStatus(a.(*v1beta2.CohortStatus), b.(*CohortStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*FairSharing)(nil), (*v1beta2.FairSharing)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_FairSharing_To_v1beta2_FairSharing(a.(*FairSharing), b.(*v1beta2.FairSharing), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.FairSharing)(nil), (*FairSharing)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_FairSharing_To_v1beta1_FairSharing(a.(*v1beta2.FairSharing), b.(*FairSharing), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*FairSharingStatus)(nil), (*v1beta2.FairSharingStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_FairSharingStatus_To_v1beta2_FairSharingStatus(a.(*FairSharingStatus), b.(*v1beta2.FairSharingStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.FairSharingStatus)(nil), (*FairSharingStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_FairSharingStatus_To_v1beta1_FairSharingStatus(a.(*v1beta2.FairSharingStatus), b.(*FairSharingStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*FlavorFungibility)(nil), (*v1beta2.FlavorFungibility)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_FlavorFungibility_To_v1beta2_FlavorFungibility(a.(*FlavorFungibility), b.(*v1beta2.FlavorFungibility), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.FlavorFungibility)(nil), (*FlavorFungibility)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_FlavorFungibility_To_v1beta1_FlavorFungibility(a.(*v1beta2.FlavorFungibility), b.(*FlavorFungibility), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*FlavorQuotas)(nil), (*v1beta2.FlavorQuotas)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_FlavorQuotas_To_v1beta2_FlavorQuotas(a.(*FlavorQuotas), b.(*v1beta2.FlavorQuotas), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.FlavorQuotas)(nil), (*FlavorQuotas)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_FlavorQuotas_To_v1beta1_FlavorQuotas(a.(*v1beta2.FlavorQuotas), b.(*FlavorQuotas), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*FlavorUsage)(nil), (*v1beta2.FlavorUsage)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_FlavorUsage_To_v1beta2_FlavorUsage(a.(*FlavorUsage), b.(*v1beta2.FlavorUsage), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.FlavorUsage)(nil), (*FlavorUsage)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_FlavorUsage_To_v1beta1_FlavorUsage(a.(*v1beta2.FlavorUsage), b.(*FlavorUsage), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*KubeConfig)(nil), (*v1beta2.KubeConfig)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_KubeConfig_To_v1beta2_KubeConfig(a.(*KubeConfig), b.(*v1beta2.KubeConfig), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.KubeConfig)(nil), (*KubeConfig)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_KubeConfig_To_v1beta1_KubeConfig(a.(*v1beta2.KubeConfig), b.(*KubeConfig), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*LocalQueue)(nil), (*v1beta2.LocalQueue)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_LocalQueue_To_v1beta2_LocalQueue(a.(*LocalQueue), b.(*v1beta2.LocalQueue), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.LocalQueue)(nil), (*LocalQueue)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_LocalQueue_To_v1beta1_LocalQueue(a.(*v1beta2.LocalQueue), b.(*LocalQueue), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*LocalQueueFlavorStatus)(nil), (*v1beta2.LocalQueueFlavorStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_LocalQueueFlavorStatus_To_v1beta2_LocalQueueFlavorStatus(a.(*LocalQueueFlavorStatus), b.(*v1beta2.LocalQueueFlavorStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.LocalQueueFlavorStatus)(nil), (*LocalQueueFlavorStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_LocalQueueFlavorStatus_To_v1beta1_LocalQueueFlavorStatus(a.(*v1beta2.LocalQueueFlavorStatus), b.(*LocalQueueFlavorStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*LocalQueueFlavorUsage)(nil), (*v1beta2.LocalQueueFlavorUsage)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_LocalQueueFlavorUsage_To_v1beta2_LocalQueueFlavorUsage(a.(*LocalQueueFlavorUsage), b.(*v1beta2.LocalQueueFlavorUsage), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.LocalQueueFlavorUsage)(nil), (*LocalQueueFlavorUsage)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_LocalQueueFlavorUsage_To_v1beta1_LocalQueueFlavorUsage(a.(*v1beta2.LocalQueueFlavorUsage), b.(*LocalQueueFlavorUsage), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*LocalQueueList)(nil), (*v1beta2.LocalQueueList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_LocalQueueList_To_v1beta2_LocalQueueList(a.(*LocalQueueList), b.(*v1beta2.LocalQueueList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.LocalQueueList)(nil), (*LocalQueueList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_LocalQueueList_To_v1beta1_LocalQueueList(a.(*v1beta2.LocalQueueList), b.(*LocalQueueList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*LocalQueueResourceUsage)(nil), (*v1beta2.LocalQueueResourceUsage)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_LocalQueueResourceUsage_To_v1beta2_LocalQueueResourceUsage(a.(*LocalQueueResourceUsage), b.(*v1beta2.LocalQueueResourceUsage), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.LocalQueueResourceUsage)(nil), (*LocalQueueResourceUsage)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_LocalQueueResourceUsage_To_v1beta1_LocalQueueResourceUsage(a.(*v1beta2.LocalQueueResourceUsage), b.(*LocalQueueResourceUsage), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*LocalQueueSpec)(nil), (*v1beta2.LocalQueueSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_LocalQueueSpec_To_v1beta2_LocalQueueSpec(a.(*LocalQueueSpec), b.(*v1beta2.LocalQueueSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.LocalQueueSpec)(nil), (*LocalQueueSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_LocalQueueSpec_To_v1beta1_LocalQueueSpec(a.(*v1beta2.LocalQueueSpec), b.(*LocalQueueSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*MultiKueueCluster)(nil), (*v1beta2.MultiKueueCluster)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_MultiKueueCluster_To_v1beta2_MultiKueueCluster(a.(*MultiKueueCluster), b.(*v1beta2.MultiKueueCluster), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.MultiKueueCluster)(nil), (*MultiKueueCluster)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_MultiKueueCluster_To_v1beta1_MultiKueueCluster(a.(*v1beta2.MultiKueueCluster), b.(*MultiKueueCluster), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*MultiKueueClusterList)(nil), (*v1beta2.MultiKueueClusterList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_MultiKueueClusterList_To_v1beta2_MultiKueueClusterList(a.(*MultiKueueClusterList), b.(*v1beta2.MultiKueueClusterList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.MultiKueueClusterList)(nil), (*MultiKueueClusterList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_MultiKueueClusterList_To_v1beta1_MultiKueueClusterList(a.(*v1beta2.MultiKueueClusterList), b.(*MultiKueueClusterList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*MultiKueueClusterSpec)(nil), (*v1beta2.MultiKueueClusterSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_MultiKueueClusterSpec_To_v1beta2_MultiKueueClusterSpec(a.(*MultiKueueClusterSpec), b.(*v1beta2.MultiKueueClusterSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.MultiKueueClusterSpec)(nil), (*MultiKueueClusterSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_MultiKueueClusterSpec_To_v1beta1_MultiKueueClusterSpec(a.(*v1beta2.MultiKueueClusterSpec), b.(*MultiKueueClusterSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*MultiKueueClusterStatus)(nil), (*v1beta2.MultiKueueClusterStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_MultiKueueClusterStatus_To_v1beta2_MultiKueueClusterStatus(a.(*MultiKueueClusterStatus), b.(*v1beta2.MultiKueueClusterStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.MultiKueueClusterStatus)(nil), (*MultiKueueClusterStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_MultiKueueClusterStatus_To_v1beta1_MultiKueueClusterStatus(a.(*v1beta2.MultiKueueClusterStatus), b.(*MultiKueueClusterStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*MultiKueueConfig)(nil), (*v1beta2.MultiKueueConfig)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_MultiKueueConfig_To_v1beta2_MultiKueueConfig(a.(*MultiKueueConfig), b.(*v1beta2.MultiKueueConfig), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.MultiKueueConfig)(nil), (*MultiKueueConfig)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_MultiKueueConfig_To_v1beta1_MultiKueueConfig(a.(*v1beta2.MultiKueueConfig), b.(*MultiKueueConfig), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*MultiKueueConfigList)(nil), (*v1beta2.MultiKueueConfigList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_MultiKueueConfigList_To_v1beta2_MultiKueueConfigList(a.(*MultiKueueConfigList), b.(*v1beta2.MultiKueueConfigList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.MultiKueueConfigList)(nil), (*MultiKueueConfigList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_MultiKueueConfigList_To_v1beta1_MultiKueueConfigList(a.(*v1beta2.MultiKueueConfigList), b.(*MultiKueueConfigList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*MultiKueueConfigSpec)(nil), (*v1beta2.MultiKueueConfigSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_MultiKueueConfigSpec_To_v1beta2_MultiKueueConfigSpec(a.(*MultiKueueConfigSpec), b.(*v1beta2.MultiKueueConfigSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.MultiKueueConfigSpec)(nil), (*MultiKueueConfigSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_MultiKueueConfigSpec_To_v1beta1_MultiKueueConfigSpec(a.(*v1beta2.MultiKueueConfigSpec), b.(*MultiKueueConfigSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*PodSet)(nil), (*v1beta2.PodSet)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_PodSet_To_v1beta2_PodSet(a.(*PodSet), b.(*v1beta2.PodSet), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.PodSet)(nil), (*PodSet)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_PodSet_To_v1beta1_PodSet(a.(*v1beta2.PodSet), b.(*PodSet), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*PodSetAssignment)(nil), (*v1beta2.PodSetAssignment)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_PodSetAssignment_To_v1beta2_PodSetAssignment(a.(*PodSetAssignment), b.(*v1beta2.PodSetAssignment), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.PodSetAssignment)(nil), (*PodSetAssignment)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_PodSetAssignment_To_v1beta1_PodSetAssignment(a.(*v1beta2.PodSetAssignment), b.(*PodSetAssignment), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*PodSetRequest)(nil), (*v1beta2.PodSetRequest)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_PodSetRequest_To_v1beta2_PodSetRequest(a.(*PodSetRequest), b.(*v1beta2.PodSetRequest), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.PodSetRequest)(nil), (*PodSetRequest)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_PodSetRequest_To_v1beta1_PodSetRequest(a.(*v1beta2.PodSetRequest), b.(*PodSetRequest), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*PodSetTopologyRequest)(nil), (*v1beta2.PodSetTopologyRequest)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_PodSetTopologyRequest_To_v1beta2_PodSetTopologyRequest(a.(*PodSetTopologyRequest), b.(*v1beta2.PodSetTopologyRequest), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.PodSetTopologyRequest)(nil), (*PodSetTopologyRequest)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_PodSetTopologyRequest_To_v1beta1_PodSetTopologyRequest(a.(*v1beta2.PodSetTopologyRequest), b.(*PodSetTopologyRequest), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*PodSetUpdate)(nil), (*v1beta2.PodSetUpdate)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_PodSetUpdate_To_v1beta2_PodSetUpdate(a.(*PodSetUpdate), b.(*v1beta2.PodSetUpdate), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.PodSetUpdate)(nil), (*PodSetUpdate)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_PodSetUpdate_To_v1beta1_PodSetUpdate(a.(*v1beta2.PodSetUpdate), b.(*PodSetUpdate), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ProvisioningRequestConfig)(nil), (*v1beta2.ProvisioningRequestConfig)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ProvisioningRequestConfig_To_v1beta2_ProvisioningRequestConfig(a.(*ProvisioningRequestConfig), b.(*v1beta2.ProvisioningRequestConfig), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ProvisioningRequestConfig)(nil), (*ProvisioningRequestConfig)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ProvisioningRequestConfig_To_v1beta1_ProvisioningRequestConfig(a.(*v1beta2.ProvisioningRequestConfig), b.(*ProvisioningRequestConfig), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ProvisioningRequestConfigList)(nil), (*v1beta2.ProvisioningRequestConfigList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ProvisioningRequestConfigList_To_v1beta2_ProvisioningRequestConfigList(a.(*ProvisioningRequestConfigList), b.(*v1beta2.ProvisioningRequestConfigList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ProvisioningRequestConfigList)(nil), (*ProvisioningRequestConfigList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ProvisioningRequestConfigList_To_v1beta1_ProvisioningRequestConfigList(a.(*v1beta2.ProvisioningRequestConfigList), b.(*ProvisioningRequestConfigList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ProvisioningRequestConfigSpec)(nil), (*v1beta2.ProvisioningRequestConfigSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ProvisioningRequestConfigSpec_To_v1beta2_ProvisioningRequestConfigSpec(a.(*ProvisioningRequestConfigSpec), b.(*v1beta2.ProvisioningRequestConfigSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ProvisioningRequestConfigSpec)(nil), (*ProvisioningRequestConfigSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ProvisioningRequestConfigSpec_To_v1beta1_ProvisioningRequestConfigSpec(a.(*v1beta2.ProvisioningRequestConfigSpec), b.(*ProvisioningRequestConfigSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ProvisioningRequestPodSetUpdates)(nil), (*v1beta2.ProvisioningRequestPodSetUpdates)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ProvisioningRequestPodSetUpdates_To_v1beta2_ProvisioningRequestPodSetUpdates(a.(*ProvisioningRequestPodSetUpdates), b.(*v1beta2.ProvisioningRequestPodSetUpdates), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ProvisioningRequestPodSetUpdates)(nil), (*ProvisioningRequestPodSetUpdates)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ProvisioningRequestPodSetUpdates_To_v1beta1_ProvisioningRequestPodSetUpdates(a.(*v1beta2.ProvisioningRequestPodSetUpdates), b.(*ProvisioningRequestPodSetUpdates), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ProvisioningRequestPodSetUpdatesNodeSelector)(nil), (*v1beta2.ProvisioningRequestPodSetUpdatesNodeSelector)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ProvisioningRequestPodSetUpdatesNodeSelector_To_v1beta2_ProvisioningRequestPodSetUpdatesNodeSelector(a.(*ProvisioningRequestPodSetUpdatesNodeSelector), b.(*v1beta2.ProvisioningRequestPodSetUpdatesNodeSelector), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ProvisioningRequestPodSetUpdatesNodeSelector)(nil), (*ProvisioningRequestPodSetUpdatesNodeSelector)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ProvisioningRequestPodSetUpdatesNodeSelector_To_v1beta1_ProvisioningRequestPodSetUpdatesNodeSelector(a.(*v1beta2.ProvisioningRequestPodSetUpdatesNodeSelector), b.(*ProvisioningRequestPodSetUpdatesNodeSelector), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ProvisioningRequestRetryStrategy)(nil), (*v1beta2.ProvisioningRequestRetryStrategy)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ProvisioningRequestRetryStrategy_To_v1beta2_ProvisioningRequestRetryStrategy(a.(*ProvisioningRequestRetryStrategy), b.(*v1beta2.ProvisioningRequestRetryStrategy), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ProvisioningRequestRetryStrategy)(nil), (*ProvisioningRequestRetryStrategy)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ProvisioningRequestRetryStrategy_To_v1beta1_ProvisioningRequestRetryStrategy(a.(*v1beta2.ProvisioningRequestRetryStrategy), b.(*ProvisioningRequestRetryStrategy), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ReclaimablePod)(nil), (*v1beta2.ReclaimablePod)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ReclaimablePod_To_v1beta2_ReclaimablePod(a.(*ReclaimablePod), b.(*v1beta2.ReclaimablePod), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ReclaimablePod)(nil), (*ReclaimablePod)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ReclaimablePod_To_v1beta1_ReclaimablePod(a.(*v1beta2.ReclaimablePod), b.(*ReclaimablePod), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*RequeueState)(nil), (*v1beta2.RequeueState)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_RequeueState_To_v1beta2_RequeueState(a.(*RequeueState), b.(*v1beta2.RequeueState), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.RequeueState)(nil), (*RequeueState)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_RequeueState_To_v1beta1_RequeueState(a.(*v1beta2.RequeueState), b.(*RequeueState), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ResourceFlavor)(nil), (*v1beta2.ResourceFlavor)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ResourceFlavor_To_v1beta2_ResourceFlavor(a.(*ResourceFlavor), b.(*v1beta2.ResourceFlavor), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ResourceFlavor)(nil), (*ResourceFlavor)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ResourceFlavor_To_v1beta1_ResourceFlavor(a.(*v1beta2.ResourceFlavor), b.(*ResourceFlavor), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ResourceFlavorList)(nil), (*v1beta2.ResourceFlavorList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ResourceFlavorList_To_v1beta2_ResourceFlavorList(a.(*ResourceFlavorList), b.(*v1beta2.ResourceFlavorList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ResourceFlavorList)(nil), (*ResourceFlavorList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ResourceFlavorList_To_v1beta1_ResourceFlavorList(a.(*v1beta2.ResourceFlavorList), b.(*ResourceFlavorList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ResourceFlavorSpec)(nil), (*v1beta2.ResourceFlavorSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ResourceFlavorSpec_To_v1beta2_ResourceFlavorSpec(a.(*ResourceFlavorSpec), b.(*v1beta2.ResourceFlavorSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ResourceFlavorSpec)(nil), (*ResourceFlavorSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ResourceFlavorSpec_To_v1beta1_ResourceFlavorSpec(a.(*v1beta2.ResourceFlavorSpec), b.(*ResourceFlavorSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ResourceGroup)(nil), (*v1beta2.ResourceGroup)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ResourceGroup_To_v1beta2_ResourceGroup(a.(*ResourceGroup), b.(*v1beta2.ResourceGroup), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ResourceGroup)(nil), (*ResourceGroup)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ResourceGroup_To_v1beta1_ResourceGroup(a.(*v1beta2.ResourceGroup), b.(*ResourceGroup), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ResourceQuota)(nil), (*v1beta2.ResourceQuota)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ResourceQuota_To_v1beta2_ResourceQuota(a.(*ResourceQuota), b.(*v1beta2.ResourceQuota), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ResourceQuota)(nil), (*ResourceQuota)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ResourceQuota_To_v1beta1_ResourceQuota(a.(*v1beta2.ResourceQuota), b.(*ResourceQuota), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*ResourceUsage)(nil), (*v1beta2.ResourceUsage)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ResourceUsage_To_v1beta2_ResourceUsage(a.(*ResourceUsage), b.(*v1beta2.ResourceUsage), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.ResourceUsage)(nil), (*ResourceUsage)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ResourceUsage_To_v1beta1_ResourceUsage(a.(*v1beta2.ResourceUsage), b.(*ResourceUsage), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*SchedulingStats)(nil), (*v1beta2.SchedulingStats)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_SchedulingStats_To_v1beta2_SchedulingStats(a.(*SchedulingStats), b.(*v1beta2.SchedulingStats), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.SchedulingStats)(nil), (*SchedulingStats)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_SchedulingStats_To_v1beta1_SchedulingStats(a.(*v1beta2.SchedulingStats), b.(*SchedulingStats), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*Topology)(nil), (*v1beta2.Topology)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_Topology_To_v1beta2_Topology(a.(*Topology), b.(*v1beta2.Topology), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.Topology)(nil), (*Topology)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_Topology_To_v1beta1_Topology(a.(*v1beta2.Topology), b.(*Topology), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*TopologyAssignment)(nil), (*v1beta2.TopologyAssignment)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_TopologyAssignment_To_v1beta2_TopologyAssignment(a.(*TopologyAssignment), b.(*v1beta2.TopologyAssignment), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.TopologyAssignment)(nil), (*TopologyAssignment)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_TopologyAssignment_To_v1beta1_TopologyAssignment(a.(*v1beta2.TopologyAssignment), b.(*TopologyAssignment), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*TopologyDomainAssignment)(nil), (*v1beta2.TopologyDomainAssignment)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_TopologyDomainAssignment_To_v1beta2_TopologyDomainAssignment(a.(*TopologyDomainAssignment), b.(*v1beta2.TopologyDomainAssignment), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.TopologyDomainAssignment)(nil), (*TopologyDomainAssignment)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_TopologyDomainAssignment_To_v1beta1_TopologyDomainAssignment(a.(*v1beta2.TopologyDomainAssignment), b.(*TopologyDomainAssignment), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*TopologyInfo)(nil), (*v1beta2.TopologyInfo)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_TopologyInfo_To_v1beta2_TopologyInfo(a.(*TopologyInfo), b.(*v1beta2.TopologyInfo), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.TopologyInfo)(nil), (*TopologyInfo)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_TopologyInfo_To_v1beta1_TopologyInfo(a.(*v1beta2.TopologyInfo), b.(*TopologyInfo), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*TopologyLevel)(nil), (*v1beta2.TopologyLevel)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_TopologyLevel_To_v1beta2_TopologyLevel(a.(*TopologyLevel), b.(*v1beta2.TopologyLevel), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.TopologyLevel)(nil), (*TopologyLevel)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_TopologyLevel_To_v1beta1_TopologyLevel(a.(*v1beta2.TopologyLevel), b.(*TopologyLevel), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*TopologyList)(nil), (*v1beta2.TopologyList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_TopologyList_To_v1beta2_TopologyList(a.(*TopologyList), b.(*v1beta2.TopologyList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.TopologyList)(nil), (*TopologyList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_TopologyList_To_v1beta1_TopologyList(a.(*v1beta2.TopologyList), b.(*TopologyList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*TopologySpec)(nil), (*v1beta2.TopologySpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_TopologySpec_To_v1beta2_TopologySpec(a.(*TopologySpec), b.(*v1beta2.TopologySpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.TopologySpec)(nil), (*TopologySpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_TopologySpec_To_v1beta1_TopologySpec(a.(*v1beta2.TopologySpec), b.(*TopologySpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*UnhealthyNode)(nil), (*v1beta2.UnhealthyNode)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_UnhealthyNode_To_v1beta2_UnhealthyNode(a.(*UnhealthyNode), b.(*v1beta2.UnhealthyNode), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.UnhealthyNode)(nil), (*UnhealthyNode)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_UnhealthyNode_To_v1beta1_UnhealthyNode(a.(*v1beta2.UnhealthyNode), b.(*UnhealthyNode), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*Workload)(nil), (*v1beta2.Workload)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_Workload_To_v1beta2_Workload(a.(*Workload), b.(*v1beta2.Workload), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.Workload)(nil), (*Workload)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_Workload_To_v1beta1_Workload(a.(*v1beta2.Workload), b.(*Workload), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*WorkloadList)(nil), (*v1beta2.WorkloadList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_WorkloadList_To_v1beta2_WorkloadList(a.(*WorkloadList), b.(*v1beta2.WorkloadList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.WorkloadList)(nil), (*WorkloadList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_WorkloadList_To_v1beta1_WorkloadList(a.(*v1beta2.WorkloadList), b.(*WorkloadList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*WorkloadPriorityClass)(nil), (*v1beta2.WorkloadPriorityClass)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_WorkloadPriorityClass_To_v1beta2_WorkloadPriorityClass(a.(*WorkloadPriorityClass), b.(*v1beta2.WorkloadPriorityClass), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.WorkloadPriorityClass)(nil), (*WorkloadPriorityClass)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_WorkloadPriorityClass_To_v1beta1_WorkloadPriorityClass(a.(*v1beta2.WorkloadPriorityClass), b.(*WorkloadPriorityClass), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*WorkloadPriorityClassList)(nil), (*v1beta2.WorkloadPriorityClassList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_WorkloadPriorityClassList_To_v1beta2_WorkloadPriorityClassList(a.(*WorkloadPriorityClassList), b.(*v1beta2.WorkloadPriorityClassList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.WorkloadPriorityClassList)(nil), (*WorkloadPriorityClassList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_WorkloadPriorityClassList_To_v1beta1_WorkloadPriorityClassList(a.(*v1beta2.WorkloadPriorityClassList), b.(*WorkloadPriorityClassList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*WorkloadSchedulingStatsEviction)(nil), (*v1beta2.WorkloadSchedulingStatsEviction)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_WorkloadSchedulingStatsEviction_To_v1beta2_WorkloadSchedulingStatsEviction(a.(*WorkloadSchedulingStatsEviction), b.(*v1beta2.WorkloadSchedulingStatsEviction), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.WorkloadSchedulingStatsEviction)(nil), (*WorkloadSchedulingStatsEviction)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_WorkloadSchedulingStatsEviction_To_v1beta1_WorkloadSchedulingStatsEviction(a.(*v1beta2.WorkloadSchedulingStatsEviction), b.(*WorkloadSchedulingStatsEviction), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*WorkloadSpec)(nil), (*v1beta2.WorkloadSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_WorkloadSpec_To_v1beta2_WorkloadSpec(a.(*WorkloadSpec), b.(*v1beta2.WorkloadSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*v1beta2.WorkloadSpec)(nil), (*WorkloadSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_WorkloadSpec_To_v1beta1_WorkloadSpec(a.(*v1beta2.WorkloadSpec), b.(*WorkloadSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddConversionFunc((*ClusterQueueSpec)(nil), (*v1beta2.ClusterQueueSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_ClusterQueueSpec_To_v1beta2_ClusterQueueSpec(a.(*ClusterQueueSpec), b.(*v1beta2.ClusterQueueSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddConversionFunc((*LocalQueueStatus)(nil), (*v1beta2.LocalQueueStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_LocalQueueStatus_To_v1beta2_LocalQueueStatus(a.(*LocalQueueStatus), b.(*v1beta2.LocalQueueStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddConversionFunc((*WorkloadStatus)(nil), (*v1beta2.WorkloadStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_WorkloadStatus_To_v1beta2_WorkloadStatus(a.(*WorkloadStatus), b.(*v1beta2.WorkloadStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddConversionFunc((*v1beta2.ClusterQueueSpec)(nil), (*ClusterQueueSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_ClusterQueueSpec_To_v1beta1_ClusterQueueSpec(a.(*v1beta2.ClusterQueueSpec), b.(*ClusterQueueSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddConversionFunc((*v1beta2.LocalQueueStatus)(nil), (*LocalQueueStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_LocalQueueStatus_To_v1beta1_LocalQueueStatus(a.(*v1beta2.LocalQueueStatus), b.(*LocalQueueStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddConversionFunc((*v1beta2.WorkloadStatus)(nil), (*WorkloadStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta2_WorkloadStatus_To_v1beta1_WorkloadStatus(a.(*v1beta2.WorkloadStatus), b.(*WorkloadStatus), scope)
+	}); err != nil {
+		return err
+	}
+	return nil
+}
+
+func autoConvert_v1beta1_Admission_To_v1beta2_Admission(in *Admission, out *v1beta2.Admission, s conversion.Scope) error {
+	out.ClusterQueue = v1beta2.ClusterQueueReference(in.ClusterQueue)
+	out.PodSetAssignments = *(*[]v1beta2.PodSetAssignment)(unsafe.Pointer(&in.PodSetAssignments))
+	return nil
+}
+
+// Convert_v1beta1_Admission_To_v1beta2_Admission is an autogenerated conversion function.
+func Convert_v1beta1_Admission_To_v1beta2_Admission(in *Admission, out *v1beta2.Admission, s conversion.Scope) error {
+	return autoConvert_v1beta1_Admission_To_v1beta2_Admission(in, out, s)
+}
+
+func autoConvert_v1beta2_Admission_To_v1beta1_Admission(in *v1beta2.Admission, out *Admission, s conversion.Scope) error {
+	out.ClusterQueue = ClusterQueueReference(in.ClusterQueue)
+	out.PodSetAssignments = *(*[]PodSetAssignment)(unsafe.Pointer(&in.PodSetAssignments))
+	return nil
+}
+
+// Convert_v1beta2_Admission_To_v1beta1_Admission is an autogenerated conversion function.
+func Convert_v1beta2_Admission_To_v1beta1_Admission(in *v1beta2.Admission, out *Admission, s conversion.Scope) error {
+	return autoConvert_v1beta2_Admission_To_v1beta1_Admission(in, out, s)
+}
+
+func autoConvert_v1beta1_AdmissionCheck_To_v1beta2_AdmissionCheck(in *AdmissionCheck, out *v1beta2.AdmissionCheck, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta1_AdmissionCheckSpec_To_v1beta2_AdmissionCheckSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta1_AdmissionCheckStatus_To_v1beta2_AdmissionCheckStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta1_AdmissionCheck_To_v1beta2_AdmissionCheck is an autogenerated conversion function.
+func Convert_v1beta1_AdmissionCheck_To_v1beta2_AdmissionCheck(in *AdmissionCheck, out *v1beta2.AdmissionCheck, s conversion.Scope) error {
+	return autoConvert_v1beta1_AdmissionCheck_To_v1beta2_AdmissionCheck(in, out, s)
+}
+
+func autoConvert_v1beta2_AdmissionCheck_To_v1beta1_AdmissionCheck(in *v1beta2.AdmissionCheck, out *AdmissionCheck, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta2_AdmissionCheckSpec_To_v1beta1_AdmissionCheckSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta2_AdmissionCheckStatus_To_v1beta1_AdmissionCheckStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta2_AdmissionCheck_To_v1beta1_AdmissionCheck is an autogenerated conversion function.
+func Convert_v1beta2_AdmissionCheck_To_v1beta1_AdmissionCheck(in *v1beta2.AdmissionCheck, out *AdmissionCheck, s conversion.Scope) error {
+	return autoConvert_v1beta2_AdmissionCheck_To_v1beta1_AdmissionCheck(in, out, s)
+}
+
+func autoConvert_v1beta1_AdmissionCheckList_To_v1beta2_AdmissionCheckList(in *AdmissionCheckList, out *v1beta2.AdmissionCheckList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]v1beta2.AdmissionCheck)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta1_AdmissionCheckList_To_v1beta2_AdmissionCheckList is an autogenerated conversion function.
+func Convert_v1beta1_AdmissionCheckList_To_v1beta2_AdmissionCheckList(in *AdmissionCheckList, out *v1beta2.AdmissionCheckList, s conversion.Scope) error {
+	return autoConvert_v1beta1_AdmissionCheckList_To_v1beta2_AdmissionCheckList(in, out, s)
+}
+
+func autoConvert_v1beta2_AdmissionCheckList_To_v1beta1_AdmissionCheckList(in *v1beta2.AdmissionCheckList, out *AdmissionCheckList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]AdmissionCheck)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta2_AdmissionCheckList_To_v1beta1_AdmissionCheckList is an autogenerated conversion function.
+func Convert_v1beta2_AdmissionCheckList_To_v1beta1_AdmissionCheckList(in *v1beta2.AdmissionCheckList, out *AdmissionCheckList, s conversion.Scope) error {
+	return autoConvert_v1beta2_AdmissionCheckList_To_v1beta1_AdmissionCheckList(in, out, s)
+}
+
+func autoConvert_v1beta1_AdmissionCheckParametersReference_To_v1beta2_AdmissionCheckParametersReference(in *AdmissionCheckParametersReference, out *v1beta2.AdmissionCheckParametersReference, s conversion.Scope) error {
+	out.APIGroup = in.APIGroup
+	out.Kind = in.Kind
+	out.Name = in.Name
+	return nil
+}
+
+// Convert_v1beta1_AdmissionCheckParametersReference_To_v1beta2_AdmissionCheckParametersReference is an autogenerated conversion function.
+func Convert_v1beta1_AdmissionCheckParametersReference_To_v1beta2_AdmissionCheckParametersReference(in *AdmissionCheckParametersReference, out *v1beta2.AdmissionCheckParametersReference, s conversion.Scope) error {
+	return autoConvert_v1beta1_AdmissionCheckParametersReference_To_v1beta2_AdmissionCheckParametersReference(in, out, s)
+}
+
+func autoConvert_v1beta2_AdmissionCheckParametersReference_To_v1beta1_AdmissionCheckParametersReference(in *v1beta2.AdmissionCheckParametersReference, out *AdmissionCheckParametersReference, s conversion.Scope) error {
+	out.APIGroup = in.APIGroup
+	out.Kind = in.Kind
+	out.Name = in.Name
+	return nil
+}
+
+// Convert_v1beta2_AdmissionCheckParametersReference_To_v1beta1_AdmissionCheckParametersReference is an autogenerated conversion function.
+func Convert_v1beta2_AdmissionCheckParametersReference_To_v1beta1_AdmissionCheckParametersReference(in *v1beta2.AdmissionCheckParametersReference, out *AdmissionCheckParametersReference, s conversion.Scope) error {
+	return autoConvert_v1beta2_AdmissionCheckParametersReference_To_v1beta1_AdmissionCheckParametersReference(in, out, s)
+}
+
+func autoConvert_v1beta1_AdmissionCheckSpec_To_v1beta2_AdmissionCheckSpec(in *AdmissionCheckSpec, out *v1beta2.AdmissionCheckSpec, s conversion.Scope) error {
+	out.ControllerName = in.ControllerName
+	out.RetryDelayMinutes = (*int64)(unsafe.Pointer(in.RetryDelayMinutes))
+	out.Parameters = (*v1beta2.AdmissionCheckParametersReference)(unsafe.Pointer(in.Parameters))
+	return nil
+}
+
+// Convert_v1beta1_AdmissionCheckSpec_To_v1beta2_AdmissionCheckSpec is an autogenerated conversion function.
+func Convert_v1beta1_AdmissionCheckSpec_To_v1beta2_AdmissionCheckSpec(in *AdmissionCheckSpec, out *v1beta2.AdmissionCheckSpec, s conversion.Scope) error {
+	return autoConvert_v1beta1_AdmissionCheckSpec_To_v1beta2_AdmissionCheckSpec(in, out, s)
+}
+
+func autoConvert_v1beta2_AdmissionCheckSpec_To_v1beta1_AdmissionCheckSpec(in *v1beta2.AdmissionCheckSpec, out *AdmissionCheckSpec, s conversion.Scope) error {
+	out.ControllerName = in.ControllerName
+	out.RetryDelayMinutes = (*int64)(unsafe.Pointer(in.RetryDelayMinutes))
+	out.Parameters = (*AdmissionCheckParametersReference)(unsafe.Pointer(in.Parameters))
+	return nil
+}
+
+// Convert_v1beta2_AdmissionCheckSpec_To_v1beta1_AdmissionCheckSpec is an autogenerated conversion function.
+func Convert_v1beta2_AdmissionCheckSpec_To_v1beta1_AdmissionCheckSpec(in *v1beta2.AdmissionCheckSpec, out *AdmissionCheckSpec, s conversion.Scope) error {
+	return autoConvert_v1beta2_AdmissionCheckSpec_To_v1beta1_AdmissionCheckSpec(in, out, s)
+}
+
+func autoConvert_v1beta1_AdmissionCheckState_To_v1beta2_AdmissionCheckState(in *AdmissionCheckState, out *v1beta2.AdmissionCheckState, s conversion.Scope) error {
+	out.Name = v1beta2.AdmissionCheckReference(in.Name)
+	out.State = v1beta2.CheckState(in.State)
+	out.LastTransitionTime = in.LastTransitionTime
+	out.Message = in.Message
+	out.PodSetUpdates = *(*[]v1beta2.PodSetUpdate)(unsafe.Pointer(&in.PodSetUpdates))
+	return nil
+}
+
+// Convert_v1beta1_AdmissionCheckState_To_v1beta2_AdmissionCheckState is an autogenerated conversion function.
+func Convert_v1beta1_AdmissionCheckState_To_v1beta2_AdmissionCheckState(in *AdmissionCheckState, out *v1beta2.AdmissionCheckState, s conversion.Scope) error {
+	return autoConvert_v1beta1_AdmissionCheckState_To_v1beta2_AdmissionCheckState(in, out, s)
+}
+
+func autoConvert_v1beta2_AdmissionCheckState_To_v1beta1_AdmissionCheckState(in *v1beta2.AdmissionCheckState, out *AdmissionCheckState, s conversion.Scope) error {
+	out.Name = AdmissionCheckReference(in.Name)
+	out.State = CheckState(in.State)
+	out.LastTransitionTime = in.LastTransitionTime
+	out.Message = in.Message
+	out.PodSetUpdates = *(*[]PodSetUpdate)(unsafe.Pointer(&in.PodSetUpdates))
+	return nil
+}
+
+// Convert_v1beta2_AdmissionCheckState_To_v1beta1_AdmissionCheckState is an autogenerated conversion function.
+func Convert_v1beta2_AdmissionCheckState_To_v1beta1_AdmissionCheckState(in *v1beta2.AdmissionCheckState, out *AdmissionCheckState, s conversion.Scope) error {
+	return autoConvert_v1beta2_AdmissionCheckState_To_v1beta1_AdmissionCheckState(in, out, s)
+}
+
+func autoConvert_v1beta1_AdmissionCheckStatus_To_v1beta2_AdmissionCheckStatus(in *AdmissionCheckStatus, out *v1beta2.AdmissionCheckStatus, s conversion.Scope) error {
+	out.Conditions = *(*[]v1.Condition)(unsafe.Pointer(&in.Conditions))
+	return nil
+}
+
+// Convert_v1beta1_AdmissionCheckStatus_To_v1beta2_AdmissionCheckStatus is an autogenerated conversion function.
+func Convert_v1beta1_AdmissionCheckStatus_To_v1beta2_AdmissionCheckStatus(in *AdmissionCheckStatus, out *v1beta2.AdmissionCheckStatus, s conversion.Scope) error {
+	return autoConvert_v1beta1_AdmissionCheckStatus_To_v1beta2_AdmissionCheckStatus(in, out, s)
+}
+
+func autoConvert_v1beta2_AdmissionCheckStatus_To_v1beta1_AdmissionCheckStatus(in *v1beta2.AdmissionCheckStatus, out *AdmissionCheckStatus, s conversion.Scope) error {
+	out.Conditions = *(*[]v1.Condition)(unsafe.Pointer(&in.Conditions))
+	return nil
+}
+
+// Convert_v1beta2_AdmissionCheckStatus_To_v1beta1_AdmissionCheckStatus is an autogenerated conversion function.
+func Convert_v1beta2_AdmissionCheckStatus_To_v1beta1_AdmissionCheckStatus(in *v1beta2.AdmissionCheckStatus, out *AdmissionCheckStatus, s conversion.Scope) error {
+	return autoConvert_v1beta2_AdmissionCheckStatus_To_v1beta1_AdmissionCheckStatus(in, out, s)
+}
+
+func autoConvert_v1beta1_AdmissionCheckStrategyRule_To_v1beta2_AdmissionCheckStrategyRule(in *AdmissionCheckStrategyRule, out *v1beta2.AdmissionCheckStrategyRule, s conversion.Scope) error {
+	out.Name = v1beta2.AdmissionCheckReference(in.Name)
+	out.OnFlavors = *(*[]v1beta2.ResourceFlavorReference)(unsafe.Pointer(&in.OnFlavors))
+	return nil
+}
+
+// Convert_v1beta1_AdmissionCheckStrategyRule_To_v1beta2_AdmissionCheckStrategyRule is an autogenerated conversion function.
+func Convert_v1beta1_AdmissionCheckStrategyRule_To_v1beta2_AdmissionCheckStrategyRule(in *AdmissionCheckStrategyRule, out *v1beta2.AdmissionCheckStrategyRule, s conversion.Scope) error {
+	return autoConvert_v1beta1_AdmissionCheckStrategyRule_To_v1beta2_AdmissionCheckStrategyRule(in, out, s)
+}
+
+func autoConvert_v1beta2_AdmissionCheckStrategyRule_To_v1beta1_AdmissionCheckStrategyRule(in *v1beta2.AdmissionCheckStrategyRule, out *AdmissionCheckStrategyRule, s conversion.Scope) error {
+	out.Name = AdmissionCheckReference(in.Name)
+	out.OnFlavors = *(*[]ResourceFlavorReference)(unsafe.Pointer(&in.OnFlavors))
+	return nil
+}
+
+// Convert_v1beta2_AdmissionCheckStrategyRule_To_v1beta1_AdmissionCheckStrategyRule is an autogenerated conversion function.
+func Convert_v1beta2_AdmissionCheckStrategyRule_To_v1beta1_AdmissionCheckStrategyRule(in *v1beta2.AdmissionCheckStrategyRule, out *AdmissionCheckStrategyRule, s conversion.Scope) error {
+	return autoConvert_v1beta2_AdmissionCheckStrategyRule_To_v1beta1_AdmissionCheckStrategyRule(in, out, s)
+}
+
+func autoConvert_v1beta1_AdmissionChecksStrategy_To_v1beta2_AdmissionChecksStrategy(in *AdmissionChecksStrategy, out *v1beta2.AdmissionChecksStrategy, s conversion.Scope) error {
+	out.AdmissionChecks = *(*[]v1beta2.AdmissionCheckStrategyRule)(unsafe.Pointer(&in.AdmissionChecks))
+	return nil
+}
+
+// Convert_v1beta1_AdmissionChecksStrategy_To_v1beta2_AdmissionChecksStrategy is an autogenerated conversion function.
+func Convert_v1beta1_AdmissionChecksStrategy_To_v1beta2_AdmissionChecksStrategy(in *AdmissionChecksStrategy, out *v1beta2.AdmissionChecksStrategy, s conversion.Scope) error {
+	return autoConvert_v1beta1_AdmissionChecksStrategy_To_v1beta2_AdmissionChecksStrategy(in, out, s)
+}
+
+func autoConvert_v1beta2_AdmissionChecksStrategy_To_v1beta1_AdmissionChecksStrategy(in *v1beta2.AdmissionChecksStrategy, out *AdmissionChecksStrategy, s conversion.Scope) error {
+	out.AdmissionChecks = *(*[]AdmissionCheckStrategyRule)(unsafe.Pointer(&in.AdmissionChecks))
+	return nil
+}
+
+// Convert_v1beta2_AdmissionChecksStrategy_To_v1beta1_AdmissionChecksStrategy is an autogenerated conversion function.
+func Convert_v1beta2_AdmissionChecksStrategy_To_v1beta1_AdmissionChecksStrategy(in *v1beta2.AdmissionChecksStrategy, out *AdmissionChecksStrategy, s conversion.Scope) error {
+	return autoConvert_v1beta2_AdmissionChecksStrategy_To_v1beta1_AdmissionChecksStrategy(in, out, s)
+}
+
+func autoConvert_v1beta1_AdmissionFairSharingStatus_To_v1beta2_AdmissionFairSharingStatus(in *AdmissionFairSharingStatus, out *v1beta2.AdmissionFairSharingStatus, s conversion.Scope) error {
+	out.ConsumedResources = *(*corev1.ResourceList)(unsafe.Pointer(&in.ConsumedResources))
+	out.LastUpdate = in.LastUpdate
+	return nil
+}
+
+// Convert_v1beta1_AdmissionFairSharingStatus_To_v1beta2_AdmissionFairSharingStatus is an autogenerated conversion function.
+func Convert_v1beta1_AdmissionFairSharingStatus_To_v1beta2_AdmissionFairSharingStatus(in *AdmissionFairSharingStatus, out *v1beta2.AdmissionFairSharingStatus, s conversion.Scope) error {
+	return autoConvert_v1beta1_AdmissionFairSharingStatus_To_v1beta2_AdmissionFairSharingStatus(in, out, s)
+}
+
+func autoConvert_v1beta2_AdmissionFairSharingStatus_To_v1beta1_AdmissionFairSharingStatus(in *v1beta2.AdmissionFairSharingStatus, out *AdmissionFairSharingStatus, s conversion.Scope) error {
+	out.ConsumedResources = *(*corev1.ResourceList)(unsafe.Pointer(&in.ConsumedResources))
+	out.LastUpdate = in.LastUpdate
+	return nil
+}
+
+// Convert_v1beta2_AdmissionFairSharingStatus_To_v1beta1_AdmissionFairSharingStatus is an autogenerated conversion function.
+func Convert_v1beta2_AdmissionFairSharingStatus_To_v1beta1_AdmissionFairSharingStatus(in *v1beta2.AdmissionFairSharingStatus, out *AdmissionFairSharingStatus, s conversion.Scope) error {
+	return autoConvert_v1beta2_AdmissionFairSharingStatus_To_v1beta1_AdmissionFairSharingStatus(in, out, s)
+}
+
+func autoConvert_v1beta1_AdmissionScope_To_v1beta2_AdmissionScope(in *AdmissionScope, out *v1beta2.AdmissionScope, s conversion.Scope) error {
+	out.AdmissionMode = v1beta2.AdmissionMode(in.AdmissionMode)
+	return nil
+}
+
+// Convert_v1beta1_AdmissionScope_To_v1beta2_AdmissionScope is an autogenerated conversion function.
+func Convert_v1beta1_AdmissionScope_To_v1beta2_AdmissionScope(in *AdmissionScope, out *v1beta2.AdmissionScope, s conversion.Scope) error {
+	return autoConvert_v1beta1_AdmissionScope_To_v1beta2_AdmissionScope(in, out, s)
+}
+
+func autoConvert_v1beta2_AdmissionScope_To_v1beta1_AdmissionScope(in *v1beta2.AdmissionScope, out *AdmissionScope, s conversion.Scope) error {
+	out.AdmissionMode = AdmissionMode(in.AdmissionMode)
+	return nil
+}
+
+// Convert_v1beta2_AdmissionScope_To_v1beta1_AdmissionScope is an autogenerated conversion function.
+func Convert_v1beta2_AdmissionScope_To_v1beta1_AdmissionScope(in *v1beta2.AdmissionScope, out *AdmissionScope, s conversion.Scope) error {
+	return autoConvert_v1beta2_AdmissionScope_To_v1beta1_AdmissionScope(in, out, s)
+}
+
+func autoConvert_v1beta1_BorrowWithinCohort_To_v1beta2_BorrowWithinCohort(in *BorrowWithinCohort, out *v1beta2.BorrowWithinCohort, s conversion.Scope) error {
+	out.Policy = v1beta2.BorrowWithinCohortPolicy(in.Policy)
+	out.MaxPriorityThreshold = (*int32)(unsafe.Pointer(in.MaxPriorityThreshold))
+	return nil
+}
+
+// Convert_v1beta1_BorrowWithinCohort_To_v1beta2_BorrowWithinCohort is an autogenerated conversion function.
+func Convert_v1beta1_BorrowWithinCohort_To_v1beta2_BorrowWithinCohort(in *BorrowWithinCohort, out *v1beta2.BorrowWithinCohort, s conversion.Scope) error {
+	return autoConvert_v1beta1_BorrowWithinCohort_To_v1beta2_BorrowWithinCohort(in, out, s)
+}
+
+func autoConvert_v1beta2_BorrowWithinCohort_To_v1beta1_BorrowWithinCohort(in *v1beta2.BorrowWithinCohort, out *BorrowWithinCohort, s conversion.Scope) error {
+	out.Policy = BorrowWithinCohortPolicy(in.Policy)
+	out.MaxPriorityThreshold = (*int32)(unsafe.Pointer(in.MaxPriorityThreshold))
+	return nil
+}
+
+// Convert_v1beta2_BorrowWithinCohort_To_v1beta1_BorrowWithinCohort is an autogenerated conversion function.
+func Convert_v1beta2_BorrowWithinCohort_To_v1beta1_BorrowWithinCohort(in *v1beta2.BorrowWithinCohort, out *BorrowWithinCohort, s conversion.Scope) error {
+	return autoConvert_v1beta2_BorrowWithinCohort_To_v1beta1_BorrowWithinCohort(in, out, s)
+}
+
+func autoConvert_v1beta1_ClusterQueue_To_v1beta2_ClusterQueue(in *ClusterQueue, out *v1beta2.ClusterQueue, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta1_ClusterQueueSpec_To_v1beta2_ClusterQueueSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta1_ClusterQueueStatus_To_v1beta2_ClusterQueueStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta1_ClusterQueue_To_v1beta2_ClusterQueue is an autogenerated conversion function.
+func Convert_v1beta1_ClusterQueue_To_v1beta2_ClusterQueue(in *ClusterQueue, out *v1beta2.ClusterQueue, s conversion.Scope) error {
+	return autoConvert_v1beta1_ClusterQueue_To_v1beta2_ClusterQueue(in, out, s)
+}
+
+func autoConvert_v1beta2_ClusterQueue_To_v1beta1_ClusterQueue(in *v1beta2.ClusterQueue, out *ClusterQueue, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta2_ClusterQueueSpec_To_v1beta1_ClusterQueueSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta2_ClusterQueueStatus_To_v1beta1_ClusterQueueStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta2_ClusterQueue_To_v1beta1_ClusterQueue is an autogenerated conversion function.
+func Convert_v1beta2_ClusterQueue_To_v1beta1_ClusterQueue(in *v1beta2.ClusterQueue, out *ClusterQueue, s conversion.Scope) error {
+	return autoConvert_v1beta2_ClusterQueue_To_v1beta1_ClusterQueue(in, out, s)
+}
+
+func autoConvert_v1beta1_ClusterQueueList_To_v1beta2_ClusterQueueList(in *ClusterQueueList, out *v1beta2.ClusterQueueList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]v1beta2.ClusterQueue, len(*in))
+		for i := range *in {
+			if err := Convert_v1beta1_ClusterQueue_To_v1beta2_ClusterQueue(&(*in)[i], &(*out)[i], s); err != nil {
+				return err
+			}
+		}
+	} else {
+		out.Items = nil
+	}
+	return nil
+}
+
+// Convert_v1beta1_ClusterQueueList_To_v1beta2_ClusterQueueList is an autogenerated conversion function.
+func Convert_v1beta1_ClusterQueueList_To_v1beta2_ClusterQueueList(in *ClusterQueueList, out *v1beta2.ClusterQueueList, s conversion.Scope) error {
+	return autoConvert_v1beta1_ClusterQueueList_To_v1beta2_ClusterQueueList(in, out, s)
+}
+
+func autoConvert_v1beta2_ClusterQueueList_To_v1beta1_ClusterQueueList(in *v1beta2.ClusterQueueList, out *ClusterQueueList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]ClusterQueue, len(*in))
+		for i := range *in {
+			if err := Convert_v1beta2_ClusterQueue_To_v1beta1_ClusterQueue(&(*in)[i], &(*out)[i], s); err != nil {
+				return err
+			}
+		}
+	} else {
+		out.Items = nil
+	}
+	return nil
+}
+
+// Convert_v1beta2_ClusterQueueList_To_v1beta1_ClusterQueueList is an autogenerated conversion function.
+func Convert_v1beta2_ClusterQueueList_To_v1beta1_ClusterQueueList(in *v1beta2.ClusterQueueList, out *ClusterQueueList, s conversion.Scope) error {
+	return autoConvert_v1beta2_ClusterQueueList_To_v1beta1_ClusterQueueList(in, out, s)
+}
+
+func autoConvert_v1beta1_ClusterQueuePendingWorkload_To_v1beta2_ClusterQueuePendingWorkload(in *ClusterQueuePendingWorkload, out *v1beta2.ClusterQueuePendingWorkload, s conversion.Scope) error {
+	out.Name = in.Name
+	out.Namespace = in.Namespace
+	return nil
+}
+
+// Convert_v1beta1_ClusterQueuePendingWorkload_To_v1beta2_ClusterQueuePendingWorkload is an autogenerated conversion function.
+func Convert_v1beta1_ClusterQueuePendingWorkload_To_v1beta2_ClusterQueuePendingWorkload(in *ClusterQueuePendingWorkload, out *v1beta2.ClusterQueuePendingWorkload, s conversion.Scope) error {
+	return autoConvert_v1beta1_ClusterQueuePendingWorkload_To_v1beta2_ClusterQueuePendingWorkload(in, out, s)
+}
+
+func autoConvert_v1beta2_ClusterQueuePendingWorkload_To_v1beta1_ClusterQueuePendingWorkload(in *v1beta2.ClusterQueuePendingWorkload, out *ClusterQueuePendingWorkload, s conversion.Scope) error {
+	out.Name = in.Name
+	out.Namespace = in.Namespace
+	return nil
+}
+
+// Convert_v1beta2_ClusterQueuePendingWorkload_To_v1beta1_ClusterQueuePendingWorkload is an autogenerated conversion function.
+func Convert_v1beta2_ClusterQueuePendingWorkload_To_v1beta1_ClusterQueuePendingWorkload(in *v1beta2.ClusterQueuePendingWorkload, out *ClusterQueuePendingWorkload, s conversion.Scope) error {
+	return autoConvert_v1beta2_ClusterQueuePendingWorkload_To_v1beta1_ClusterQueuePendingWorkload(in, out, s)
+}
+
+func autoConvert_v1beta1_ClusterQueuePendingWorkloadsStatus_To_v1beta2_ClusterQueuePendingWorkloadsStatus(in *ClusterQueuePendingWorkloadsStatus, out *v1beta2.ClusterQueuePendingWorkloadsStatus, s conversion.Scope) error {
+	out.Head = *(*[]v1beta2.ClusterQueuePendingWorkload)(unsafe.Pointer(&in.Head))
+	out.LastChangeTime = in.LastChangeTime
+	return nil
+}
+
+// Convert_v1beta1_ClusterQueuePendingWorkloadsStatus_To_v1beta2_ClusterQueuePendingWorkloadsStatus is an autogenerated conversion function.
+func Convert_v1beta1_ClusterQueuePendingWorkloadsStatus_To_v1beta2_ClusterQueuePendingWorkloadsStatus(in *ClusterQueuePendingWorkloadsStatus, out *v1beta2.ClusterQueuePendingWorkloadsStatus, s conversion.Scope) error {
+	return autoConvert_v1beta1_ClusterQueuePendingWorkloadsStatus_To_v1beta2_ClusterQueuePendingWorkloadsStatus(in, out, s)
+}
+
+func autoConvert_v1beta2_ClusterQueuePendingWorkloadsStatus_To_v1beta1_ClusterQueuePendingWorkloadsStatus(in *v1beta2.ClusterQueuePendingWorkloadsStatus, out *ClusterQueuePendingWorkloadsStatus, s conversion.Scope) error {
+	out.Head = *(*[]ClusterQueuePendingWorkload)(unsafe.Pointer(&in.Head))
+	out.LastChangeTime = in.LastChangeTime
+	return nil
+}
+
+// Convert_v1beta2_ClusterQueuePendingWorkloadsStatus_To_v1beta1_ClusterQueuePendingWorkloadsStatus is an autogenerated conversion function.
+func Convert_v1beta2_ClusterQueuePendingWorkloadsStatus_To_v1beta1_ClusterQueuePendingWorkloadsStatus(in *v1beta2.ClusterQueuePendingWorkloadsStatus, out *ClusterQueuePendingWorkloadsStatus, s conversion.Scope) error {
+	return autoConvert_v1beta2_ClusterQueuePendingWorkloadsStatus_To_v1beta1_ClusterQueuePendingWorkloadsStatus(in, out, s)
+}
+
+func autoConvert_v1beta1_ClusterQueuePreemption_To_v1beta2_ClusterQueuePreemption(in *ClusterQueuePreemption, out *v1beta2.ClusterQueuePreemption, s conversion.Scope) error {
+	out.ReclaimWithinCohort = v1beta2.PreemptionPolicy(in.ReclaimWithinCohort)
+	out.BorrowWithinCohort = (*v1beta2.BorrowWithinCohort)(unsafe.Pointer(in.BorrowWithinCohort))
+	out.WithinClusterQueue = v1beta2.PreemptionPolicy(in.WithinClusterQueue)
+	return nil
+}
+
+// Convert_v1beta1_ClusterQueuePreemption_To_v1beta2_ClusterQueuePreemption is an autogenerated conversion function.
+func Convert_v1beta1_ClusterQueuePreemption_To_v1beta2_ClusterQueuePreemption(in *ClusterQueuePreemption, out *v1beta2.ClusterQueuePreemption, s conversion.Scope) error {
+	return autoConvert_v1beta1_ClusterQueuePreemption_To_v1beta2_ClusterQueuePreemption(in, out, s)
+}
+
+func autoConvert_v1beta2_ClusterQueuePreemption_To_v1beta1_ClusterQueuePreemption(in *v1beta2.ClusterQueuePreemption, out *ClusterQueuePreemption, s conversion.Scope) error {
+	out.ReclaimWithinCohort = PreemptionPolicy(in.ReclaimWithinCohort)
+	out.BorrowWithinCohort = (*BorrowWithinCohort)(unsafe.Pointer(in.BorrowWithinCohort))
+	out.WithinClusterQueue = PreemptionPolicy(in.WithinClusterQueue)
+	return nil
+}
+
+// Convert_v1beta2_ClusterQueuePreemption_To_v1beta1_ClusterQueuePreemption is an autogenerated conversion function.
+func Convert_v1beta2_ClusterQueuePreemption_To_v1beta1_ClusterQueuePreemption(in *v1beta2.ClusterQueuePreemption, out *ClusterQueuePreemption, s conversion.Scope) error {
+	return autoConvert_v1beta2_ClusterQueuePreemption_To_v1beta1_ClusterQueuePreemption(in, out, s)
+}
+
+func autoConvert_v1beta1_ClusterQueueSpec_To_v1beta2_ClusterQueueSpec(in *ClusterQueueSpec, out *v1beta2.ClusterQueueSpec, s conversion.Scope) error {
+	out.ResourceGroups = *(*[]v1beta2.ResourceGroup)(unsafe.Pointer(&in.ResourceGroups))
+	// WARNING: in.Cohort requires manual conversion: does not exist in peer-type
+	out.QueueingStrategy = v1beta2.QueueingStrategy(in.QueueingStrategy)
+	out.NamespaceSelector = (*v1.LabelSelector)(unsafe.Pointer(in.NamespaceSelector))
+	out.FlavorFungibility = (*v1beta2.FlavorFungibility)(unsafe.Pointer(in.FlavorFungibility))
+	out.Preemption = (*v1beta2.ClusterQueuePreemption)(unsafe.Pointer(in.Preemption))
+	out.AdmissionChecks = *(*[]v1beta2.AdmissionCheckReference)(unsafe.Pointer(&in.AdmissionChecks))
+	out.AdmissionChecksStrategy = (*v1beta2.AdmissionChecksStrategy)(unsafe.Pointer(in.AdmissionChecksStrategy))
+	out.StopPolicy = (*v1beta2.StopPolicy)(unsafe.Pointer(in.StopPolicy))
+	out.FairSharing = (*v1beta2.FairSharing)(unsafe.Pointer(in.FairSharing))
+	out.AdmissionScope = (*v1beta2.AdmissionScope)(unsafe.Pointer(in.AdmissionScope))
+	return nil
+}
+
+func autoConvert_v1beta2_ClusterQueueSpec_To_v1beta1_ClusterQueueSpec(in *v1beta2.ClusterQueueSpec, out *ClusterQueueSpec, s conversion.Scope) error {
+	out.ResourceGroups = *(*[]ResourceGroup)(unsafe.Pointer(&in.ResourceGroups))
+	// WARNING: in.CohortName requires manual conversion: does not exist in peer-type
+	out.QueueingStrategy = QueueingStrategy(in.QueueingStrategy)
+	out.NamespaceSelector = (*v1.LabelSelector)(unsafe.Pointer(in.NamespaceSelector))
+	out.FlavorFungibility = (*FlavorFungibility)(unsafe.Pointer(in.FlavorFungibility))
+	out.Preemption = (*ClusterQueuePreemption)(unsafe.Pointer(in.Preemption))
+	out.AdmissionChecks = *(*[]AdmissionCheckReference)(unsafe.Pointer(&in.AdmissionChecks))
+	out.AdmissionChecksStrategy = (*AdmissionChecksStrategy)(unsafe.Pointer(in.AdmissionChecksStrategy))
+	out.StopPolicy = (*StopPolicy)(unsafe.Pointer(in.StopPolicy))
+	out.FairSharing = (*FairSharing)(unsafe.Pointer(in.FairSharing))
+	out.AdmissionScope = (*AdmissionScope)(unsafe.Pointer(in.AdmissionScope))
+	return nil
+}
+
+func autoConvert_v1beta1_ClusterQueueStatus_To_v1beta2_ClusterQueueStatus(in *ClusterQueueStatus, out *v1beta2.ClusterQueueStatus, s conversion.Scope) error {
+	out.Conditions = *(*[]v1.Condition)(unsafe.Pointer(&in.Conditions))
+	out.FlavorsReservation = *(*[]v1beta2.FlavorUsage)(unsafe.Pointer(&in.FlavorsReservation))
+	out.FlavorsUsage = *(*[]v1beta2.FlavorUsage)(unsafe.Pointer(&in.FlavorsUsage))
+	out.PendingWorkloads = in.PendingWorkloads
+	out.ReservingWorkloads = in.ReservingWorkloads
+	out.AdmittedWorkloads = in.AdmittedWorkloads
+	out.PendingWorkloadsStatus = (*v1beta2.ClusterQueuePendingWorkloadsStatus)(unsafe.Pointer(in.PendingWorkloadsStatus))
+	out.FairSharing = (*v1beta2.FairSharingStatus)(unsafe.Pointer(in.FairSharing))
+	return nil
+}
+
+// Convert_v1beta1_ClusterQueueStatus_To_v1beta2_ClusterQueueStatus is an autogenerated conversion function.
+func Convert_v1beta1_ClusterQueueStatus_To_v1beta2_ClusterQueueStatus(in *ClusterQueueStatus, out *v1beta2.ClusterQueueStatus, s conversion.Scope) error {
+	return autoConvert_v1beta1_ClusterQueueStatus_To_v1beta2_ClusterQueueStatus(in, out, s)
+}
+
+func autoConvert_v1beta2_ClusterQueueStatus_To_v1beta1_ClusterQueueStatus(in *v1beta2.ClusterQueueStatus, out *ClusterQueueStatus, s conversion.Scope) error {
+	out.Conditions = *(*[]v1.Condition)(unsafe.Pointer(&in.Conditions))
+	out.FlavorsReservation = *(*[]FlavorUsage)(unsafe.Pointer(&in.FlavorsReservation))
+	out.FlavorsUsage = *(*[]FlavorUsage)(unsafe.Pointer(&in.FlavorsUsage))
+	out.PendingWorkloads = in.PendingWorkloads
+	out.ReservingWorkloads = in.ReservingWorkloads
+	out.AdmittedWorkloads = in.AdmittedWorkloads
+	out.PendingWorkloadsStatus = (*ClusterQueuePendingWorkloadsStatus)(unsafe.Pointer(in.PendingWorkloadsStatus))
+	out.FairSharing = (*FairSharingStatus)(unsafe.Pointer(in.FairSharing))
+	return nil
+}
+
+// Convert_v1beta2_ClusterQueueStatus_To_v1beta1_ClusterQueueStatus is an autogenerated conversion function.
+func Convert_v1beta2_ClusterQueueStatus_To_v1beta1_ClusterQueueStatus(in *v1beta2.ClusterQueueStatus, out *ClusterQueueStatus, s conversion.Scope) error {
+	return autoConvert_v1beta2_ClusterQueueStatus_To_v1beta1_ClusterQueueStatus(in, out, s)
+}
+
+func autoConvert_v1beta1_Cohort_To_v1beta2_Cohort(in *Cohort, out *v1beta2.Cohort, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta1_CohortSpec_To_v1beta2_CohortSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta1_CohortStatus_To_v1beta2_CohortStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta1_Cohort_To_v1beta2_Cohort is an autogenerated conversion function.
+func Convert_v1beta1_Cohort_To_v1beta2_Cohort(in *Cohort, out *v1beta2.Cohort, s conversion.Scope) error {
+	return autoConvert_v1beta1_Cohort_To_v1beta2_Cohort(in, out, s)
+}
+
+func autoConvert_v1beta2_Cohort_To_v1beta1_Cohort(in *v1beta2.Cohort, out *Cohort, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta2_CohortSpec_To_v1beta1_CohortSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta2_CohortStatus_To_v1beta1_CohortStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta2_Cohort_To_v1beta1_Cohort is an autogenerated conversion function.
+func Convert_v1beta2_Cohort_To_v1beta1_Cohort(in *v1beta2.Cohort, out *Cohort, s conversion.Scope) error {
+	return autoConvert_v1beta2_Cohort_To_v1beta1_Cohort(in, out, s)
+}
+
+func autoConvert_v1beta1_CohortList_To_v1beta2_CohortList(in *CohortList, out *v1beta2.CohortList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]v1beta2.Cohort)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta1_CohortList_To_v1beta2_CohortList is an autogenerated conversion function.
+func Convert_v1beta1_CohortList_To_v1beta2_CohortList(in *CohortList, out *v1beta2.CohortList, s conversion.Scope) error {
+	return autoConvert_v1beta1_CohortList_To_v1beta2_CohortList(in, out, s)
+}
+
+func autoConvert_v1beta2_CohortList_To_v1beta1_CohortList(in *v1beta2.CohortList, out *CohortList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]Cohort)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta2_CohortList_To_v1beta1_CohortList is an autogenerated conversion function.
+func Convert_v1beta2_CohortList_To_v1beta1_CohortList(in *v1beta2.CohortList, out *CohortList, s conversion.Scope) error {
+	return autoConvert_v1beta2_CohortList_To_v1beta1_CohortList(in, out, s)
+}
+
+func autoConvert_v1beta1_CohortSpec_To_v1beta2_CohortSpec(in *CohortSpec, out *v1beta2.CohortSpec, s conversion.Scope) error {
+	out.ParentName = v1beta2.CohortReference(in.ParentName)
+	out.ResourceGroups = *(*[]v1beta2.ResourceGroup)(unsafe.Pointer(&in.ResourceGroups))
+	out.FairSharing = (*v1beta2.FairSharing)(unsafe.Pointer(in.FairSharing))
+	return nil
+}
+
+// Convert_v1beta1_CohortSpec_To_v1beta2_CohortSpec is an autogenerated conversion function.
+func Convert_v1beta1_CohortSpec_To_v1beta2_CohortSpec(in *CohortSpec, out *v1beta2.CohortSpec, s conversion.Scope) error {
+	return autoConvert_v1beta1_CohortSpec_To_v1beta2_CohortSpec(in, out, s)
+}
+
+func autoConvert_v1beta2_CohortSpec_To_v1beta1_CohortSpec(in *v1beta2.CohortSpec, out *CohortSpec, s conversion.Scope) error {
+	out.ParentName = CohortReference(in.ParentName)
+	out.ResourceGroups = *(*[]ResourceGroup)(unsafe.Pointer(&in.ResourceGroups))
+	out.FairSharing = (*FairSharing)(unsafe.Pointer(in.FairSharing))
+	return nil
+}
+
+// Convert_v1beta2_CohortSpec_To_v1beta1_CohortSpec is an autogenerated conversion function.
+func Convert_v1beta2_CohortSpec_To_v1beta1_CohortSpec(in *v1beta2.CohortSpec, out *CohortSpec, s conversion.Scope) error {
+	return autoConvert_v1beta2_CohortSpec_To_v1beta1_CohortSpec(in, out, s)
+}
+
+func autoConvert_v1beta1_CohortStatus_To_v1beta2_CohortStatus(in *CohortStatus, out *v1beta2.CohortStatus, s conversion.Scope) error {
+	out.FairSharing = (*v1beta2.FairSharingStatus)(unsafe.Pointer(in.FairSharing))
+	return nil
+}
+
+// Convert_v1beta1_CohortStatus_To_v1beta2_CohortStatus is an autogenerated conversion function.
+func Convert_v1beta1_CohortStatus_To_v1beta2_CohortStatus(in *CohortStatus, out *v1beta2.CohortStatus, s conversion.Scope) error {
+	return autoConvert_v1beta1_CohortStatus_To_v1beta2_CohortStatus(in, out, s)
+}
+
+func autoConvert_v1beta2_CohortStatus_To_v1beta1_CohortStatus(in *v1beta2.CohortStatus, out *CohortStatus, s conversion.Scope) error {
+	out.FairSharing = (*FairSharingStatus)(unsafe.Pointer(in.FairSharing))
+	return nil
+}
+
+// Convert_v1beta2_CohortStatus_To_v1beta1_CohortStatus is an autogenerated conversion function.
+func Convert_v1beta2_CohortStatus_To_v1beta1_CohortStatus(in *v1beta2.CohortStatus, out *CohortStatus, s conversion.Scope) error {
+	return autoConvert_v1beta2_CohortStatus_To_v1beta1_CohortStatus(in, out, s)
+}
+
+func autoConvert_v1beta1_FairSharing_To_v1beta2_FairSharing(in *FairSharing, out *v1beta2.FairSharing, s conversion.Scope) error {
+	out.Weight = (*resource.Quantity)(unsafe.Pointer(in.Weight))
+	return nil
+}
+
+// Convert_v1beta1_FairSharing_To_v1beta2_FairSharing is an autogenerated conversion function.
+func Convert_v1beta1_FairSharing_To_v1beta2_FairSharing(in *FairSharing, out *v1beta2.FairSharing, s conversion.Scope) error {
+	return autoConvert_v1beta1_FairSharing_To_v1beta2_FairSharing(in, out, s)
+}
+
+func autoConvert_v1beta2_FairSharing_To_v1beta1_FairSharing(in *v1beta2.FairSharing, out *FairSharing, s conversion.Scope) error {
+	out.Weight = (*resource.Quantity)(unsafe.Pointer(in.Weight))
+	return nil
+}
+
+// Convert_v1beta2_FairSharing_To_v1beta1_FairSharing is an autogenerated conversion function.
+func Convert_v1beta2_FairSharing_To_v1beta1_FairSharing(in *v1beta2.FairSharing, out *FairSharing, s conversion.Scope) error {
+	return autoConvert_v1beta2_FairSharing_To_v1beta1_FairSharing(in, out, s)
+}
+
+func autoConvert_v1beta1_FairSharingStatus_To_v1beta2_FairSharingStatus(in *FairSharingStatus, out *v1beta2.FairSharingStatus, s conversion.Scope) error {
+	out.WeightedShare = in.WeightedShare
+	out.AdmissionFairSharingStatus = (*v1beta2.AdmissionFairSharingStatus)(unsafe.Pointer(in.AdmissionFairSharingStatus))
+	return nil
+}
+
+// Convert_v1beta1_FairSharingStatus_To_v1beta2_FairSharingStatus is an autogenerated conversion function.
+func Convert_v1beta1_FairSharingStatus_To_v1beta2_FairSharingStatus(in *FairSharingStatus, out *v1beta2.FairSharingStatus, s conversion.Scope) error {
+	return autoConvert_v1beta1_FairSharingStatus_To_v1beta2_FairSharingStatus(in, out, s)
+}
+
+func autoConvert_v1beta2_FairSharingStatus_To_v1beta1_FairSharingStatus(in *v1beta2.FairSharingStatus, out *FairSharingStatus, s conversion.Scope) error {
+	out.WeightedShare = in.WeightedShare
+	out.AdmissionFairSharingStatus = (*AdmissionFairSharingStatus)(unsafe.Pointer(in.AdmissionFairSharingStatus))
+	return nil
+}
+
+// Convert_v1beta2_FairSharingStatus_To_v1beta1_FairSharingStatus is an autogenerated conversion function.
+func Convert_v1beta2_FairSharingStatus_To_v1beta1_FairSharingStatus(in *v1beta2.FairSharingStatus, out *FairSharingStatus, s conversion.Scope) error {
+	return autoConvert_v1beta2_FairSharingStatus_To_v1beta1_FairSharingStatus(in, out, s)
+}
+
+func autoConvert_v1beta1_FlavorFungibility_To_v1beta2_FlavorFungibility(in *FlavorFungibility, out *v1beta2.FlavorFungibility, s conversion.Scope) error {
+	out.WhenCanBorrow = v1beta2.FlavorFungibilityPolicy(in.WhenCanBorrow)
+	out.WhenCanPreempt = v1beta2.FlavorFungibilityPolicy(in.WhenCanPreempt)
+	return nil
+}
+
+// Convert_v1beta1_FlavorFungibility_To_v1beta2_FlavorFungibility is an autogenerated conversion function.
+func Convert_v1beta1_FlavorFungibility_To_v1beta2_FlavorFungibility(in *FlavorFungibility, out *v1beta2.FlavorFungibility, s conversion.Scope) error {
+	return autoConvert_v1beta1_FlavorFungibility_To_v1beta2_FlavorFungibility(in, out, s)
+}
+
+func autoConvert_v1beta2_FlavorFungibility_To_v1beta1_FlavorFungibility(in *v1beta2.FlavorFungibility, out *FlavorFungibility, s conversion.Scope) error {
+	out.WhenCanBorrow = FlavorFungibilityPolicy(in.WhenCanBorrow)
+	out.WhenCanPreempt = FlavorFungibilityPolicy(in.WhenCanPreempt)
+	return nil
+}
+
+// Convert_v1beta2_FlavorFungibility_To_v1beta1_FlavorFungibility is an autogenerated conversion function.
+func Convert_v1beta2_FlavorFungibility_To_v1beta1_FlavorFungibility(in *v1beta2.FlavorFungibility, out *FlavorFungibility, s conversion.Scope) error {
+	return autoConvert_v1beta2_FlavorFungibility_To_v1beta1_FlavorFungibility(in, out, s)
+}
+
+func autoConvert_v1beta1_FlavorQuotas_To_v1beta2_FlavorQuotas(in *FlavorQuotas, out *v1beta2.FlavorQuotas, s conversion.Scope) error {
+	out.Name = v1beta2.ResourceFlavorReference(in.Name)
+	out.Resources = *(*[]v1beta2.ResourceQuota)(unsafe.Pointer(&in.Resources))
+	return nil
+}
+
+// Convert_v1beta1_FlavorQuotas_To_v1beta2_FlavorQuotas is an autogenerated conversion function.
+func Convert_v1beta1_FlavorQuotas_To_v1beta2_FlavorQuotas(in *FlavorQuotas, out *v1beta2.FlavorQuotas, s conversion.Scope) error {
+	return autoConvert_v1beta1_FlavorQuotas_To_v1beta2_FlavorQuotas(in, out, s)
+}
+
+func autoConvert_v1beta2_FlavorQuotas_To_v1beta1_FlavorQuotas(in *v1beta2.FlavorQuotas, out *FlavorQuotas, s conversion.Scope) error {
+	out.Name = ResourceFlavorReference(in.Name)
+	out.Resources = *(*[]ResourceQuota)(unsafe.Pointer(&in.Resources))
+	return nil
+}
+
+// Convert_v1beta2_FlavorQuotas_To_v1beta1_FlavorQuotas is an autogenerated conversion function.
+func Convert_v1beta2_FlavorQuotas_To_v1beta1_FlavorQuotas(in *v1beta2.FlavorQuotas, out *FlavorQuotas, s conversion.Scope) error {
+	return autoConvert_v1beta2_FlavorQuotas_To_v1beta1_FlavorQuotas(in, out, s)
+}
+
+func autoConvert_v1beta1_FlavorUsage_To_v1beta2_FlavorUsage(in *FlavorUsage, out *v1beta2.FlavorUsage, s conversion.Scope) error {
+	out.Name = v1beta2.ResourceFlavorReference(in.Name)
+	out.Resources = *(*[]v1beta2.ResourceUsage)(unsafe.Pointer(&in.Resources))
+	return nil
+}
+
+// Convert_v1beta1_FlavorUsage_To_v1beta2_FlavorUsage is an autogenerated conversion function.
+func Convert_v1beta1_FlavorUsage_To_v1beta2_FlavorUsage(in *FlavorUsage, out *v1beta2.FlavorUsage, s conversion.Scope) error {
+	return autoConvert_v1beta1_FlavorUsage_To_v1beta2_FlavorUsage(in, out, s)
+}
+
+func autoConvert_v1beta2_FlavorUsage_To_v1beta1_FlavorUsage(in *v1beta2.FlavorUsage, out *FlavorUsage, s conversion.Scope) error {
+	out.Name = ResourceFlavorReference(in.Name)
+	out.Resources = *(*[]ResourceUsage)(unsafe.Pointer(&in.Resources))
+	return nil
+}
+
+// Convert_v1beta2_FlavorUsage_To_v1beta1_FlavorUsage is an autogenerated conversion function.
+func Convert_v1beta2_FlavorUsage_To_v1beta1_FlavorUsage(in *v1beta2.FlavorUsage, out *FlavorUsage, s conversion.Scope) error {
+	return autoConvert_v1beta2_FlavorUsage_To_v1beta1_FlavorUsage(in, out, s)
+}
+
+func autoConvert_v1beta1_KubeConfig_To_v1beta2_KubeConfig(in *KubeConfig, out *v1beta2.KubeConfig, s conversion.Scope) error {
+	out.Location = in.Location
+	out.LocationType = v1beta2.LocationType(in.LocationType)
+	return nil
+}
+
+// Convert_v1beta1_KubeConfig_To_v1beta2_KubeConfig is an autogenerated conversion function.
+func Convert_v1beta1_KubeConfig_To_v1beta2_KubeConfig(in *KubeConfig, out *v1beta2.KubeConfig, s conversion.Scope) error {
+	return autoConvert_v1beta1_KubeConfig_To_v1beta2_KubeConfig(in, out, s)
+}
+
+func autoConvert_v1beta2_KubeConfig_To_v1beta1_KubeConfig(in *v1beta2.KubeConfig, out *KubeConfig, s conversion.Scope) error {
+	out.Location = in.Location
+	out.LocationType = LocationType(in.LocationType)
+	return nil
+}
+
+// Convert_v1beta2_KubeConfig_To_v1beta1_KubeConfig is an autogenerated conversion function.
+func Convert_v1beta2_KubeConfig_To_v1beta1_KubeConfig(in *v1beta2.KubeConfig, out *KubeConfig, s conversion.Scope) error {
+	return autoConvert_v1beta2_KubeConfig_To_v1beta1_KubeConfig(in, out, s)
+}
+
+func autoConvert_v1beta1_LocalQueue_To_v1beta2_LocalQueue(in *LocalQueue, out *v1beta2.LocalQueue, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta1_LocalQueueSpec_To_v1beta2_LocalQueueSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta1_LocalQueueStatus_To_v1beta2_LocalQueueStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta1_LocalQueue_To_v1beta2_LocalQueue is an autogenerated conversion function.
+func Convert_v1beta1_LocalQueue_To_v1beta2_LocalQueue(in *LocalQueue, out *v1beta2.LocalQueue, s conversion.Scope) error {
+	return autoConvert_v1beta1_LocalQueue_To_v1beta2_LocalQueue(in, out, s)
+}
+
+func autoConvert_v1beta2_LocalQueue_To_v1beta1_LocalQueue(in *v1beta2.LocalQueue, out *LocalQueue, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta2_LocalQueueSpec_To_v1beta1_LocalQueueSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta2_LocalQueueStatus_To_v1beta1_LocalQueueStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta2_LocalQueue_To_v1beta1_LocalQueue is an autogenerated conversion function.
+func Convert_v1beta2_LocalQueue_To_v1beta1_LocalQueue(in *v1beta2.LocalQueue, out *LocalQueue, s conversion.Scope) error {
+	return autoConvert_v1beta2_LocalQueue_To_v1beta1_LocalQueue(in, out, s)
+}
+
+func autoConvert_v1beta1_LocalQueueFlavorStatus_To_v1beta2_LocalQueueFlavorStatus(in *LocalQueueFlavorStatus, out *v1beta2.LocalQueueFlavorStatus, s conversion.Scope) error {
+	out.Name = v1beta2.ResourceFlavorReference(in.Name)
+	out.Resources = *(*[]corev1.ResourceName)(unsafe.Pointer(&in.Resources))
+	out.NodeLabels = *(*map[string]string)(unsafe.Pointer(&in.NodeLabels))
+	out.NodeTaints = *(*[]corev1.Taint)(unsafe.Pointer(&in.NodeTaints))
+	out.Topology = (*v1beta2.TopologyInfo)(unsafe.Pointer(in.Topology))
+	return nil
+}
+
+// Convert_v1beta1_LocalQueueFlavorStatus_To_v1beta2_LocalQueueFlavorStatus is an autogenerated conversion function.
+func Convert_v1beta1_LocalQueueFlavorStatus_To_v1beta2_LocalQueueFlavorStatus(in *LocalQueueFlavorStatus, out *v1beta2.LocalQueueFlavorStatus, s conversion.Scope) error {
+	return autoConvert_v1beta1_LocalQueueFlavorStatus_To_v1beta2_LocalQueueFlavorStatus(in, out, s)
+}
+
+func autoConvert_v1beta2_LocalQueueFlavorStatus_To_v1beta1_LocalQueueFlavorStatus(in *v1beta2.LocalQueueFlavorStatus, out *LocalQueueFlavorStatus, s conversion.Scope) error {
+	out.Name = ResourceFlavorReference(in.Name)
+	out.Resources = *(*[]corev1.ResourceName)(unsafe.Pointer(&in.Resources))
+	out.NodeLabels = *(*map[string]string)(unsafe.Pointer(&in.NodeLabels))
+	out.NodeTaints = *(*[]corev1.Taint)(unsafe.Pointer(&in.NodeTaints))
+	out.Topology = (*TopologyInfo)(unsafe.Pointer(in.Topology))
+	return nil
+}
+
+// Convert_v1beta2_LocalQueueFlavorStatus_To_v1beta1_LocalQueueFlavorStatus is an autogenerated conversion function.
+func Convert_v1beta2_LocalQueueFlavorStatus_To_v1beta1_LocalQueueFlavorStatus(in *v1beta2.LocalQueueFlavorStatus, out *LocalQueueFlavorStatus, s conversion.Scope) error {
+	return autoConvert_v1beta2_LocalQueueFlavorStatus_To_v1beta1_LocalQueueFlavorStatus(in, out, s)
+}
+
+func autoConvert_v1beta1_LocalQueueFlavorUsage_To_v1beta2_LocalQueueFlavorUsage(in *LocalQueueFlavorUsage, out *v1beta2.LocalQueueFlavorUsage, s conversion.Scope) error {
+	out.Name = v1beta2.ResourceFlavorReference(in.Name)
+	out.Resources = *(*[]v1beta2.LocalQueueResourceUsage)(unsafe.Pointer(&in.Resources))
+	return nil
+}
+
+// Convert_v1beta1_LocalQueueFlavorUsage_To_v1beta2_LocalQueueFlavorUsage is an autogenerated conversion function.
+func Convert_v1beta1_LocalQueueFlavorUsage_To_v1beta2_LocalQueueFlavorUsage(in *LocalQueueFlavorUsage, out *v1beta2.LocalQueueFlavorUsage, s conversion.Scope) error {
+	return autoConvert_v1beta1_LocalQueueFlavorUsage_To_v1beta2_LocalQueueFlavorUsage(in, out, s)
+}
+
+func autoConvert_v1beta2_LocalQueueFlavorUsage_To_v1beta1_LocalQueueFlavorUsage(in *v1beta2.LocalQueueFlavorUsage, out *LocalQueueFlavorUsage, s conversion.Scope) error {
+	out.Name = ResourceFlavorReference(in.Name)
+	out.Resources = *(*[]LocalQueueResourceUsage)(unsafe.Pointer(&in.Resources))
+	return nil
+}
+
+// Convert_v1beta2_LocalQueueFlavorUsage_To_v1beta1_LocalQueueFlavorUsage is an autogenerated conversion function.
+func Convert_v1beta2_LocalQueueFlavorUsage_To_v1beta1_LocalQueueFlavorUsage(in *v1beta2.LocalQueueFlavorUsage, out *LocalQueueFlavorUsage, s conversion.Scope) error {
+	return autoConvert_v1beta2_LocalQueueFlavorUsage_To_v1beta1_LocalQueueFlavorUsage(in, out, s)
+}
+
+func autoConvert_v1beta1_LocalQueueList_To_v1beta2_LocalQueueList(in *LocalQueueList, out *v1beta2.LocalQueueList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]v1beta2.LocalQueue, len(*in))
+		for i := range *in {
+			if err := Convert_v1beta1_LocalQueue_To_v1beta2_LocalQueue(&(*in)[i], &(*out)[i], s); err != nil {
+				return err
+			}
+		}
+	} else {
+		out.Items = nil
+	}
+	return nil
+}
+
+// Convert_v1beta1_LocalQueueList_To_v1beta2_LocalQueueList is an autogenerated conversion function.
+func Convert_v1beta1_LocalQueueList_To_v1beta2_LocalQueueList(in *LocalQueueList, out *v1beta2.LocalQueueList, s conversion.Scope) error {
+	return autoConvert_v1beta1_LocalQueueList_To_v1beta2_LocalQueueList(in, out, s)
+}
+
+func autoConvert_v1beta2_LocalQueueList_To_v1beta1_LocalQueueList(in *v1beta2.LocalQueueList, out *LocalQueueList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]LocalQueue, len(*in))
+		for i := range *in {
+			if err := Convert_v1beta2_LocalQueue_To_v1beta1_LocalQueue(&(*in)[i], &(*out)[i], s); err != nil {
+				return err
+			}
+		}
+	} else {
+		out.Items = nil
+	}
+	return nil
+}
+
+// Convert_v1beta2_LocalQueueList_To_v1beta1_LocalQueueList is an autogenerated conversion function.
+func Convert_v1beta2_LocalQueueList_To_v1beta1_LocalQueueList(in *v1beta2.LocalQueueList, out *LocalQueueList, s conversion.Scope) error {
+	return autoConvert_v1beta2_LocalQueueList_To_v1beta1_LocalQueueList(in, out, s)
+}
+
+func autoConvert_v1beta1_LocalQueueResourceUsage_To_v1beta2_LocalQueueResourceUsage(in *LocalQueueResourceUsage, out *v1beta2.LocalQueueResourceUsage, s conversion.Scope) error {
+	out.Name = corev1.ResourceName(in.Name)
+	out.Total = in.Total
+	return nil
+}
+
+// Convert_v1beta1_LocalQueueResourceUsage_To_v1beta2_LocalQueueResourceUsage is an autogenerated conversion function.
+func Convert_v1beta1_LocalQueueResourceUsage_To_v1beta2_LocalQueueResourceUsage(in *LocalQueueResourceUsage, out *v1beta2.LocalQueueResourceUsage, s conversion.Scope) error {
+	return autoConvert_v1beta1_LocalQueueResourceUsage_To_v1beta2_LocalQueueResourceUsage(in, out, s)
+}
+
+func autoConvert_v1beta2_LocalQueueResourceUsage_To_v1beta1_LocalQueueResourceUsage(in *v1beta2.LocalQueueResourceUsage, out *LocalQueueResourceUsage, s conversion.Scope) error {
+	out.Name = corev1.ResourceName(in.Name)
+	out.Total = in.Total
+	return nil
+}
+
+// Convert_v1beta2_LocalQueueResourceUsage_To_v1beta1_LocalQueueResourceUsage is an autogenerated conversion function.
+func Convert_v1beta2_LocalQueueResourceUsage_To_v1beta1_LocalQueueResourceUsage(in *v1beta2.LocalQueueResourceUsage, out *LocalQueueResourceUsage, s conversion.Scope) error {
+	return autoConvert_v1beta2_LocalQueueResourceUsage_To_v1beta1_LocalQueueResourceUsage(in, out, s)
+}
+
+func autoConvert_v1beta1_LocalQueueSpec_To_v1beta2_LocalQueueSpec(in *LocalQueueSpec, out *v1beta2.LocalQueueSpec, s conversion.Scope) error {
+	out.ClusterQueue = v1beta2.ClusterQueueReference(in.ClusterQueue)
+	out.StopPolicy = (*v1beta2.StopPolicy)(unsafe.Pointer(in.StopPolicy))
+	out.FairSharing = (*v1beta2.FairSharing)(unsafe.Pointer(in.FairSharing))
+	return nil
+}
+
+// Convert_v1beta1_LocalQueueSpec_To_v1beta2_LocalQueueSpec is an autogenerated conversion function.
+func Convert_v1beta1_LocalQueueSpec_To_v1beta2_LocalQueueSpec(in *LocalQueueSpec, out *v1beta2.LocalQueueSpec, s conversion.Scope) error {
+	return autoConvert_v1beta1_LocalQueueSpec_To_v1beta2_LocalQueueSpec(in, out, s)
+}
+
+func autoConvert_v1beta2_LocalQueueSpec_To_v1beta1_LocalQueueSpec(in *v1beta2.LocalQueueSpec, out *LocalQueueSpec, s conversion.Scope) error {
+	out.ClusterQueue = ClusterQueueReference(in.ClusterQueue)
+	out.StopPolicy = (*StopPolicy)(unsafe.Pointer(in.StopPolicy))
+	out.FairSharing = (*FairSharing)(unsafe.Pointer(in.FairSharing))
+	return nil
+}
+
+// Convert_v1beta2_LocalQueueSpec_To_v1beta1_LocalQueueSpec is an autogenerated conversion function.
+func Convert_v1beta2_LocalQueueSpec_To_v1beta1_LocalQueueSpec(in *v1beta2.LocalQueueSpec, out *LocalQueueSpec, s conversion.Scope) error {
+	return autoConvert_v1beta2_LocalQueueSpec_To_v1beta1_LocalQueueSpec(in, out, s)
+}
+
+func autoConvert_v1beta1_LocalQueueStatus_To_v1beta2_LocalQueueStatus(in *LocalQueueStatus, out *v1beta2.LocalQueueStatus, s conversion.Scope) error {
+	out.Conditions = *(*[]v1.Condition)(unsafe.Pointer(&in.Conditions))
+	out.PendingWorkloads = in.PendingWorkloads
+	out.ReservingWorkloads = in.ReservingWorkloads
+	out.AdmittedWorkloads = in.AdmittedWorkloads
+	out.FlavorsReservation = *(*[]v1beta2.LocalQueueFlavorUsage)(unsafe.Pointer(&in.FlavorsReservation))
+	// WARNING: in.FlavorUsage requires manual conversion: does not exist in peer-type
+	out.Flavors = *(*[]v1beta2.LocalQueueFlavorStatus)(unsafe.Pointer(&in.Flavors))
+	out.FairSharing = (*v1beta2.FairSharingStatus)(unsafe.Pointer(in.FairSharing))
+	return nil
+}
+
+func autoConvert_v1beta2_LocalQueueStatus_To_v1beta1_LocalQueueStatus(in *v1beta2.LocalQueueStatus, out *LocalQueueStatus, s conversion.Scope) error {
+	out.Conditions = *(*[]v1.Condition)(unsafe.Pointer(&in.Conditions))
+	out.PendingWorkloads = in.PendingWorkloads
+	out.ReservingWorkloads = in.ReservingWorkloads
+	out.AdmittedWorkloads = in.AdmittedWorkloads
+	out.FlavorsReservation = *(*[]LocalQueueFlavorUsage)(unsafe.Pointer(&in.FlavorsReservation))
+	// WARNING: in.FlavorsUsage requires manual conversion: does not exist in peer-type
+	out.Flavors = *(*[]LocalQueueFlavorStatus)(unsafe.Pointer(&in.Flavors))
+	out.FairSharing = (*FairSharingStatus)(unsafe.Pointer(in.FairSharing))
+	return nil
+}
+
+func autoConvert_v1beta1_MultiKueueCluster_To_v1beta2_MultiKueueCluster(in *MultiKueueCluster, out *v1beta2.MultiKueueCluster, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta1_MultiKueueClusterSpec_To_v1beta2_MultiKueueClusterSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta1_MultiKueueClusterStatus_To_v1beta2_MultiKueueClusterStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta1_MultiKueueCluster_To_v1beta2_MultiKueueCluster is an autogenerated conversion function.
+func Convert_v1beta1_MultiKueueCluster_To_v1beta2_MultiKueueCluster(in *MultiKueueCluster, out *v1beta2.MultiKueueCluster, s conversion.Scope) error {
+	return autoConvert_v1beta1_MultiKueueCluster_To_v1beta2_MultiKueueCluster(in, out, s)
+}
+
+func autoConvert_v1beta2_MultiKueueCluster_To_v1beta1_MultiKueueCluster(in *v1beta2.MultiKueueCluster, out *MultiKueueCluster, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta2_MultiKueueClusterSpec_To_v1beta1_MultiKueueClusterSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta2_MultiKueueClusterStatus_To_v1beta1_MultiKueueClusterStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta2_MultiKueueCluster_To_v1beta1_MultiKueueCluster is an autogenerated conversion function.
+func Convert_v1beta2_MultiKueueCluster_To_v1beta1_MultiKueueCluster(in *v1beta2.MultiKueueCluster, out *MultiKueueCluster, s conversion.Scope) error {
+	return autoConvert_v1beta2_MultiKueueCluster_To_v1beta1_MultiKueueCluster(in, out, s)
+}
+
+func autoConvert_v1beta1_MultiKueueClusterList_To_v1beta2_MultiKueueClusterList(in *MultiKueueClusterList, out *v1beta2.MultiKueueClusterList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]v1beta2.MultiKueueCluster)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta1_MultiKueueClusterList_To_v1beta2_MultiKueueClusterList is an autogenerated conversion function.
+func Convert_v1beta1_MultiKueueClusterList_To_v1beta2_MultiKueueClusterList(in *MultiKueueClusterList, out *v1beta2.MultiKueueClusterList, s conversion.Scope) error {
+	return autoConvert_v1beta1_MultiKueueClusterList_To_v1beta2_MultiKueueClusterList(in, out, s)
+}
+
+func autoConvert_v1beta2_MultiKueueClusterList_To_v1beta1_MultiKueueClusterList(in *v1beta2.MultiKueueClusterList, out *MultiKueueClusterList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]MultiKueueCluster)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta2_MultiKueueClusterList_To_v1beta1_MultiKueueClusterList is an autogenerated conversion function.
+func Convert_v1beta2_MultiKueueClusterList_To_v1beta1_MultiKueueClusterList(in *v1beta2.MultiKueueClusterList, out *MultiKueueClusterList, s conversion.Scope) error {
+	return autoConvert_v1beta2_MultiKueueClusterList_To_v1beta1_MultiKueueClusterList(in, out, s)
+}
+
+func autoConvert_v1beta1_MultiKueueClusterSpec_To_v1beta2_MultiKueueClusterSpec(in *MultiKueueClusterSpec, out *v1beta2.MultiKueueClusterSpec, s conversion.Scope) error {
+	if err := Convert_v1beta1_KubeConfig_To_v1beta2_KubeConfig(&in.KubeConfig, &out.KubeConfig, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta1_MultiKueueClusterSpec_To_v1beta2_MultiKueueClusterSpec is an autogenerated conversion function.
+func Convert_v1beta1_MultiKueueClusterSpec_To_v1beta2_MultiKueueClusterSpec(in *MultiKueueClusterSpec, out *v1beta2.MultiKueueClusterSpec, s conversion.Scope) error {
+	return autoConvert_v1beta1_MultiKueueClusterSpec_To_v1beta2_MultiKueueClusterSpec(in, out, s)
+}
+
+func autoConvert_v1beta2_MultiKueueClusterSpec_To_v1beta1_MultiKueueClusterSpec(in *v1beta2.MultiKueueClusterSpec, out *MultiKueueClusterSpec, s conversion.Scope) error {
+	if err := Convert_v1beta2_KubeConfig_To_v1beta1_KubeConfig(&in.KubeConfig, &out.KubeConfig, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta2_MultiKueueClusterSpec_To_v1beta1_MultiKueueClusterSpec is an autogenerated conversion function.
+func Convert_v1beta2_MultiKueueClusterSpec_To_v1beta1_MultiKueueClusterSpec(in *v1beta2.MultiKueueClusterSpec, out *MultiKueueClusterSpec, s conversion.Scope) error {
+	return autoConvert_v1beta2_MultiKueueClusterSpec_To_v1beta1_MultiKueueClusterSpec(in, out, s)
+}
+
+func autoConvert_v1beta1_MultiKueueClusterStatus_To_v1beta2_MultiKueueClusterStatus(in *MultiKueueClusterStatus, out *v1beta2.MultiKueueClusterStatus, s conversion.Scope) error {
+	out.Conditions = *(*[]v1.Condition)(unsafe.Pointer(&in.Conditions))
+	return nil
+}
+
+// Convert_v1beta1_MultiKueueClusterStatus_To_v1beta2_MultiKueueClusterStatus is an autogenerated conversion function.
+func Convert_v1beta1_MultiKueueClusterStatus_To_v1beta2_MultiKueueClusterStatus(in *MultiKueueClusterStatus, out *v1beta2.MultiKueueClusterStatus, s conversion.Scope) error {
+	return autoConvert_v1beta1_MultiKueueClusterStatus_To_v1beta2_MultiKueueClusterStatus(in, out, s)
+}
+
+func autoConvert_v1beta2_MultiKueueClusterStatus_To_v1beta1_MultiKueueClusterStatus(in *v1beta2.MultiKueueClusterStatus, out *MultiKueueClusterStatus, s conversion.Scope) error {
+	out.Conditions = *(*[]v1.Condition)(unsafe.Pointer(&in.Conditions))
+	return nil
+}
+
+// Convert_v1beta2_MultiKueueClusterStatus_To_v1beta1_MultiKueueClusterStatus is an autogenerated conversion function.
+func Convert_v1beta2_MultiKueueClusterStatus_To_v1beta1_MultiKueueClusterStatus(in *v1beta2.MultiKueueClusterStatus, out *MultiKueueClusterStatus, s conversion.Scope) error {
+	return autoConvert_v1beta2_MultiKueueClusterStatus_To_v1beta1_MultiKueueClusterStatus(in, out, s)
+}
+
+func autoConvert_v1beta1_MultiKueueConfig_To_v1beta2_MultiKueueConfig(in *MultiKueueConfig, out *v1beta2.MultiKueueConfig, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta1_MultiKueueConfigSpec_To_v1beta2_MultiKueueConfigSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta1_MultiKueueConfig_To_v1beta2_MultiKueueConfig is an autogenerated conversion function.
+func Convert_v1beta1_MultiKueueConfig_To_v1beta2_MultiKueueConfig(in *MultiKueueConfig, out *v1beta2.MultiKueueConfig, s conversion.Scope) error {
+	return autoConvert_v1beta1_MultiKueueConfig_To_v1beta2_MultiKueueConfig(in, out, s)
+}
+
+func autoConvert_v1beta2_MultiKueueConfig_To_v1beta1_MultiKueueConfig(in *v1beta2.MultiKueueConfig, out *MultiKueueConfig, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta2_MultiKueueConfigSpec_To_v1beta1_MultiKueueConfigSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta2_MultiKueueConfig_To_v1beta1_MultiKueueConfig is an autogenerated conversion function.
+func Convert_v1beta2_MultiKueueConfig_To_v1beta1_MultiKueueConfig(in *v1beta2.MultiKueueConfig, out *MultiKueueConfig, s conversion.Scope) error {
+	return autoConvert_v1beta2_MultiKueueConfig_To_v1beta1_MultiKueueConfig(in, out, s)
+}
+
+func autoConvert_v1beta1_MultiKueueConfigList_To_v1beta2_MultiKueueConfigList(in *MultiKueueConfigList, out *v1beta2.MultiKueueConfigList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]v1beta2.MultiKueueConfig)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta1_MultiKueueConfigList_To_v1beta2_MultiKueueConfigList is an autogenerated conversion function.
+func Convert_v1beta1_MultiKueueConfigList_To_v1beta2_MultiKueueConfigList(in *MultiKueueConfigList, out *v1beta2.MultiKueueConfigList, s conversion.Scope) error {
+	return autoConvert_v1beta1_MultiKueueConfigList_To_v1beta2_MultiKueueConfigList(in, out, s)
+}
+
+func autoConvert_v1beta2_MultiKueueConfigList_To_v1beta1_MultiKueueConfigList(in *v1beta2.MultiKueueConfigList, out *MultiKueueConfigList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]MultiKueueConfig)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta2_MultiKueueConfigList_To_v1beta1_MultiKueueConfigList is an autogenerated conversion function.
+func Convert_v1beta2_MultiKueueConfigList_To_v1beta1_MultiKueueConfigList(in *v1beta2.MultiKueueConfigList, out *MultiKueueConfigList, s conversion.Scope) error {
+	return autoConvert_v1beta2_MultiKueueConfigList_To_v1beta1_MultiKueueConfigList(in, out, s)
+}
+
+func autoConvert_v1beta1_MultiKueueConfigSpec_To_v1beta2_MultiKueueConfigSpec(in *MultiKueueConfigSpec, out *v1beta2.MultiKueueConfigSpec, s conversion.Scope) error {
+	out.Clusters = *(*[]string)(unsafe.Pointer(&in.Clusters))
+	return nil
+}
+
+// Convert_v1beta1_MultiKueueConfigSpec_To_v1beta2_MultiKueueConfigSpec is an autogenerated conversion function.
+func Convert_v1beta1_MultiKueueConfigSpec_To_v1beta2_MultiKueueConfigSpec(in *MultiKueueConfigSpec, out *v1beta2.MultiKueueConfigSpec, s conversion.Scope) error {
+	return autoConvert_v1beta1_MultiKueueConfigSpec_To_v1beta2_MultiKueueConfigSpec(in, out, s)
+}
+
+func autoConvert_v1beta2_MultiKueueConfigSpec_To_v1beta1_MultiKueueConfigSpec(in *v1beta2.MultiKueueConfigSpec, out *MultiKueueConfigSpec, s conversion.Scope) error {
+	out.Clusters = *(*[]string)(unsafe.Pointer(&in.Clusters))
+	return nil
+}
+
+// Convert_v1beta2_MultiKueueConfigSpec_To_v1beta1_MultiKueueConfigSpec is an autogenerated conversion function.
+func Convert_v1beta2_MultiKueueConfigSpec_To_v1beta1_MultiKueueConfigSpec(in *v1beta2.MultiKueueConfigSpec, out *MultiKueueConfigSpec, s conversion.Scope) error {
+	return autoConvert_v1beta2_MultiKueueConfigSpec_To_v1beta1_MultiKueueConfigSpec(in, out, s)
+}
+
+func autoConvert_v1beta1_PodSet_To_v1beta2_PodSet(in *PodSet, out *v1beta2.PodSet, s conversion.Scope) error {
+	out.Name = v1beta2.PodSetReference(in.Name)
+	out.Template = in.Template
+	out.Count = in.Count
+	out.MinCount = (*int32)(unsafe.Pointer(in.MinCount))
+	out.TopologyRequest = (*v1beta2.PodSetTopologyRequest)(unsafe.Pointer(in.TopologyRequest))
+	return nil
+}
+
+// Convert_v1beta1_PodSet_To_v1beta2_PodSet is an autogenerated conversion function.
+func Convert_v1beta1_PodSet_To_v1beta2_PodSet(in *PodSet, out *v1beta2.PodSet, s conversion.Scope) error {
+	return autoConvert_v1beta1_PodSet_To_v1beta2_PodSet(in, out, s)
+}
+
+func autoConvert_v1beta2_PodSet_To_v1beta1_PodSet(in *v1beta2.PodSet, out *PodSet, s conversion.Scope) error {
+	out.Name = PodSetReference(in.Name)
+	out.Template = in.Template
+	out.Count = in.Count
+	out.MinCount = (*int32)(unsafe.Pointer(in.MinCount))
+	out.TopologyRequest = (*PodSetTopologyRequest)(unsafe.Pointer(in.TopologyRequest))
+	return nil
+}
+
+// Convert_v1beta2_PodSet_To_v1beta1_PodSet is an autogenerated conversion function.
+func Convert_v1beta2_PodSet_To_v1beta1_PodSet(in *v1beta2.PodSet, out *PodSet, s conversion.Scope) error {
+	return autoConvert_v1beta2_PodSet_To_v1beta1_PodSet(in, out, s)
+}
+
+func autoConvert_v1beta1_PodSetAssignment_To_v1beta2_PodSetAssignment(in *PodSetAssignment, out *v1beta2.PodSetAssignment, s conversion.Scope) error {
+	out.Name = v1beta2.PodSetReference(in.Name)
+	out.Flavors = *(*map[corev1.ResourceName]v1beta2.ResourceFlavorReference)(unsafe.Pointer(&in.Flavors))
+	out.ResourceUsage = *(*corev1.ResourceList)(unsafe.Pointer(&in.ResourceUsage))
+	out.Count = (*int32)(unsafe.Pointer(in.Count))
+	out.TopologyAssignment = (*v1beta2.TopologyAssignment)(unsafe.Pointer(in.TopologyAssignment))
+	out.DelayedTopologyRequest = (*v1beta2.DelayedTopologyRequestState)(unsafe.Pointer(in.DelayedTopologyRequest))
+	return nil
+}
+
+// Convert_v1beta1_PodSetAssignment_To_v1beta2_PodSetAssignment is an autogenerated conversion function.
+func Convert_v1beta1_PodSetAssignment_To_v1beta2_PodSetAssignment(in *PodSetAssignment, out *v1beta2.PodSetAssignment, s conversion.Scope) error {
+	return autoConvert_v1beta1_PodSetAssignment_To_v1beta2_PodSetAssignment(in, out, s)
+}
+
+func autoConvert_v1beta2_PodSetAssignment_To_v1beta1_PodSetAssignment(in *v1beta2.PodSetAssignment, out *PodSetAssignment, s conversion.Scope) error {
+	out.Name = PodSetReference(in.Name)
+	out.Flavors = *(*map[corev1.ResourceName]ResourceFlavorReference)(unsafe.Pointer(&in.Flavors))
+	out.ResourceUsage = *(*corev1.ResourceList)(unsafe.Pointer(&in.ResourceUsage))
+	out.Count = (*int32)(unsafe.Pointer(in.Count))
+	out.TopologyAssignment = (*TopologyAssignment)(unsafe.Pointer(in.TopologyAssignment))
+	out.DelayedTopologyRequest = (*DelayedTopologyRequestState)(unsafe.Pointer(in.DelayedTopologyRequest))
+	return nil
+}
+
+// Convert_v1beta2_PodSetAssignment_To_v1beta1_PodSetAssignment is an autogenerated conversion function.
+func Convert_v1beta2_PodSetAssignment_To_v1beta1_PodSetAssignment(in *v1beta2.PodSetAssignment, out *PodSetAssignment, s conversion.Scope) error {
+	return autoConvert_v1beta2_PodSetAssignment_To_v1beta1_PodSetAssignment(in, out, s)
+}
+
+func autoConvert_v1beta1_PodSetRequest_To_v1beta2_PodSetRequest(in *PodSetRequest, out *v1beta2.PodSetRequest, s conversion.Scope) error {
+	out.Name = v1beta2.PodSetReference(in.Name)
+	out.Resources = *(*corev1.ResourceList)(unsafe.Pointer(&in.Resources))
+	return nil
+}
+
+// Convert_v1beta1_PodSetRequest_To_v1beta2_PodSetRequest is an autogenerated conversion function.
+func Convert_v1beta1_PodSetRequest_To_v1beta2_PodSetRequest(in *PodSetRequest, out *v1beta2.PodSetRequest, s conversion.Scope) error {
+	return autoConvert_v1beta1_PodSetRequest_To_v1beta2_PodSetRequest(in, out, s)
+}
+
+func autoConvert_v1beta2_PodSetRequest_To_v1beta1_PodSetRequest(in *v1beta2.PodSetRequest, out *PodSetRequest, s conversion.Scope) error {
+	out.Name = PodSetReference(in.Name)
+	out.Resources = *(*corev1.ResourceList)(unsafe.Pointer(&in.Resources))
+	return nil
+}
+
+// Convert_v1beta2_PodSetRequest_To_v1beta1_PodSetRequest is an autogenerated conversion function.
+func Convert_v1beta2_PodSetRequest_To_v1beta1_PodSetRequest(in *v1beta2.PodSetRequest, out *PodSetRequest, s conversion.Scope) error {
+	return autoConvert_v1beta2_PodSetRequest_To_v1beta1_PodSetRequest(in, out, s)
+}
+
+func autoConvert_v1beta1_PodSetTopologyRequest_To_v1beta2_PodSetTopologyRequest(in *PodSetTopologyRequest, out *v1beta2.PodSetTopologyRequest, s conversion.Scope) error {
+	out.Required = (*string)(unsafe.Pointer(in.Required))
+	out.Preferred = (*string)(unsafe.Pointer(in.Preferred))
+	out.Unconstrained = (*bool)(unsafe.Pointer(in.Unconstrained))
+	out.PodIndexLabel = (*string)(unsafe.Pointer(in.PodIndexLabel))
+	out.SubGroupIndexLabel = (*string)(unsafe.Pointer(in.SubGroupIndexLabel))
+	out.SubGroupCount = (*int32)(unsafe.Pointer(in.SubGroupCount))
+	out.PodSetGroupName = (*string)(unsafe.Pointer(in.PodSetGroupName))
+	out.PodSetSliceRequiredTopology = (*string)(unsafe.Pointer(in.PodSetSliceRequiredTopology))
+	out.PodSetSliceSize = (*int32)(unsafe.Pointer(in.PodSetSliceSize))
+	return nil
+}
+
+// Convert_v1beta1_PodSetTopologyRequest_To_v1beta2_PodSetTopologyRequest is an autogenerated conversion function.
+func Convert_v1beta1_PodSetTopologyRequest_To_v1beta2_PodSetTopologyRequest(in *PodSetTopologyRequest, out *v1beta2.PodSetTopologyRequest, s conversion.Scope) error {
+	return autoConvert_v1beta1_PodSetTopologyRequest_To_v1beta2_PodSetTopologyRequest(in, out, s)
+}
+
+func autoConvert_v1beta2_PodSetTopologyRequest_To_v1beta1_PodSetTopologyRequest(in *v1beta2.PodSetTopologyRequest, out *PodSetTopologyRequest, s conversion.Scope) error {
+	out.Required = (*string)(unsafe.Pointer(in.Required))
+	out.Preferred = (*string)(unsafe.Pointer(in.Preferred))
+	out.Unconstrained = (*bool)(unsafe.Pointer(in.Unconstrained))
+	out.PodIndexLabel = (*string)(unsafe.Pointer(in.PodIndexLabel))
+	out.SubGroupIndexLabel = (*string)(unsafe.Pointer(in.SubGroupIndexLabel))
+	out.SubGroupCount = (*int32)(unsafe.Pointer(in.SubGroupCount))
+	out.PodSetGroupName = (*string)(unsafe.Pointer(in.PodSetGroupName))
+	out.PodSetSliceRequiredTopology = (*string)(unsafe.Pointer(in.PodSetSliceRequiredTopology))
+	out.PodSetSliceSize = (*int32)(unsafe.Pointer(in.PodSetSliceSize))
+	return nil
+}
+
+// Convert_v1beta2_PodSetTopologyRequest_To_v1beta1_PodSetTopologyRequest is an autogenerated conversion function.
+func Convert_v1beta2_PodSetTopologyRequest_To_v1beta1_PodSetTopologyRequest(in *v1beta2.PodSetTopologyRequest, out *PodSetTopologyRequest, s conversion.Scope) error {
+	return autoConvert_v1beta2_PodSetTopologyRequest_To_v1beta1_PodSetTopologyRequest(in, out, s)
+}
+
+func autoConvert_v1beta1_PodSetUpdate_To_v1beta2_PodSetUpdate(in *PodSetUpdate, out *v1beta2.PodSetUpdate, s conversion.Scope) error {
+	out.Name = v1beta2.PodSetReference(in.Name)
+	out.Labels = *(*map[string]string)(unsafe.Pointer(&in.Labels))
+	out.Annotations = *(*map[string]string)(unsafe.Pointer(&in.Annotations))
+	out.NodeSelector = *(*map[string]string)(unsafe.Pointer(&in.NodeSelector))
+	out.Tolerations = *(*[]corev1.Toleration)(unsafe.Pointer(&in.Tolerations))
+	return nil
+}
+
+// Convert_v1beta1_PodSetUpdate_To_v1beta2_PodSetUpdate is an autogenerated conversion function.
+func Convert_v1beta1_PodSetUpdate_To_v1beta2_PodSetUpdate(in *PodSetUpdate, out *v1beta2.PodSetUpdate, s conversion.Scope) error {
+	return autoConvert_v1beta1_PodSetUpdate_To_v1beta2_PodSetUpdate(in, out, s)
+}
+
+func autoConvert_v1beta2_PodSetUpdate_To_v1beta1_PodSetUpdate(in *v1beta2.PodSetUpdate, out *PodSetUpdate, s conversion.Scope) error {
+	out.Name = PodSetReference(in.Name)
+	out.Labels = *(*map[string]string)(unsafe.Pointer(&in.Labels))
+	out.Annotations = *(*map[string]string)(unsafe.Pointer(&in.Annotations))
+	out.NodeSelector = *(*map[string]string)(unsafe.Pointer(&in.NodeSelector))
+	out.Tolerations = *(*[]corev1.Toleration)(unsafe.Pointer(&in.Tolerations))
+	return nil
+}
+
+// Convert_v1beta2_PodSetUpdate_To_v1beta1_PodSetUpdate is an autogenerated conversion function.
+func Convert_v1beta2_PodSetUpdate_To_v1beta1_PodSetUpdate(in *v1beta2.PodSetUpdate, out *PodSetUpdate, s conversion.Scope) error {
+	return autoConvert_v1beta2_PodSetUpdate_To_v1beta1_PodSetUpdate(in, out, s)
+}
+
+func autoConvert_v1beta1_ProvisioningRequestConfig_To_v1beta2_ProvisioningRequestConfig(in *ProvisioningRequestConfig, out *v1beta2.ProvisioningRequestConfig, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta1_ProvisioningRequestConfigSpec_To_v1beta2_ProvisioningRequestConfigSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta1_ProvisioningRequestConfig_To_v1beta2_ProvisioningRequestConfig is an autogenerated conversion function.
+func Convert_v1beta1_ProvisioningRequestConfig_To_v1beta2_ProvisioningRequestConfig(in *ProvisioningRequestConfig, out *v1beta2.ProvisioningRequestConfig, s conversion.Scope) error {
+	return autoConvert_v1beta1_ProvisioningRequestConfig_To_v1beta2_ProvisioningRequestConfig(in, out, s)
+}
+
+func autoConvert_v1beta2_ProvisioningRequestConfig_To_v1beta1_ProvisioningRequestConfig(in *v1beta2.ProvisioningRequestConfig, out *ProvisioningRequestConfig, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta2_ProvisioningRequestConfigSpec_To_v1beta1_ProvisioningRequestConfigSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta2_ProvisioningRequestConfig_To_v1beta1_ProvisioningRequestConfig is an autogenerated conversion function.
+func Convert_v1beta2_ProvisioningRequestConfig_To_v1beta1_ProvisioningRequestConfig(in *v1beta2.ProvisioningRequestConfig, out *ProvisioningRequestConfig, s conversion.Scope) error {
+	return autoConvert_v1beta2_ProvisioningRequestConfig_To_v1beta1_ProvisioningRequestConfig(in, out, s)
+}
+
+func autoConvert_v1beta1_ProvisioningRequestConfigList_To_v1beta2_ProvisioningRequestConfigList(in *ProvisioningRequestConfigList, out *v1beta2.ProvisioningRequestConfigList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]v1beta2.ProvisioningRequestConfig)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta1_ProvisioningRequestConfigList_To_v1beta2_ProvisioningRequestConfigList is an autogenerated conversion function.
+func Convert_v1beta1_ProvisioningRequestConfigList_To_v1beta2_ProvisioningRequestConfigList(in *ProvisioningRequestConfigList, out *v1beta2.ProvisioningRequestConfigList, s conversion.Scope) error {
+	return autoConvert_v1beta1_ProvisioningRequestConfigList_To_v1beta2_ProvisioningRequestConfigList(in, out, s)
+}
+
+func autoConvert_v1beta2_ProvisioningRequestConfigList_To_v1beta1_ProvisioningRequestConfigList(in *v1beta2.ProvisioningRequestConfigList, out *ProvisioningRequestConfigList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]ProvisioningRequestConfig)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta2_ProvisioningRequestConfigList_To_v1beta1_ProvisioningRequestConfigList is an autogenerated conversion function.
+func Convert_v1beta2_ProvisioningRequestConfigList_To_v1beta1_ProvisioningRequestConfigList(in *v1beta2.ProvisioningRequestConfigList, out *ProvisioningRequestConfigList, s conversion.Scope) error {
+	return autoConvert_v1beta2_ProvisioningRequestConfigList_To_v1beta1_ProvisioningRequestConfigList(in, out, s)
+}
+
+func autoConvert_v1beta1_ProvisioningRequestConfigSpec_To_v1beta2_ProvisioningRequestConfigSpec(in *ProvisioningRequestConfigSpec, out *v1beta2.ProvisioningRequestConfigSpec, s conversion.Scope) error {
+	out.ProvisioningClassName = in.ProvisioningClassName
+	out.Parameters = *(*map[string]v1beta2.Parameter)(unsafe.Pointer(&in.Parameters))
+	out.ManagedResources = *(*[]corev1.ResourceName)(unsafe.Pointer(&in.ManagedResources))
+	out.RetryStrategy = (*v1beta2.ProvisioningRequestRetryStrategy)(unsafe.Pointer(in.RetryStrategy))
+	out.PodSetUpdates = (*v1beta2.ProvisioningRequestPodSetUpdates)(unsafe.Pointer(in.PodSetUpdates))
+	out.PodSetMergePolicy = (*v1beta2.ProvisioningRequestConfigPodSetMergePolicy)(unsafe.Pointer(in.PodSetMergePolicy))
+	return nil
+}
+
+// Convert_v1beta1_ProvisioningRequestConfigSpec_To_v1beta2_ProvisioningRequestConfigSpec is an autogenerated conversion function.
+func Convert_v1beta1_ProvisioningRequestConfigSpec_To_v1beta2_ProvisioningRequestConfigSpec(in *ProvisioningRequestConfigSpec, out *v1beta2.ProvisioningRequestConfigSpec, s conversion.Scope) error {
+	return autoConvert_v1beta1_ProvisioningRequestConfigSpec_To_v1beta2_ProvisioningRequestConfigSpec(in, out, s)
+}
+
+func autoConvert_v1beta2_ProvisioningRequestConfigSpec_To_v1beta1_ProvisioningRequestConfigSpec(in *v1beta2.ProvisioningRequestConfigSpec, out *ProvisioningRequestConfigSpec, s conversion.Scope) error {
+	out.ProvisioningClassName = in.ProvisioningClassName
+	out.Parameters = *(*map[string]Parameter)(unsafe.Pointer(&in.Parameters))
+	out.ManagedResources = *(*[]corev1.ResourceName)(unsafe.Pointer(&in.ManagedResources))
+	out.RetryStrategy = (*ProvisioningRequestRetryStrategy)(unsafe.Pointer(in.RetryStrategy))
+	out.PodSetUpdates = (*ProvisioningRequestPodSetUpdates)(unsafe.Pointer(in.PodSetUpdates))
+	out.PodSetMergePolicy = (*ProvisioningRequestConfigPodSetMergePolicy)(unsafe.Pointer(in.PodSetMergePolicy))
+	return nil
+}
+
+// Convert_v1beta2_ProvisioningRequestConfigSpec_To_v1beta1_ProvisioningRequestConfigSpec is an autogenerated conversion function.
+func Convert_v1beta2_ProvisioningRequestConfigSpec_To_v1beta1_ProvisioningRequestConfigSpec(in *v1beta2.ProvisioningRequestConfigSpec, out *ProvisioningRequestConfigSpec, s conversion.Scope) error {
+	return autoConvert_v1beta2_ProvisioningRequestConfigSpec_To_v1beta1_ProvisioningRequestConfigSpec(in, out, s)
+}
+
+func autoConvert_v1beta1_ProvisioningRequestPodSetUpdates_To_v1beta2_ProvisioningRequestPodSetUpdates(in *ProvisioningRequestPodSetUpdates, out *v1beta2.ProvisioningRequestPodSetUpdates, s conversion.Scope) error {
+	out.NodeSelector = *(*[]v1beta2.ProvisioningRequestPodSetUpdatesNodeSelector)(unsafe.Pointer(&in.NodeSelector))
+	return nil
+}
+
+// Convert_v1beta1_ProvisioningRequestPodSetUpdates_To_v1beta2_ProvisioningRequestPodSetUpdates is an autogenerated conversion function.
+func Convert_v1beta1_ProvisioningRequestPodSetUpdates_To_v1beta2_ProvisioningRequestPodSetUpdates(in *ProvisioningRequestPodSetUpdates, out *v1beta2.ProvisioningRequestPodSetUpdates, s conversion.Scope) error {
+	return autoConvert_v1beta1_ProvisioningRequestPodSetUpdates_To_v1beta2_ProvisioningRequestPodSetUpdates(in, out, s)
+}
+
+func autoConvert_v1beta2_ProvisioningRequestPodSetUpdates_To_v1beta1_ProvisioningRequestPodSetUpdates(in *v1beta2.ProvisioningRequestPodSetUpdates, out *ProvisioningRequestPodSetUpdates, s conversion.Scope) error {
+	out.NodeSelector = *(*[]ProvisioningRequestPodSetUpdatesNodeSelector)(unsafe.Pointer(&in.NodeSelector))
+	return nil
+}
+
+// Convert_v1beta2_ProvisioningRequestPodSetUpdates_To_v1beta1_ProvisioningRequestPodSetUpdates is an autogenerated conversion function.
+func Convert_v1beta2_ProvisioningRequestPodSetUpdates_To_v1beta1_ProvisioningRequestPodSetUpdates(in *v1beta2.ProvisioningRequestPodSetUpdates, out *ProvisioningRequestPodSetUpdates, s conversion.Scope) error {
+	return autoConvert_v1beta2_ProvisioningRequestPodSetUpdates_To_v1beta1_ProvisioningRequestPodSetUpdates(in, out, s)
+}
+
+func autoConvert_v1beta1_ProvisioningRequestPodSetUpdatesNodeSelector_To_v1beta2_ProvisioningRequestPodSetUpdatesNodeSelector(in *ProvisioningRequestPodSetUpdatesNodeSelector, out *v1beta2.ProvisioningRequestPodSetUpdatesNodeSelector, s conversion.Scope) error {
+	out.Key = in.Key
+	out.ValueFromProvisioningClassDetail = in.ValueFromProvisioningClassDetail
+	return nil
+}
+
+// Convert_v1beta1_ProvisioningRequestPodSetUpdatesNodeSelector_To_v1beta2_ProvisioningRequestPodSetUpdatesNodeSelector is an autogenerated conversion function.
+func Convert_v1beta1_ProvisioningRequestPodSetUpdatesNodeSelector_To_v1beta2_ProvisioningRequestPodSetUpdatesNodeSelector(in *ProvisioningRequestPodSetUpdatesNodeSelector, out *v1beta2.ProvisioningRequestPodSetUpdatesNodeSelector, s conversion.Scope) error {
+	return autoConvert_v1beta1_ProvisioningRequestPodSetUpdatesNodeSelector_To_v1beta2_ProvisioningRequestPodSetUpdatesNodeSelector(in, out, s)
+}
+
+func autoConvert_v1beta2_ProvisioningRequestPodSetUpdatesNodeSelector_To_v1beta1_ProvisioningRequestPodSetUpdatesNodeSelector(in *v1beta2.ProvisioningRequestPodSetUpdatesNodeSelector, out *ProvisioningRequestPodSetUpdatesNodeSelector, s conversion.Scope) error {
+	out.Key = in.Key
+	out.ValueFromProvisioningClassDetail = in.ValueFromProvisioningClassDetail
+	return nil
+}
+
+// Convert_v1beta2_ProvisioningRequestPodSetUpdatesNodeSelector_To_v1beta1_ProvisioningRequestPodSetUpdatesNodeSelector is an autogenerated conversion function.
+func Convert_v1beta2_ProvisioningRequestPodSetUpdatesNodeSelector_To_v1beta1_ProvisioningRequestPodSetUpdatesNodeSelector(in *v1beta2.ProvisioningRequestPodSetUpdatesNodeSelector, out *ProvisioningRequestPodSetUpdatesNodeSelector, s conversion.Scope) error {
+	return autoConvert_v1beta2_ProvisioningRequestPodSetUpdatesNodeSelector_To_v1beta1_ProvisioningRequestPodSetUpdatesNodeSelector(in, out, s)
+}
+
+func autoConvert_v1beta1_ProvisioningRequestRetryStrategy_To_v1beta2_ProvisioningRequestRetryStrategy(in *ProvisioningRequestRetryStrategy, out *v1beta2.ProvisioningRequestRetryStrategy, s conversion.Scope) error {
+	out.BackoffLimitCount = (*int32)(unsafe.Pointer(in.BackoffLimitCount))
+	out.BackoffBaseSeconds = (*int32)(unsafe.Pointer(in.BackoffBaseSeconds))
+	out.BackoffMaxSeconds = (*int32)(unsafe.Pointer(in.BackoffMaxSeconds))
+	return nil
+}
+
+// Convert_v1beta1_ProvisioningRequestRetryStrategy_To_v1beta2_ProvisioningRequestRetryStrategy is an autogenerated conversion function.
+func Convert_v1beta1_ProvisioningRequestRetryStrategy_To_v1beta2_ProvisioningRequestRetryStrategy(in *ProvisioningRequestRetryStrategy, out *v1beta2.ProvisioningRequestRetryStrategy, s conversion.Scope) error {
+	return autoConvert_v1beta1_ProvisioningRequestRetryStrategy_To_v1beta2_ProvisioningRequestRetryStrategy(in, out, s)
+}
+
+func autoConvert_v1beta2_ProvisioningRequestRetryStrategy_To_v1beta1_ProvisioningRequestRetryStrategy(in *v1beta2.ProvisioningRequestRetryStrategy, out *ProvisioningRequestRetryStrategy, s conversion.Scope) error {
+	out.BackoffLimitCount = (*int32)(unsafe.Pointer(in.BackoffLimitCount))
+	out.BackoffBaseSeconds = (*int32)(unsafe.Pointer(in.BackoffBaseSeconds))
+	out.BackoffMaxSeconds = (*int32)(unsafe.Pointer(in.BackoffMaxSeconds))
+	return nil
+}
+
+// Convert_v1beta2_ProvisioningRequestRetryStrategy_To_v1beta1_ProvisioningRequestRetryStrategy is an autogenerated conversion function.
+func Convert_v1beta2_ProvisioningRequestRetryStrategy_To_v1beta1_ProvisioningRequestRetryStrategy(in *v1beta2.ProvisioningRequestRetryStrategy, out *ProvisioningRequestRetryStrategy, s conversion.Scope) error {
+	return autoConvert_v1beta2_ProvisioningRequestRetryStrategy_To_v1beta1_ProvisioningRequestRetryStrategy(in, out, s)
+}
+
+func autoConvert_v1beta1_ReclaimablePod_To_v1beta2_ReclaimablePod(in *ReclaimablePod, out *v1beta2.ReclaimablePod, s conversion.Scope) error {
+	out.Name = v1beta2.PodSetReference(in.Name)
+	out.Count = in.Count
+	return nil
+}
+
+// Convert_v1beta1_ReclaimablePod_To_v1beta2_ReclaimablePod is an autogenerated conversion function.
+func Convert_v1beta1_ReclaimablePod_To_v1beta2_ReclaimablePod(in *ReclaimablePod, out *v1beta2.ReclaimablePod, s conversion.Scope) error {
+	return autoConvert_v1beta1_ReclaimablePod_To_v1beta2_ReclaimablePod(in, out, s)
+}
+
+func autoConvert_v1beta2_ReclaimablePod_To_v1beta1_ReclaimablePod(in *v1beta2.ReclaimablePod, out *ReclaimablePod, s conversion.Scope) error {
+	out.Name = PodSetReference(in.Name)
+	out.Count = in.Count
+	return nil
+}
+
+// Convert_v1beta2_ReclaimablePod_To_v1beta1_ReclaimablePod is an autogenerated conversion function.
+func Convert_v1beta2_ReclaimablePod_To_v1beta1_ReclaimablePod(in *v1beta2.ReclaimablePod, out *ReclaimablePod, s conversion.Scope) error {
+	return autoConvert_v1beta2_ReclaimablePod_To_v1beta1_ReclaimablePod(in, out, s)
+}
+
+func autoConvert_v1beta1_RequeueState_To_v1beta2_RequeueState(in *RequeueState, out *v1beta2.RequeueState, s conversion.Scope) error {
+	out.Count = (*int32)(unsafe.Pointer(in.Count))
+	out.RequeueAt = (*v1.Time)(unsafe.Pointer(in.RequeueAt))
+	return nil
+}
+
+// Convert_v1beta1_RequeueState_To_v1beta2_RequeueState is an autogenerated conversion function.
+func Convert_v1beta1_RequeueState_To_v1beta2_RequeueState(in *RequeueState, out *v1beta2.RequeueState, s conversion.Scope) error {
+	return autoConvert_v1beta1_RequeueState_To_v1beta2_RequeueState(in, out, s)
+}
+
+func autoConvert_v1beta2_RequeueState_To_v1beta1_RequeueState(in *v1beta2.RequeueState, out *RequeueState, s conversion.Scope) error {
+	out.Count = (*int32)(unsafe.Pointer(in.Count))
+	out.RequeueAt = (*v1.Time)(unsafe.Pointer(in.RequeueAt))
+	return nil
+}
+
+// Convert_v1beta2_RequeueState_To_v1beta1_RequeueState is an autogenerated conversion function.
+func Convert_v1beta2_RequeueState_To_v1beta1_RequeueState(in *v1beta2.RequeueState, out *RequeueState, s conversion.Scope) error {
+	return autoConvert_v1beta2_RequeueState_To_v1beta1_RequeueState(in, out, s)
+}
+
+func autoConvert_v1beta1_ResourceFlavor_To_v1beta2_ResourceFlavor(in *ResourceFlavor, out *v1beta2.ResourceFlavor, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta1_ResourceFlavorSpec_To_v1beta2_ResourceFlavorSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta1_ResourceFlavor_To_v1beta2_ResourceFlavor is an autogenerated conversion function.
+func Convert_v1beta1_ResourceFlavor_To_v1beta2_ResourceFlavor(in *ResourceFlavor, out *v1beta2.ResourceFlavor, s conversion.Scope) error {
+	return autoConvert_v1beta1_ResourceFlavor_To_v1beta2_ResourceFlavor(in, out, s)
+}
+
+func autoConvert_v1beta2_ResourceFlavor_To_v1beta1_ResourceFlavor(in *v1beta2.ResourceFlavor, out *ResourceFlavor, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta2_ResourceFlavorSpec_To_v1beta1_ResourceFlavorSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta2_ResourceFlavor_To_v1beta1_ResourceFlavor is an autogenerated conversion function.
+func Convert_v1beta2_ResourceFlavor_To_v1beta1_ResourceFlavor(in *v1beta2.ResourceFlavor, out *ResourceFlavor, s conversion.Scope) error {
+	return autoConvert_v1beta2_ResourceFlavor_To_v1beta1_ResourceFlavor(in, out, s)
+}
+
+func autoConvert_v1beta1_ResourceFlavorList_To_v1beta2_ResourceFlavorList(in *ResourceFlavorList, out *v1beta2.ResourceFlavorList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]v1beta2.ResourceFlavor)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta1_ResourceFlavorList_To_v1beta2_ResourceFlavorList is an autogenerated conversion function.
+func Convert_v1beta1_ResourceFlavorList_To_v1beta2_ResourceFlavorList(in *ResourceFlavorList, out *v1beta2.ResourceFlavorList, s conversion.Scope) error {
+	return autoConvert_v1beta1_ResourceFlavorList_To_v1beta2_ResourceFlavorList(in, out, s)
+}
+
+func autoConvert_v1beta2_ResourceFlavorList_To_v1beta1_ResourceFlavorList(in *v1beta2.ResourceFlavorList, out *ResourceFlavorList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]ResourceFlavor)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta2_ResourceFlavorList_To_v1beta1_ResourceFlavorList is an autogenerated conversion function.
+func Convert_v1beta2_ResourceFlavorList_To_v1beta1_ResourceFlavorList(in *v1beta2.ResourceFlavorList, out *ResourceFlavorList, s conversion.Scope) error {
+	return autoConvert_v1beta2_ResourceFlavorList_To_v1beta1_ResourceFlavorList(in, out, s)
+}
+
+func autoConvert_v1beta1_ResourceFlavorSpec_To_v1beta2_ResourceFlavorSpec(in *ResourceFlavorSpec, out *v1beta2.ResourceFlavorSpec, s conversion.Scope) error {
+	out.NodeLabels = *(*map[string]string)(unsafe.Pointer(&in.NodeLabels))
+	out.NodeTaints = *(*[]corev1.Taint)(unsafe.Pointer(&in.NodeTaints))
+	out.Tolerations = *(*[]corev1.Toleration)(unsafe.Pointer(&in.Tolerations))
+	out.TopologyName = (*v1beta2.TopologyReference)(unsafe.Pointer(in.TopologyName))
+	return nil
+}
+
+// Convert_v1beta1_ResourceFlavorSpec_To_v1beta2_ResourceFlavorSpec is an autogenerated conversion function.
+func Convert_v1beta1_ResourceFlavorSpec_To_v1beta2_ResourceFlavorSpec(in *ResourceFlavorSpec, out *v1beta2.ResourceFlavorSpec, s conversion.Scope) error {
+	return autoConvert_v1beta1_ResourceFlavorSpec_To_v1beta2_ResourceFlavorSpec(in, out, s)
+}
+
+func autoConvert_v1beta2_ResourceFlavorSpec_To_v1beta1_ResourceFlavorSpec(in *v1beta2.ResourceFlavorSpec, out *ResourceFlavorSpec, s conversion.Scope) error {
+	out.NodeLabels = *(*map[string]string)(unsafe.Pointer(&in.NodeLabels))
+	out.NodeTaints = *(*[]corev1.Taint)(unsafe.Pointer(&in.NodeTaints))
+	out.Tolerations = *(*[]corev1.Toleration)(unsafe.Pointer(&in.Tolerations))
+	out.TopologyName = (*TopologyReference)(unsafe.Pointer(in.TopologyName))
+	return nil
+}
+
+// Convert_v1beta2_ResourceFlavorSpec_To_v1beta1_ResourceFlavorSpec is an autogenerated conversion function.
+func Convert_v1beta2_ResourceFlavorSpec_To_v1beta1_ResourceFlavorSpec(in *v1beta2.ResourceFlavorSpec, out *ResourceFlavorSpec, s conversion.Scope) error {
+	return autoConvert_v1beta2_ResourceFlavorSpec_To_v1beta1_ResourceFlavorSpec(in, out, s)
+}
+
+func autoConvert_v1beta1_ResourceGroup_To_v1beta2_ResourceGroup(in *ResourceGroup, out *v1beta2.ResourceGroup, s conversion.Scope) error {
+	out.CoveredResources = *(*[]corev1.ResourceName)(unsafe.Pointer(&in.CoveredResources))
+	out.Flavors = *(*[]v1beta2.FlavorQuotas)(unsafe.Pointer(&in.Flavors))
+	return nil
+}
+
+// Convert_v1beta1_ResourceGroup_To_v1beta2_ResourceGroup is an autogenerated conversion function.
+func Convert_v1beta1_ResourceGroup_To_v1beta2_ResourceGroup(in *ResourceGroup, out *v1beta2.ResourceGroup, s conversion.Scope) error {
+	return autoConvert_v1beta1_ResourceGroup_To_v1beta2_ResourceGroup(in, out, s)
+}
+
+func autoConvert_v1beta2_ResourceGroup_To_v1beta1_ResourceGroup(in *v1beta2.ResourceGroup, out *ResourceGroup, s conversion.Scope) error {
+	out.CoveredResources = *(*[]corev1.ResourceName)(unsafe.Pointer(&in.CoveredResources))
+	out.Flavors = *(*[]FlavorQuotas)(unsafe.Pointer(&in.Flavors))
+	return nil
+}
+
+// Convert_v1beta2_ResourceGroup_To_v1beta1_ResourceGroup is an autogenerated conversion function.
+func Convert_v1beta2_ResourceGroup_To_v1beta1_ResourceGroup(in *v1beta2.ResourceGroup, out *ResourceGroup, s conversion.Scope) error {
+	return autoConvert_v1beta2_ResourceGroup_To_v1beta1_ResourceGroup(in, out, s)
+}
+
+func autoConvert_v1beta1_ResourceQuota_To_v1beta2_ResourceQuota(in *ResourceQuota, out *v1beta2.ResourceQuota, s conversion.Scope) error {
+	out.Name = corev1.ResourceName(in.Name)
+	out.NominalQuota = in.NominalQuota
+	out.BorrowingLimit = (*resource.Quantity)(unsafe.Pointer(in.BorrowingLimit))
+	out.LendingLimit = (*resource.Quantity)(unsafe.Pointer(in.LendingLimit))
+	return nil
+}
+
+// Convert_v1beta1_ResourceQuota_To_v1beta2_ResourceQuota is an autogenerated conversion function.
+func Convert_v1beta1_ResourceQuota_To_v1beta2_ResourceQuota(in *ResourceQuota, out *v1beta2.ResourceQuota, s conversion.Scope) error {
+	return autoConvert_v1beta1_ResourceQuota_To_v1beta2_ResourceQuota(in, out, s)
+}
+
+func autoConvert_v1beta2_ResourceQuota_To_v1beta1_ResourceQuota(in *v1beta2.ResourceQuota, out *ResourceQuota, s conversion.Scope) error {
+	out.Name = corev1.ResourceName(in.Name)
+	out.NominalQuota = in.NominalQuota
+	out.BorrowingLimit = (*resource.Quantity)(unsafe.Pointer(in.BorrowingLimit))
+	out.LendingLimit = (*resource.Quantity)(unsafe.Pointer(in.LendingLimit))
+	return nil
+}
+
+// Convert_v1beta2_ResourceQuota_To_v1beta1_ResourceQuota is an autogenerated conversion function.
+func Convert_v1beta2_ResourceQuota_To_v1beta1_ResourceQuota(in *v1beta2.ResourceQuota, out *ResourceQuota, s conversion.Scope) error {
+	return autoConvert_v1beta2_ResourceQuota_To_v1beta1_ResourceQuota(in, out, s)
+}
+
+func autoConvert_v1beta1_ResourceUsage_To_v1beta2_ResourceUsage(in *ResourceUsage, out *v1beta2.ResourceUsage, s conversion.Scope) error {
+	out.Name = corev1.ResourceName(in.Name)
+	out.Total = in.Total
+	out.Borrowed = in.Borrowed
+	return nil
+}
+
+// Convert_v1beta1_ResourceUsage_To_v1beta2_ResourceUsage is an autogenerated conversion function.
+func Convert_v1beta1_ResourceUsage_To_v1beta2_ResourceUsage(in *ResourceUsage, out *v1beta2.ResourceUsage, s conversion.Scope) error {
+	return autoConvert_v1beta1_ResourceUsage_To_v1beta2_ResourceUsage(in, out, s)
+}
+
+func autoConvert_v1beta2_ResourceUsage_To_v1beta1_ResourceUsage(in *v1beta2.ResourceUsage, out *ResourceUsage, s conversion.Scope) error {
+	out.Name = corev1.ResourceName(in.Name)
+	out.Total = in.Total
+	out.Borrowed = in.Borrowed
+	return nil
+}
+
+// Convert_v1beta2_ResourceUsage_To_v1beta1_ResourceUsage is an autogenerated conversion function.
+func Convert_v1beta2_ResourceUsage_To_v1beta1_ResourceUsage(in *v1beta2.ResourceUsage, out *ResourceUsage, s conversion.Scope) error {
+	return autoConvert_v1beta2_ResourceUsage_To_v1beta1_ResourceUsage(in, out, s)
+}
+
+func autoConvert_v1beta1_SchedulingStats_To_v1beta2_SchedulingStats(in *SchedulingStats, out *v1beta2.SchedulingStats, s conversion.Scope) error {
+	out.Evictions = *(*[]v1beta2.WorkloadSchedulingStatsEviction)(unsafe.Pointer(&in.Evictions))
+	return nil
+}
+
+// Convert_v1beta1_SchedulingStats_To_v1beta2_SchedulingStats is an autogenerated conversion function.
+func Convert_v1beta1_SchedulingStats_To_v1beta2_SchedulingStats(in *SchedulingStats, out *v1beta2.SchedulingStats, s conversion.Scope) error {
+	return autoConvert_v1beta1_SchedulingStats_To_v1beta2_SchedulingStats(in, out, s)
+}
+
+func autoConvert_v1beta2_SchedulingStats_To_v1beta1_SchedulingStats(in *v1beta2.SchedulingStats, out *SchedulingStats, s conversion.Scope) error {
+	out.Evictions = *(*[]WorkloadSchedulingStatsEviction)(unsafe.Pointer(&in.Evictions))
+	return nil
+}
+
+// Convert_v1beta2_SchedulingStats_To_v1beta1_SchedulingStats is an autogenerated conversion function.
+func Convert_v1beta2_SchedulingStats_To_v1beta1_SchedulingStats(in *v1beta2.SchedulingStats, out *SchedulingStats, s conversion.Scope) error {
+	return autoConvert_v1beta2_SchedulingStats_To_v1beta1_SchedulingStats(in, out, s)
+}
+
+func autoConvert_v1beta1_Topology_To_v1beta2_Topology(in *Topology, out *v1beta2.Topology, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta1_TopologySpec_To_v1beta2_TopologySpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta1_Topology_To_v1beta2_Topology is an autogenerated conversion function.
+func Convert_v1beta1_Topology_To_v1beta2_Topology(in *Topology, out *v1beta2.Topology, s conversion.Scope) error {
+	return autoConvert_v1beta1_Topology_To_v1beta2_Topology(in, out, s)
+}
+
+func autoConvert_v1beta2_Topology_To_v1beta1_Topology(in *v1beta2.Topology, out *Topology, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta2_TopologySpec_To_v1beta1_TopologySpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta2_Topology_To_v1beta1_Topology is an autogenerated conversion function.
+func Convert_v1beta2_Topology_To_v1beta1_Topology(in *v1beta2.Topology, out *Topology, s conversion.Scope) error {
+	return autoConvert_v1beta2_Topology_To_v1beta1_Topology(in, out, s)
+}
+
+func autoConvert_v1beta1_TopologyAssignment_To_v1beta2_TopologyAssignment(in *TopologyAssignment, out *v1beta2.TopologyAssignment, s conversion.Scope) error {
+	out.Levels = *(*[]string)(unsafe.Pointer(&in.Levels))
+	out.Domains = *(*[]v1beta2.TopologyDomainAssignment)(unsafe.Pointer(&in.Domains))
+	return nil
+}
+
+// Convert_v1beta1_TopologyAssignment_To_v1beta2_TopologyAssignment is an autogenerated conversion function.
+func Convert_v1beta1_TopologyAssignment_To_v1beta2_TopologyAssignment(in *TopologyAssignment, out *v1beta2.TopologyAssignment, s conversion.Scope) error {
+	return autoConvert_v1beta1_TopologyAssignment_To_v1beta2_TopologyAssignment(in, out, s)
+}
+
+func autoConvert_v1beta2_TopologyAssignment_To_v1beta1_TopologyAssignment(in *v1beta2.TopologyAssignment, out *TopologyAssignment, s conversion.Scope) error {
+	out.Levels = *(*[]string)(unsafe.Pointer(&in.Levels))
+	out.Domains = *(*[]TopologyDomainAssignment)(unsafe.Pointer(&in.Domains))
+	return nil
+}
+
+// Convert_v1beta2_TopologyAssignment_To_v1beta1_TopologyAssignment is an autogenerated conversion function.
+func Convert_v1beta2_TopologyAssignment_To_v1beta1_TopologyAssignment(in *v1beta2.TopologyAssignment, out *TopologyAssignment, s conversion.Scope) error {
+	return autoConvert_v1beta2_TopologyAssignment_To_v1beta1_TopologyAssignment(in, out, s)
+}
+
+func autoConvert_v1beta1_TopologyDomainAssignment_To_v1beta2_TopologyDomainAssignment(in *TopologyDomainAssignment, out *v1beta2.TopologyDomainAssignment, s conversion.Scope) error {
+	out.Values = *(*[]string)(unsafe.Pointer(&in.Values))
+	out.Count = in.Count
+	return nil
+}
+
+// Convert_v1beta1_TopologyDomainAssignment_To_v1beta2_TopologyDomainAssignment is an autogenerated conversion function.
+func Convert_v1beta1_TopologyDomainAssignment_To_v1beta2_TopologyDomainAssignment(in *TopologyDomainAssignment, out *v1beta2.TopologyDomainAssignment, s conversion.Scope) error {
+	return autoConvert_v1beta1_TopologyDomainAssignment_To_v1beta2_TopologyDomainAssignment(in, out, s)
+}
+
+func autoConvert_v1beta2_TopologyDomainAssignment_To_v1beta1_TopologyDomainAssignment(in *v1beta2.TopologyDomainAssignment, out *TopologyDomainAssignment, s conversion.Scope) error {
+	out.Values = *(*[]string)(unsafe.Pointer(&in.Values))
+	out.Count = in.Count
+	return nil
+}
+
+// Convert_v1beta2_TopologyDomainAssignment_To_v1beta1_TopologyDomainAssignment is an autogenerated conversion function.
+func Convert_v1beta2_TopologyDomainAssignment_To_v1beta1_TopologyDomainAssignment(in *v1beta2.TopologyDomainAssignment, out *TopologyDomainAssignment, s conversion.Scope) error {
+	return autoConvert_v1beta2_TopologyDomainAssignment_To_v1beta1_TopologyDomainAssignment(in, out, s)
+}
+
+func autoConvert_v1beta1_TopologyInfo_To_v1beta2_TopologyInfo(in *TopologyInfo, out *v1beta2.TopologyInfo, s conversion.Scope) error {
+	out.Name = v1beta2.TopologyReference(in.Name)
+	out.Levels = *(*[]string)(unsafe.Pointer(&in.Levels))
+	return nil
+}
+
+// Convert_v1beta1_TopologyInfo_To_v1beta2_TopologyInfo is an autogenerated conversion function.
+func Convert_v1beta1_TopologyInfo_To_v1beta2_TopologyInfo(in *TopologyInfo, out *v1beta2.TopologyInfo, s conversion.Scope) error {
+	return autoConvert_v1beta1_TopologyInfo_To_v1beta2_TopologyInfo(in, out, s)
+}
+
+func autoConvert_v1beta2_TopologyInfo_To_v1beta1_TopologyInfo(in *v1beta2.TopologyInfo, out *TopologyInfo, s conversion.Scope) error {
+	out.Name = TopologyReference(in.Name)
+	out.Levels = *(*[]string)(unsafe.Pointer(&in.Levels))
+	return nil
+}
+
+// Convert_v1beta2_TopologyInfo_To_v1beta1_TopologyInfo is an autogenerated conversion function.
+func Convert_v1beta2_TopologyInfo_To_v1beta1_TopologyInfo(in *v1beta2.TopologyInfo, out *TopologyInfo, s conversion.Scope) error {
+	return autoConvert_v1beta2_TopologyInfo_To_v1beta1_TopologyInfo(in, out, s)
+}
+
+func autoConvert_v1beta1_TopologyLevel_To_v1beta2_TopologyLevel(in *TopologyLevel, out *v1beta2.TopologyLevel, s conversion.Scope) error {
+	out.NodeLabel = in.NodeLabel
+	return nil
+}
+
+// Convert_v1beta1_TopologyLevel_To_v1beta2_TopologyLevel is an autogenerated conversion function.
+func Convert_v1beta1_TopologyLevel_To_v1beta2_TopologyLevel(in *TopologyLevel, out *v1beta2.TopologyLevel, s conversion.Scope) error {
+	return autoConvert_v1beta1_TopologyLevel_To_v1beta2_TopologyLevel(in, out, s)
+}
+
+func autoConvert_v1beta2_TopologyLevel_To_v1beta1_TopologyLevel(in *v1beta2.TopologyLevel, out *TopologyLevel, s conversion.Scope) error {
+	out.NodeLabel = in.NodeLabel
+	return nil
+}
+
+// Convert_v1beta2_TopologyLevel_To_v1beta1_TopologyLevel is an autogenerated conversion function.
+func Convert_v1beta2_TopologyLevel_To_v1beta1_TopologyLevel(in *v1beta2.TopologyLevel, out *TopologyLevel, s conversion.Scope) error {
+	return autoConvert_v1beta2_TopologyLevel_To_v1beta1_TopologyLevel(in, out, s)
+}
+
+func autoConvert_v1beta1_TopologyList_To_v1beta2_TopologyList(in *TopologyList, out *v1beta2.TopologyList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]v1beta2.Topology)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta1_TopologyList_To_v1beta2_TopologyList is an autogenerated conversion function.
+func Convert_v1beta1_TopologyList_To_v1beta2_TopologyList(in *TopologyList, out *v1beta2.TopologyList, s conversion.Scope) error {
+	return autoConvert_v1beta1_TopologyList_To_v1beta2_TopologyList(in, out, s)
+}
+
+func autoConvert_v1beta2_TopologyList_To_v1beta1_TopologyList(in *v1beta2.TopologyList, out *TopologyList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]Topology)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta2_TopologyList_To_v1beta1_TopologyList is an autogenerated conversion function.
+func Convert_v1beta2_TopologyList_To_v1beta1_TopologyList(in *v1beta2.TopologyList, out *TopologyList, s conversion.Scope) error {
+	return autoConvert_v1beta2_TopologyList_To_v1beta1_TopologyList(in, out, s)
+}
+
+func autoConvert_v1beta1_TopologySpec_To_v1beta2_TopologySpec(in *TopologySpec, out *v1beta2.TopologySpec, s conversion.Scope) error {
+	out.Levels = *(*[]v1beta2.TopologyLevel)(unsafe.Pointer(&in.Levels))
+	return nil
+}
+
+// Convert_v1beta1_TopologySpec_To_v1beta2_TopologySpec is an autogenerated conversion function.
+func Convert_v1beta1_TopologySpec_To_v1beta2_TopologySpec(in *TopologySpec, out *v1beta2.TopologySpec, s conversion.Scope) error {
+	return autoConvert_v1beta1_TopologySpec_To_v1beta2_TopologySpec(in, out, s)
+}
+
+func autoConvert_v1beta2_TopologySpec_To_v1beta1_TopologySpec(in *v1beta2.TopologySpec, out *TopologySpec, s conversion.Scope) error {
+	out.Levels = *(*[]TopologyLevel)(unsafe.Pointer(&in.Levels))
+	return nil
+}
+
+// Convert_v1beta2_TopologySpec_To_v1beta1_TopologySpec is an autogenerated conversion function.
+func Convert_v1beta2_TopologySpec_To_v1beta1_TopologySpec(in *v1beta2.TopologySpec, out *TopologySpec, s conversion.Scope) error {
+	return autoConvert_v1beta2_TopologySpec_To_v1beta1_TopologySpec(in, out, s)
+}
+
+func autoConvert_v1beta1_UnhealthyNode_To_v1beta2_UnhealthyNode(in *UnhealthyNode, out *v1beta2.UnhealthyNode, s conversion.Scope) error {
+	out.Name = in.Name
+	return nil
+}
+
+// Convert_v1beta1_UnhealthyNode_To_v1beta2_UnhealthyNode is an autogenerated conversion function.
+func Convert_v1beta1_UnhealthyNode_To_v1beta2_UnhealthyNode(in *UnhealthyNode, out *v1beta2.UnhealthyNode, s conversion.Scope) error {
+	return autoConvert_v1beta1_UnhealthyNode_To_v1beta2_UnhealthyNode(in, out, s)
+}
+
+func autoConvert_v1beta2_UnhealthyNode_To_v1beta1_UnhealthyNode(in *v1beta2.UnhealthyNode, out *UnhealthyNode, s conversion.Scope) error {
+	out.Name = in.Name
+	return nil
+}
+
+// Convert_v1beta2_UnhealthyNode_To_v1beta1_UnhealthyNode is an autogenerated conversion function.
+func Convert_v1beta2_UnhealthyNode_To_v1beta1_UnhealthyNode(in *v1beta2.UnhealthyNode, out *UnhealthyNode, s conversion.Scope) error {
+	return autoConvert_v1beta2_UnhealthyNode_To_v1beta1_UnhealthyNode(in, out, s)
+}
+
+func autoConvert_v1beta1_Workload_To_v1beta2_Workload(in *Workload, out *v1beta2.Workload, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta1_WorkloadSpec_To_v1beta2_WorkloadSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta1_WorkloadStatus_To_v1beta2_WorkloadStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta1_Workload_To_v1beta2_Workload is an autogenerated conversion function.
+func Convert_v1beta1_Workload_To_v1beta2_Workload(in *Workload, out *v1beta2.Workload, s conversion.Scope) error {
+	return autoConvert_v1beta1_Workload_To_v1beta2_Workload(in, out, s)
+}
+
+func autoConvert_v1beta2_Workload_To_v1beta1_Workload(in *v1beta2.Workload, out *Workload, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta2_WorkloadSpec_To_v1beta1_WorkloadSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta2_WorkloadStatus_To_v1beta1_WorkloadStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta2_Workload_To_v1beta1_Workload is an autogenerated conversion function.
+func Convert_v1beta2_Workload_To_v1beta1_Workload(in *v1beta2.Workload, out *Workload, s conversion.Scope) error {
+	return autoConvert_v1beta2_Workload_To_v1beta1_Workload(in, out, s)
+}
+
+func autoConvert_v1beta1_WorkloadList_To_v1beta2_WorkloadList(in *WorkloadList, out *v1beta2.WorkloadList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]v1beta2.Workload, len(*in))
+		for i := range *in {
+			if err := Convert_v1beta1_Workload_To_v1beta2_Workload(&(*in)[i], &(*out)[i], s); err != nil {
+				return err
+			}
+		}
+	} else {
+		out.Items = nil
+	}
+	return nil
+}
+
+// Convert_v1beta1_WorkloadList_To_v1beta2_WorkloadList is an autogenerated conversion function.
+func Convert_v1beta1_WorkloadList_To_v1beta2_WorkloadList(in *WorkloadList, out *v1beta2.WorkloadList, s conversion.Scope) error {
+	return autoConvert_v1beta1_WorkloadList_To_v1beta2_WorkloadList(in, out, s)
+}
+
+func autoConvert_v1beta2_WorkloadList_To_v1beta1_WorkloadList(in *v1beta2.WorkloadList, out *WorkloadList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]Workload, len(*in))
+		for i := range *in {
+			if err := Convert_v1beta2_Workload_To_v1beta1_Workload(&(*in)[i], &(*out)[i], s); err != nil {
+				return err
+			}
+		}
+	} else {
+		out.Items = nil
+	}
+	return nil
+}
+
+// Convert_v1beta2_WorkloadList_To_v1beta1_WorkloadList is an autogenerated conversion function.
+func Convert_v1beta2_WorkloadList_To_v1beta1_WorkloadList(in *v1beta2.WorkloadList, out *WorkloadList, s conversion.Scope) error {
+	return autoConvert_v1beta2_WorkloadList_To_v1beta1_WorkloadList(in, out, s)
+}
+
+func autoConvert_v1beta1_WorkloadPriorityClass_To_v1beta2_WorkloadPriorityClass(in *WorkloadPriorityClass, out *v1beta2.WorkloadPriorityClass, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	out.Value = in.Value
+	out.Description = in.Description
+	return nil
+}
+
+// Convert_v1beta1_WorkloadPriorityClass_To_v1beta2_WorkloadPriorityClass is an autogenerated conversion function.
+func Convert_v1beta1_WorkloadPriorityClass_To_v1beta2_WorkloadPriorityClass(in *WorkloadPriorityClass, out *v1beta2.WorkloadPriorityClass, s conversion.Scope) error {
+	return autoConvert_v1beta1_WorkloadPriorityClass_To_v1beta2_WorkloadPriorityClass(in, out, s)
+}
+
+func autoConvert_v1beta2_WorkloadPriorityClass_To_v1beta1_WorkloadPriorityClass(in *v1beta2.WorkloadPriorityClass, out *WorkloadPriorityClass, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	out.Value = in.Value
+	out.Description = in.Description
+	return nil
+}
+
+// Convert_v1beta2_WorkloadPriorityClass_To_v1beta1_WorkloadPriorityClass is an autogenerated conversion function.
+func Convert_v1beta2_WorkloadPriorityClass_To_v1beta1_WorkloadPriorityClass(in *v1beta2.WorkloadPriorityClass, out *WorkloadPriorityClass, s conversion.Scope) error {
+	return autoConvert_v1beta2_WorkloadPriorityClass_To_v1beta1_WorkloadPriorityClass(in, out, s)
+}
+
+func autoConvert_v1beta1_WorkloadPriorityClassList_To_v1beta2_WorkloadPriorityClassList(in *WorkloadPriorityClassList, out *v1beta2.WorkloadPriorityClassList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]v1beta2.WorkloadPriorityClass)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta1_WorkloadPriorityClassList_To_v1beta2_WorkloadPriorityClassList is an autogenerated conversion function.
+func Convert_v1beta1_WorkloadPriorityClassList_To_v1beta2_WorkloadPriorityClassList(in *WorkloadPriorityClassList, out *v1beta2.WorkloadPriorityClassList, s conversion.Scope) error {
+	return autoConvert_v1beta1_WorkloadPriorityClassList_To_v1beta2_WorkloadPriorityClassList(in, out, s)
+}
+
+func autoConvert_v1beta2_WorkloadPriorityClassList_To_v1beta1_WorkloadPriorityClassList(in *v1beta2.WorkloadPriorityClassList, out *WorkloadPriorityClassList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]WorkloadPriorityClass)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta2_WorkloadPriorityClassList_To_v1beta1_WorkloadPriorityClassList is an autogenerated conversion function.
+func Convert_v1beta2_WorkloadPriorityClassList_To_v1beta1_WorkloadPriorityClassList(in *v1beta2.WorkloadPriorityClassList, out *WorkloadPriorityClassList, s conversion.Scope) error {
+	return autoConvert_v1beta2_WorkloadPriorityClassList_To_v1beta1_WorkloadPriorityClassList(in, out, s)
+}
+
+func autoConvert_v1beta1_WorkloadSchedulingStatsEviction_To_v1beta2_WorkloadSchedulingStatsEviction(in *WorkloadSchedulingStatsEviction, out *v1beta2.WorkloadSchedulingStatsEviction, s conversion.Scope) error {
+	out.Reason = in.Reason
+	out.UnderlyingCause = v1beta2.EvictionUnderlyingCause(in.UnderlyingCause)
+	out.Count = in.Count
+	return nil
+}
+
+// Convert_v1beta1_WorkloadSchedulingStatsEviction_To_v1beta2_WorkloadSchedulingStatsEviction is an autogenerated conversion function.
+func Convert_v1beta1_WorkloadSchedulingStatsEviction_To_v1beta2_WorkloadSchedulingStatsEviction(in *WorkloadSchedulingStatsEviction, out *v1beta2.WorkloadSchedulingStatsEviction, s conversion.Scope) error {
+	return autoConvert_v1beta1_WorkloadSchedulingStatsEviction_To_v1beta2_WorkloadSchedulingStatsEviction(in, out, s)
+}
+
+func autoConvert_v1beta2_WorkloadSchedulingStatsEviction_To_v1beta1_WorkloadSchedulingStatsEviction(in *v1beta2.WorkloadSchedulingStatsEviction, out *WorkloadSchedulingStatsEviction, s conversion.Scope) error {
+	out.Reason = in.Reason
+	out.UnderlyingCause = EvictionUnderlyingCause(in.UnderlyingCause)
+	out.Count = in.Count
+	return nil
+}
+
+// Convert_v1beta2_WorkloadSchedulingStatsEviction_To_v1beta1_WorkloadSchedulingStatsEviction is an autogenerated conversion function.
+func Convert_v1beta2_WorkloadSchedulingStatsEviction_To_v1beta1_WorkloadSchedulingStatsEviction(in *v1beta2.WorkloadSchedulingStatsEviction, out *WorkloadSchedulingStatsEviction, s conversion.Scope) error {
+	return autoConvert_v1beta2_WorkloadSchedulingStatsEviction_To_v1beta1_WorkloadSchedulingStatsEviction(in, out, s)
+}
+
+func autoConvert_v1beta1_WorkloadSpec_To_v1beta2_WorkloadSpec(in *WorkloadSpec, out *v1beta2.WorkloadSpec, s conversion.Scope) error {
+	out.PodSets = *(*[]v1beta2.PodSet)(unsafe.Pointer(&in.PodSets))
+	out.QueueName = v1beta2.LocalQueueName(in.QueueName)
+	out.PriorityClassName = in.PriorityClassName
+	out.Priority = (*int32)(unsafe.Pointer(in.Priority))
+	out.PriorityClassSource = in.PriorityClassSource
+	out.Active = (*bool)(unsafe.Pointer(in.Active))
+	out.MaximumExecutionTimeSeconds = (*int32)(unsafe.Pointer(in.MaximumExecutionTimeSeconds))
+	return nil
+}
+
+// Convert_v1beta1_WorkloadSpec_To_v1beta2_WorkloadSpec is an autogenerated conversion function.
+func Convert_v1beta1_WorkloadSpec_To_v1beta2_WorkloadSpec(in *WorkloadSpec, out *v1beta2.WorkloadSpec, s conversion.Scope) error {
+	return autoConvert_v1beta1_WorkloadSpec_To_v1beta2_WorkloadSpec(in, out, s)
+}
+
+func autoConvert_v1beta2_WorkloadSpec_To_v1beta1_WorkloadSpec(in *v1beta2.WorkloadSpec, out *WorkloadSpec, s conversion.Scope) error {
+	out.PodSets = *(*[]PodSet)(unsafe.Pointer(&in.PodSets))
+	out.QueueName = LocalQueueName(in.QueueName)
+	out.PriorityClassName = in.PriorityClassName
+	out.Priority = (*int32)(unsafe.Pointer(in.Priority))
+	out.PriorityClassSource = in.PriorityClassSource
+	out.Active = (*bool)(unsafe.Pointer(in.Active))
+	out.MaximumExecutionTimeSeconds = (*int32)(unsafe.Pointer(in.MaximumExecutionTimeSeconds))
+	return nil
+}
+
+// Convert_v1beta2_WorkloadSpec_To_v1beta1_WorkloadSpec is an autogenerated conversion function.
+func Convert_v1beta2_WorkloadSpec_To_v1beta1_WorkloadSpec(in *v1beta2.WorkloadSpec, out *WorkloadSpec, s conversion.Scope) error {
+	return autoConvert_v1beta2_WorkloadSpec_To_v1beta1_WorkloadSpec(in, out, s)
+}
+
+func autoConvert_v1beta1_WorkloadStatus_To_v1beta2_WorkloadStatus(in *WorkloadStatus, out *v1beta2.WorkloadStatus, s conversion.Scope) error {
+	out.Conditions = *(*[]v1.Condition)(unsafe.Pointer(&in.Conditions))
+	out.Admission = (*v1beta2.Admission)(unsafe.Pointer(in.Admission))
+	out.RequeueState = (*v1beta2.RequeueState)(unsafe.Pointer(in.RequeueState))
+	out.ReclaimablePods = *(*[]v1beta2.ReclaimablePod)(unsafe.Pointer(&in.ReclaimablePods))
+	out.AdmissionChecks = *(*[]v1beta2.AdmissionCheckState)(unsafe.Pointer(&in.AdmissionChecks))
+	out.ResourceRequests = *(*[]v1beta2.PodSetRequest)(unsafe.Pointer(&in.ResourceRequests))
+	// WARNING: in.AccumulatedPastExexcutionTimeSeconds requires manual conversion: does not exist in peer-type
+	out.SchedulingStats = (*v1beta2.SchedulingStats)(unsafe.Pointer(in.SchedulingStats))
+	out.NominatedClusterNames = *(*[]string)(unsafe.Pointer(&in.NominatedClusterNames))
+	out.ClusterName = (*string)(unsafe.Pointer(in.ClusterName))
+	out.UnhealthyNodes = *(*[]v1beta2.UnhealthyNode)(unsafe.Pointer(&in.UnhealthyNodes))
+	return nil
+}
+
+func autoConvert_v1beta2_WorkloadStatus_To_v1beta1_WorkloadStatus(in *v1beta2.WorkloadStatus, out *WorkloadStatus, s conversion.Scope) error {
+	out.Conditions = *(*[]v1.Condition)(unsafe.Pointer(&in.Conditions))
+	out.Admission = (*Admission)(unsafe.Pointer(in.Admission))
+	out.RequeueState = (*RequeueState)(unsafe.Pointer(in.RequeueState))
+	out.ReclaimablePods = *(*[]ReclaimablePod)(unsafe.Pointer(&in.ReclaimablePods))
+	out.AdmissionChecks = *(*[]AdmissionCheckState)(unsafe.Pointer(&in.AdmissionChecks))
+	out.ResourceRequests = *(*[]PodSetRequest)(unsafe.Pointer(&in.ResourceRequests))
+	// WARNING: in.AccumulatedPastExecutionTimeSeconds requires manual conversion: does not exist in peer-type
+	out.SchedulingStats = (*SchedulingStats)(unsafe.Pointer(in.SchedulingStats))
+	out.NominatedClusterNames = *(*[]string)(unsafe.Pointer(&in.NominatedClusterNames))
+	out.ClusterName = (*string)(unsafe.Pointer(in.ClusterName))
+	out.UnhealthyNodes = *(*[]UnhealthyNode)(unsafe.Pointer(&in.UnhealthyNodes))
+	return nil
+}
diff --git a/apis/kueue/v1beta1/zz_generated.deepcopy.go b/apis/kueue/v1beta1/zz_generated.deepcopy.go
index 951a49445..7277dd8b7 100644
--- a/apis/kueue/v1beta1/zz_generated.deepcopy.go
+++ b/apis/kueue/v1beta1/zz_generated.deepcopy.go
@@ -23,7 +23,7 @@ package v1beta1
 import (
 	corev1 "k8s.io/api/core/v1"
 	"k8s.io/apimachinery/pkg/apis/meta/v1"
-	runtime "k8s.io/apimachinery/pkg/runtime"
+	"k8s.io/apimachinery/pkg/runtime"
 )
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
diff --git a/apis/kueue/v1beta2/clusterqueue_types.go b/apis/kueue/v1beta2/clusterqueue_types.go
index 868a6188d..9f749757b 100644
--- a/apis/kueue/v1beta2/clusterqueue_types.go
+++ b/apis/kueue/v1beta2/clusterqueue_types.go
@@ -53,7 +53,7 @@ type ClusterQueueReference string
 type CohortReference string
 
 // ClusterQueueSpec defines the desired state of ClusterQueue
-// +kubebuilder:validation:XValidation:rule="!has(self.cohort) && has(self.resourceGroups) ? self.resourceGroups.all(rg, rg.flavors.all(f, f.resources.all(r, !has(r.borrowingLimit)))) : true", message="borrowingLimit must be nil when cohort is empty"
+// +kubebuilder:validation:XValidation:rule="!has(self.cohortName) && has(self.resourceGroups) ? self.resourceGroups.all(rg, rg.flavors.all(f, f.resources.all(r, !has(r.borrowingLimit)))) : true", message="borrowingLimit must be nil when cohort is empty"
 type ClusterQueueSpec struct {
 	// resourceGroups describes groups of resources.
 	// Each resource group defines the list of resources and a list of flavors
@@ -64,7 +64,7 @@ type ClusterQueueSpec struct {
 	// +kubebuilder:validation:MaxItems=16
 	ResourceGroups []ResourceGroup `json:"resourceGroups,omitempty"`
 
-	// cohort that this ClusterQueue belongs to. CQs that belong to the
+	// cohortName that this ClusterQueue belongs to. CQs that belong to the
 	// same cohort can borrow unused resources from each other.
 	//
 	// A CQ can be a member of a single borrowing cohort. A workload submitted
@@ -76,7 +76,7 @@ type ClusterQueueSpec struct {
 	//
 	// A cohort is a name that links CQs together, but it doesn't reference any
 	// object.
-	Cohort CohortReference `json:"cohort,omitempty"`
+	CohortName CohortReference `json:"cohortName,omitempty"`
 
 	// queueingStrategy indicates the queueing strategy of the workloads
 	// across the queues in this ClusterQueue.
@@ -548,3 +548,5 @@ type ClusterQueueList struct {
 func init() {
 	SchemeBuilder.Register(&ClusterQueue{}, &ClusterQueueList{})
 }
+
+func (*ClusterQueue) Hub() {}
diff --git a/apis/kueue/v1beta2/localqueue_types.go b/apis/kueue/v1beta2/localqueue_types.go
index a774c2746..a19f2d900 100644
--- a/apis/kueue/v1beta2/localqueue_types.go
+++ b/apis/kueue/v1beta2/localqueue_types.go
@@ -56,6 +56,7 @@ type LocalQueueSpec struct {
 	FairSharing *FairSharing `json:"fairSharing,omitempty"`
 }
 
+// Deprecated: LocalQueueFlavorStatus is deprecated and marked for removal in v1beta2.
 type LocalQueueFlavorStatus struct {
 	// name of the flavor.
 	// +required
@@ -141,19 +142,20 @@ type LocalQueueStatus struct {
 	// +optional
 	FlavorsReservation []LocalQueueFlavorUsage `json:"flavorsReservation"`
 
-	// flavorUsage are the used quotas, by flavor currently in use by the
+	// flavorsUsage are the used quotas, by flavor currently in use by the
 	// workloads assigned to this LocalQueue.
 	// +listType=map
 	// +listMapKey=name
 	// +kubebuilder:validation:MaxItems=16
 	// +optional
-	FlavorUsage []LocalQueueFlavorUsage `json:"flavorUsage"`
+	FlavorsUsage []LocalQueueFlavorUsage `json:"flavorsUsage"`
 
 	// flavors lists all currently available ResourceFlavors in specified ClusterQueue.
 	// +listType=map
 	// +listMapKey=name
 	// +kubebuilder:validation:MaxItems=16
 	// +optional
+	// Deprecated: Flavors is deprecated and marked for removal in v1beta2.
 	Flavors []LocalQueueFlavorStatus `json:"flavors,omitempty"`
 
 	// fairSharing contains the information about the current status of fair sharing.
@@ -218,3 +220,5 @@ type LocalQueueList struct {
 func init() {
 	SchemeBuilder.Register(&LocalQueue{}, &LocalQueueList{})
 }
+
+func (*LocalQueue) Hub() {}
diff --git a/apis/kueue/v1beta2/workload_types.go b/apis/kueue/v1beta2/workload_types.go
index 119a9cab3..5010fa0e0 100644
--- a/apis/kueue/v1beta2/workload_types.go
+++ b/apis/kueue/v1beta2/workload_types.go
@@ -405,11 +405,11 @@ type WorkloadStatus struct {
 	// +kubebuilder:validation:MaxItems=8
 	ResourceRequests []PodSetRequest `json:"resourceRequests,omitempty"`
 
-	// accumulatedPastExexcutionTimeSeconds holds the total time, in seconds, the workload spent
+	// accumulatedPastExecutionTimeSeconds holds the total time, in seconds, the workload spent
 	// in Admitted state, in the previous `Admit` - `Evict` cycles.
 	//
 	// +optional
-	AccumulatedPastExexcutionTimeSeconds *int32 `json:"accumulatedPastExexcutionTimeSeconds,omitempty"`
+	AccumulatedPastExecutionTimeSeconds *int32 `json:"accumulatedPastExecutionTimeSeconds,omitempty"`
 
 	// schedulingStats tracks scheduling statistics
 	//
@@ -764,10 +764,10 @@ const (
 
 // Workload is the Schema for the workloads API
 // +kubebuilder:validation:XValidation:rule="has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True') && has(self.status.admission) ? size(self.spec.podSets) == size(self.status.admission.podSetAssignments) : true", message="podSetAssignments must have the same number of podSets as the spec"
-// +kubebuilder:validation:XValidation:rule="(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True')) ? (oldSelf.spec.priorityClassSource == self.spec.priorityClassSource) : true", message="field is immutable"
-// +kubebuilder:validation:XValidation:rule="(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True') && has(oldSelf.spec.priorityClassName) && has(self.spec.priorityClassName)) ? (oldSelf.spec.priorityClassName == self.spec.priorityClassName) : true", message="field is immutable"
-// +kubebuilder:validation:XValidation:rule="(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True')) && (has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True')) && has(oldSelf.spec.queueName) && has(self.spec.queueName) ? oldSelf.spec.queueName == self.spec.queueName : true", message="field is immutable"
-// +kubebuilder:validation:XValidation:rule="((has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'Admitted' && c.status == 'True')) && (has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == 'Admitted' && c.status == 'True')))?((has(oldSelf.spec.maximumExecutionTimeSeconds)?oldSelf.spec.maximumExecutionTimeSeconds:0) ==  (has(self.spec.maximumExecutionTimeSeconds)?self.spec.maximumExecutionTimeSeconds:0)):true", message="maximumExecutionTimeSeconds is immutable while admitted"
+// +kubebuilder:validation:XValidation:rule="(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True')) ? ((!has(self.spec.priorityClassSource) && !has(oldSelf.spec.priorityClassSource)) || (has(self.spec.priorityClassSource) && has(oldSelf.spec.priorityClassSource) && self.spec.priorityClassSource == oldSelf.spec.priorityClassSource) || (!has(self.spec.priorityClassSource) && has(oldSelf.spec.priorityClassSource) && oldSelf.spec.priorityClassSource.size() == 0) || (!has(oldSelf.spec.priorityClassSource) && has(self.spec.priorityClassSource) && self.spec.priorityClassSource.size() == 0)) : true", message="priorityClassSource is immutable while workload quota reserved"
+// +kubebuilder:validation:XValidation:rule="(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True') && has(oldSelf.spec.priorityClassName) && has(self.spec.priorityClassName)) ? (oldSelf.spec.priorityClassName == self.spec.priorityClassName) : true",message="priorityClassName is immutable while workload quota reserved"
+// +kubebuilder:validation:XValidation:rule="(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True')) && (has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == 'QuotaReserved' && c.status == 'True')) && has(oldSelf.spec.queueName) && has(self.spec.queueName) ? oldSelf.spec.queueName == self.spec.queueName : true", message="queueName is immutable while workload quota reserved"
+// +kubebuilder:validation:XValidation:rule="((has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'Admitted' && c.status == 'True')) && (has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == 'Admitted' && c.status == 'True')))?((has(oldSelf.spec.maximumExecutionTimeSeconds)?oldSelf.spec.maximumExecutionTimeSeconds:0) ==  (has(self.spec.maximumExecutionTimeSeconds)?self.spec.maximumExecutionTimeSeconds:0)):true", message="maximumExecutionTimeSeconds is immutable while workload quota reserved"
 type Workload struct {
 	metav1.TypeMeta `json:",inline"`
 	// metadata is the metadata of the Workload.
@@ -791,3 +791,5 @@ type WorkloadList struct {
 func init() {
 	SchemeBuilder.Register(&Workload{}, &WorkloadList{})
 }
+
+func (*Workload) Hub() {}
diff --git a/apis/kueue/v1beta2/zz_generated.deepcopy.go b/apis/kueue/v1beta2/zz_generated.deepcopy.go
index a0f863921..281deaf91 100644
--- a/apis/kueue/v1beta2/zz_generated.deepcopy.go
+++ b/apis/kueue/v1beta2/zz_generated.deepcopy.go
@@ -913,8 +913,8 @@ func (in *LocalQueueStatus) DeepCopyInto(out *LocalQueueStatus) {
 			(*in)[i].DeepCopyInto(&(*out)[i])
 		}
 	}
-	if in.FlavorUsage != nil {
-		in, out := &in.FlavorUsage, &out.FlavorUsage
+	if in.FlavorsUsage != nil {
+		in, out := &in.FlavorsUsage, &out.FlavorsUsage
 		*out = make([]LocalQueueFlavorUsage, len(*in))
 		for i := range *in {
 			(*in)[i].DeepCopyInto(&(*out)[i])
@@ -2089,8 +2089,8 @@ func (in *WorkloadStatus) DeepCopyInto(out *WorkloadStatus) {
 			(*in)[i].DeepCopyInto(&(*out)[i])
 		}
 	}
-	if in.AccumulatedPastExexcutionTimeSeconds != nil {
-		in, out := &in.AccumulatedPastExexcutionTimeSeconds, &out.AccumulatedPastExexcutionTimeSeconds
+	if in.AccumulatedPastExecutionTimeSeconds != nil {
+		in, out := &in.AccumulatedPastExecutionTimeSeconds, &out.AccumulatedPastExecutionTimeSeconds
 		*out = new(int32)
 		**out = **in
 	}
diff --git a/charts/kueue/Chart.yaml b/charts/kueue/Chart.yaml
index 4960d9df2..702b56000 100644
--- a/charts/kueue/Chart.yaml
+++ b/charts/kueue/Chart.yaml
@@ -16,9 +16,9 @@ type: application
 # NOTE: Do not modify manually. In Kueue, the version and appVersion are
 # overridden to GIT_TAG when building the artifacts, including the helm charts,
 # via Makefile.
-version: 0.14.1
+version: 0.14.2
 # This is the version number of the application being deployed. This version number should be
 # incremented each time you make changes to the application. Versions are not expected to
 # follow Semantic Versioning. They should reflect the version the application is using.
 # It is recommended to use it with quotes.
-appVersion: "v0.14.1"
+appVersion: "v0.14.2"
diff --git a/charts/kueue/README.md b/charts/kueue/README.md
index 327078031..16353fc2c 100644
--- a/charts/kueue/README.md
+++ b/charts/kueue/README.md
@@ -1,6 +1,6 @@
 # kueue
 
-![Version: 0.14.1](https://img.shields.io/badge/Version-0.14.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.14.1](https://img.shields.io/badge/AppVersion-v0.14.1-informational?style=flat-square)
+![Version: 0.14.2](https://img.shields.io/badge/Version-0.14.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.14.2](https://img.shields.io/badge/AppVersion-v0.14.2-informational?style=flat-square)
 
 Kueue is a set of APIs and controllers for job queueing. It is a job-level manager that decides when a job should be admitted to start (as in pods can be created) and when it should stop (as in active pods should be deleted).
 
@@ -28,7 +28,7 @@ $ helm install kueue kueue/ --create-namespace --namespace kueue-system
 Or use the charts pushed to `oci://registry.k8s.io/kueue/charts/kueue`:
 
 ```bash
-helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.1" --create-namespace --namespace=kueue-system
+helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.2" --create-namespace --namespace=kueue-system
 ```
 
 For more advanced parametrization of Kueue, we recommend using a local overrides file, passed via the `--values` flag. For example:
@@ -50,7 +50,7 @@ controllerManager:
 ```
 
 ```bash
-helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.1" \
+helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.2" \
   --create-namespace --namespace=kueue-system \
   --values overrides.yaml
 ```
@@ -58,7 +58,7 @@ helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.1" \
 You can also use the `--set` flag. For example, to enable a feature gate (e.g., `TopologyAwareScheduling`):
 
 ```bash
-helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.1" \
+helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.2" \
   --create-namespace --namespace=kueue-system \
   --set "controllerManager.featureGates[0].name=TopologyAwareScheduling" \
   --set "controllerManager.featureGates[0].enabled=true"
diff --git a/charts/kueue/README.md.gotmpl b/charts/kueue/README.md.gotmpl
index 6cf856979..6a93180b7 100644
--- a/charts/kueue/README.md.gotmpl
+++ b/charts/kueue/README.md.gotmpl
@@ -30,7 +30,7 @@ $ helm install kueue kueue/ --create-namespace --namespace kueue-system
 Or use the charts pushed to `oci://registry.k8s.io/kueue/charts/kueue`:
 
 ```bash
-helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.1" --create-namespace --namespace=kueue-system
+helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.2" --create-namespace --namespace=kueue-system
 ```
 
 For more advanced parametrization of Kueue, we recommend using a local overrides file, passed via the `--values` flag. For example:
@@ -52,7 +52,7 @@ controllerManager:
 ```
 
 ```bash
-helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.1" \
+helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.2" \
   --create-namespace --namespace=kueue-system \
   --values overrides.yaml
 ```
@@ -60,7 +60,7 @@ helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.1" \
 You can also use the `--set` flag. For example, to enable a feature gate (e.g., `TopologyAwareScheduling`):
 
 ```bash
-helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.1" \
+helm install kueue oci://registry.k8s.io/kueue/charts/kueue --version="0.14.2" \
   --create-namespace --namespace=kueue-system \
   --set "controllerManager.featureGates[0].name=TopologyAwareScheduling" \
   --set "controllerManager.featureGates[0].enabled=true"
diff --git a/charts/kueue/templates/crd/kueue.x-k8s.io_clusterqueues.yaml b/charts/kueue/templates/crd/kueue.x-k8s.io_clusterqueues.yaml
index 9b631f119..749a5aa04 100644
--- a/charts/kueue/templates/crd/kueue.x-k8s.io_clusterqueues.yaml
+++ b/charts/kueue/templates/crd/kueue.x-k8s.io_clusterqueues.yaml
@@ -873,9 +873,9 @@ spec:
                   required:
                     - admissionMode
                   type: object
-                cohort:
+                cohortName:
                   description: |-
-                    cohort that this ClusterQueue belongs to. CQs that belong to the
+                    cohortName that this ClusterQueue belongs to. CQs that belong to the
                     same cohort can borrow unused resources from each other.
 
                     A CQ can be a member of a single borrowing cohort. A workload submitted
@@ -1251,7 +1251,7 @@ spec:
               type: object
               x-kubernetes-validations:
                 - message: borrowingLimit must be nil when cohort is empty
-                  rule: '!has(self.cohort) && has(self.resourceGroups) ? self.resourceGroups.all(rg, rg.flavors.all(f, f.resources.all(r, !has(r.borrowingLimit)))) : true'
+                  rule: '!has(self.cohortName) && has(self.resourceGroups) ? self.resourceGroups.all(rg, rg.flavors.all(f, f.resources.all(r, !has(r.borrowingLimit)))) : true'
             status:
               description: status is the status of the ClusterQueue.
               properties:
diff --git a/charts/kueue/templates/crd/kueue.x-k8s.io_localqueues.yaml b/charts/kueue/templates/crd/kueue.x-k8s.io_localqueues.yaml
index 7e019e206..b6cf04c6f 100644
--- a/charts/kueue/templates/crd/kueue.x-k8s.io_localqueues.yaml
+++ b/charts/kueue/templates/crd/kueue.x-k8s.io_localqueues.yaml
@@ -276,8 +276,11 @@ spec:
                     - name
                   x-kubernetes-list-type: map
                 flavors:
-                  description: flavors lists all currently available ResourceFlavors in specified ClusterQueue.
+                  description: |-
+                    flavors lists all currently available ResourceFlavors in specified ClusterQueue.
+                    Deprecated: Flavors is deprecated and marked for removal in v1beta2.
                   items:
+                    description: 'Deprecated: LocalQueueFlavorStatus is deprecated and marked for removal in v1beta2.'
                     properties:
                       name:
                         description: name of the flavor.
@@ -622,51 +625,12 @@ spec:
                   required:
                     - weightedShare
                   type: object
-                flavorUsage:
-                  description: |-
-                    flavorUsage are the used quotas, by flavor currently in use by the
-                    workloads assigned to this LocalQueue.
-                  items:
-                    properties:
-                      name:
-                        description: name of the flavor.
-                        maxLength: 253
-                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
-                        type: string
-                      resources:
-                        description: resources lists the quota usage for the resources in this flavor.
-                        items:
-                          properties:
-                            name:
-                              description: name of the resource.
-                              type: string
-                            total:
-                              anyOf:
-                                - type: integer
-                                - type: string
-                              description: total is the total quantity of used quota.
-                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                              x-kubernetes-int-or-string: true
-                          required:
-                            - name
-                          type: object
-                        maxItems: 16
-                        type: array
-                        x-kubernetes-list-map-keys:
-                          - name
-                        x-kubernetes-list-type: map
-                    required:
-                      - name
-                      - resources
-                    type: object
-                  maxItems: 16
-                  type: array
-                  x-kubernetes-list-map-keys:
-                    - name
-                  x-kubernetes-list-type: map
                 flavors:
-                  description: flavors lists all currently available ResourceFlavors in specified ClusterQueue.
+                  description: |-
+                    flavors lists all currently available ResourceFlavors in specified ClusterQueue.
+                    Deprecated: Flavors is deprecated and marked for removal in v1beta2.
                   items:
+                    description: 'Deprecated: LocalQueueFlavorStatus is deprecated and marked for removal in v1beta2.'
                     properties:
                       name:
                         description: name of the flavor.
@@ -796,6 +760,48 @@ spec:
                   x-kubernetes-list-map-keys:
                     - name
                   x-kubernetes-list-type: map
+                flavorsUsage:
+                  description: |-
+                    flavorsUsage are the used quotas, by flavor currently in use by the
+                    workloads assigned to this LocalQueue.
+                  items:
+                    properties:
+                      name:
+                        description: name of the flavor.
+                        maxLength: 253
+                        pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                        type: string
+                      resources:
+                        description: resources lists the quota usage for the resources in this flavor.
+                        items:
+                          properties:
+                            name:
+                              description: name of the resource.
+                              type: string
+                            total:
+                              anyOf:
+                                - type: integer
+                                - type: string
+                              description: total is the total quantity of used quota.
+                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                              x-kubernetes-int-or-string: true
+                          required:
+                            - name
+                          type: object
+                        maxItems: 16
+                        type: array
+                        x-kubernetes-list-map-keys:
+                          - name
+                        x-kubernetes-list-type: map
+                    required:
+                      - name
+                      - resources
+                    type: object
+                  maxItems: 16
+                  type: array
+                  x-kubernetes-list-map-keys:
+                    - name
+                  x-kubernetes-list-type: map
                 pendingWorkloads:
                   description: pendingWorkloads is the number of Workloads in the LocalQueue not yet admitted to a ClusterQueue
                   format: int32
diff --git a/charts/kueue/templates/crd/kueue.x-k8s.io_workloads.yaml b/charts/kueue/templates/crd/kueue.x-k8s.io_workloads.yaml
index d37a9c35c..da71f3d5f 100644
--- a/charts/kueue/templates/crd/kueue.x-k8s.io_workloads.yaml
+++ b/charts/kueue/templates/crd/kueue.x-k8s.io_workloads.yaml
@@ -8844,13 +8844,13 @@ spec:
           x-kubernetes-validations:
             - message: podSetAssignments must have the same number of podSets as the spec
               rule: 'has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == ''QuotaReserved'' && c.status == ''True'') && has(self.status.admission) ? size(self.spec.podSets) == size(self.status.admission.podSetAssignments) : true'
-            - message: field is immutable
+            - message: priorityClassSource is immutable while workload quota reserved
               rule: '(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == ''QuotaReserved'' && c.status == ''True'')) ? (oldSelf.spec.priorityClassSource == self.spec.priorityClassSource) : true'
-            - message: field is immutable
+            - message: priorityClassName is immutable while workload quota reserved
               rule: '(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == ''QuotaReserved'' && c.status == ''True'') && has(oldSelf.spec.priorityClassName) && has(self.spec.priorityClassName)) ? (oldSelf.spec.priorityClassName == self.spec.priorityClassName) : true'
-            - message: field is immutable
+            - message: queueName is immutable while workload quota reserved
               rule: '(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == ''QuotaReserved'' && c.status == ''True'')) && (has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == ''QuotaReserved'' && c.status == ''True'')) && has(oldSelf.spec.queueName) && has(self.spec.queueName) ? oldSelf.spec.queueName == self.spec.queueName : true'
-            - message: maximumExecutionTimeSeconds is immutable while admitted
+            - message: maximumExecutionTimeSeconds is immutable while workload quota reserved
               rule: ((has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'Admitted' && c.status == 'True')) && (has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == 'Admitted' && c.status == 'True')))?((has(oldSelf.spec.maximumExecutionTimeSeconds)?oldSelf.spec.maximumExecutionTimeSeconds:0) ==  (has(self.spec.maximumExecutionTimeSeconds)?self.spec.maximumExecutionTimeSeconds:0)):true
       served: true
       storage: true
@@ -17145,9 +17145,9 @@ spec:
             status:
               description: status is the status of the Workload.
               properties:
-                accumulatedPastExexcutionTimeSeconds:
+                accumulatedPastExecutionTimeSeconds:
                   description: |-
-                    accumulatedPastExexcutionTimeSeconds holds the total time, in seconds, the workload spent
+                    accumulatedPastExecutionTimeSeconds holds the total time, in seconds, the workload spent
                     in Admitted state, in the previous `Admit` - `Evict` cycles.
                   format: int32
                   type: integer
@@ -17668,13 +17668,13 @@ spec:
           x-kubernetes-validations:
             - message: podSetAssignments must have the same number of podSets as the spec
               rule: 'has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == ''QuotaReserved'' && c.status == ''True'') && has(self.status.admission) ? size(self.spec.podSets) == size(self.status.admission.podSetAssignments) : true'
-            - message: field is immutable
-              rule: '(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == ''QuotaReserved'' && c.status == ''True'')) ? (oldSelf.spec.priorityClassSource == self.spec.priorityClassSource) : true'
-            - message: field is immutable
+            - message: priorityClassSource is immutable while workload quota reserved
+              rule: '(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == ''QuotaReserved'' && c.status == ''True'')) ? ((!has(self.spec.priorityClassSource) && !has(oldSelf.spec.priorityClassSource)) || (has(self.spec.priorityClassSource) && has(oldSelf.spec.priorityClassSource) && self.spec.priorityClassSource == oldSelf.spec.priorityClassSource) || (!has(self.spec.priorityClassSource) && has(oldSelf.spec.priorityClassSource) && oldSelf.spec.priorityClassSource.size() == 0) || (!has(oldSelf.spec.priorityClassSource) && has(self.spec.priorityClassSource) && self.spec.priorityClassSource.size() == 0)) : true'
+            - message: priorityClassName is immutable while workload quota reserved
               rule: '(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == ''QuotaReserved'' && c.status == ''True'') && has(oldSelf.spec.priorityClassName) && has(self.spec.priorityClassName)) ? (oldSelf.spec.priorityClassName == self.spec.priorityClassName) : true'
-            - message: field is immutable
+            - message: queueName is immutable while workload quota reserved
               rule: '(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == ''QuotaReserved'' && c.status == ''True'')) && (has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == ''QuotaReserved'' && c.status == ''True'')) && has(oldSelf.spec.queueName) && has(self.spec.queueName) ? oldSelf.spec.queueName == self.spec.queueName : true'
-            - message: maximumExecutionTimeSeconds is immutable while admitted
+            - message: maximumExecutionTimeSeconds is immutable while workload quota reserved
               rule: ((has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c, c.type == 'Admitted' && c.status == 'True')) && (has(self.status) && has(self.status.conditions) && self.status.conditions.exists(c, c.type == 'Admitted' && c.status == 'True')))?((has(oldSelf.spec.maximumExecutionTimeSeconds)?oldSelf.spec.maximumExecutionTimeSeconds:0) ==  (has(self.spec.maximumExecutionTimeSeconds)?self.spec.maximumExecutionTimeSeconds:0)):true
       served: true
       storage: false
diff --git a/charts/kueue/templates/rbac/role.yaml b/charts/kueue/templates/rbac/role.yaml
index 0c01e1917..43931821a 100644
--- a/charts/kueue/templates/rbac/role.yaml
+++ b/charts/kueue/templates/rbac/role.yaml
@@ -72,6 +72,15 @@ rules:
       - list
       - update
       - watch
+  - apiGroups:
+      - apiextensions.k8s.io
+    resources:
+      - customresourcedefinitions
+    verbs:
+      - get
+      - list
+      - update
+      - watch
   - apiGroups:
       - apps
     resources:
diff --git a/client-go/applyconfiguration/kueue/v1beta2/clusterqueuespec.go b/client-go/applyconfiguration/kueue/v1beta2/clusterqueuespec.go
index 48547a5c6..b76cd0f24 100644
--- a/client-go/applyconfiguration/kueue/v1beta2/clusterqueuespec.go
+++ b/client-go/applyconfiguration/kueue/v1beta2/clusterqueuespec.go
@@ -26,7 +26,7 @@ import (
 // with apply.
 type ClusterQueueSpecApplyConfiguration struct {
 	ResourceGroups          []ResourceGroupApplyConfiguration          `json:"resourceGroups,omitempty"`
-	Cohort                  *kueuev1beta2.CohortReference              `json:"cohort,omitempty"`
+	CohortName              *kueuev1beta2.CohortReference              `json:"cohortName,omitempty"`
 	QueueingStrategy        *kueuev1beta2.QueueingStrategy             `json:"queueingStrategy,omitempty"`
 	NamespaceSelector       *v1.LabelSelectorApplyConfiguration        `json:"namespaceSelector,omitempty"`
 	FlavorFungibility       *FlavorFungibilityApplyConfiguration       `json:"flavorFungibility,omitempty"`
@@ -57,11 +57,11 @@ func (b *ClusterQueueSpecApplyConfiguration) WithResourceGroups(values ...*Resou
 	return b
 }
 
-// WithCohort sets the Cohort field in the declarative configuration to the given value
+// WithCohortName sets the CohortName field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the Cohort field is set to the value of the last call.
-func (b *ClusterQueueSpecApplyConfiguration) WithCohort(value kueuev1beta2.CohortReference) *ClusterQueueSpecApplyConfiguration {
-	b.Cohort = &value
+// If called multiple times, the CohortName field is set to the value of the last call.
+func (b *ClusterQueueSpecApplyConfiguration) WithCohortName(value kueuev1beta2.CohortReference) *ClusterQueueSpecApplyConfiguration {
+	b.CohortName = &value
 	return b
 }
 
diff --git a/client-go/applyconfiguration/kueue/v1beta2/localqueuestatus.go b/client-go/applyconfiguration/kueue/v1beta2/localqueuestatus.go
index 575d2905c..c16e4ee96 100644
--- a/client-go/applyconfiguration/kueue/v1beta2/localqueuestatus.go
+++ b/client-go/applyconfiguration/kueue/v1beta2/localqueuestatus.go
@@ -29,7 +29,7 @@ type LocalQueueStatusApplyConfiguration struct {
 	ReservingWorkloads *int32                                     `json:"reservingWorkloads,omitempty"`
 	AdmittedWorkloads  *int32                                     `json:"admittedWorkloads,omitempty"`
 	FlavorsReservation []LocalQueueFlavorUsageApplyConfiguration  `json:"flavorsReservation,omitempty"`
-	FlavorUsage        []LocalQueueFlavorUsageApplyConfiguration  `json:"flavorUsage,omitempty"`
+	FlavorsUsage       []LocalQueueFlavorUsageApplyConfiguration  `json:"flavorsUsage,omitempty"`
 	Flavors            []LocalQueueFlavorStatusApplyConfiguration `json:"flavors,omitempty"`
 	FairSharing        *FairSharingStatusApplyConfiguration       `json:"fairSharing,omitempty"`
 }
@@ -90,15 +90,15 @@ func (b *LocalQueueStatusApplyConfiguration) WithFlavorsReservation(values ...*L
 	return b
 }
 
-// WithFlavorUsage adds the given value to the FlavorUsage field in the declarative configuration
+// WithFlavorsUsage adds the given value to the FlavorsUsage field in the declarative configuration
 // and returns the receiver, so that objects can be build by chaining "With" function invocations.
-// If called multiple times, values provided by each call will be appended to the FlavorUsage field.
-func (b *LocalQueueStatusApplyConfiguration) WithFlavorUsage(values ...*LocalQueueFlavorUsageApplyConfiguration) *LocalQueueStatusApplyConfiguration {
+// If called multiple times, values provided by each call will be appended to the FlavorsUsage field.
+func (b *LocalQueueStatusApplyConfiguration) WithFlavorsUsage(values ...*LocalQueueFlavorUsageApplyConfiguration) *LocalQueueStatusApplyConfiguration {
 	for i := range values {
 		if values[i] == nil {
-			panic("nil value passed to WithFlavorUsage")
+			panic("nil value passed to WithFlavorsUsage")
 		}
-		b.FlavorUsage = append(b.FlavorUsage, *values[i])
+		b.FlavorsUsage = append(b.FlavorsUsage, *values[i])
 	}
 	return b
 }
diff --git a/client-go/applyconfiguration/kueue/v1beta2/workloadstatus.go b/client-go/applyconfiguration/kueue/v1beta2/workloadstatus.go
index 355389c41..9d1179a72 100644
--- a/client-go/applyconfiguration/kueue/v1beta2/workloadstatus.go
+++ b/client-go/applyconfiguration/kueue/v1beta2/workloadstatus.go
@@ -24,17 +24,17 @@ import (
 // WorkloadStatusApplyConfiguration represents a declarative configuration of the WorkloadStatus type for use
 // with apply.
 type WorkloadStatusApplyConfiguration struct {
-	Conditions                           []v1.ConditionApplyConfiguration        `json:"conditions,omitempty"`
-	Admission                            *AdmissionApplyConfiguration            `json:"admission,omitempty"`
-	RequeueState                         *RequeueStateApplyConfiguration         `json:"requeueState,omitempty"`
-	ReclaimablePods                      []ReclaimablePodApplyConfiguration      `json:"reclaimablePods,omitempty"`
-	AdmissionChecks                      []AdmissionCheckStateApplyConfiguration `json:"admissionChecks,omitempty"`
-	ResourceRequests                     []PodSetRequestApplyConfiguration       `json:"resourceRequests,omitempty"`
-	AccumulatedPastExexcutionTimeSeconds *int32                                  `json:"accumulatedPastExexcutionTimeSeconds,omitempty"`
-	SchedulingStats                      *SchedulingStatsApplyConfiguration      `json:"schedulingStats,omitempty"`
-	NominatedClusterNames                []string                                `json:"nominatedClusterNames,omitempty"`
-	ClusterName                          *string                                 `json:"clusterName,omitempty"`
-	UnhealthyNodes                       []UnhealthyNodeApplyConfiguration       `json:"unhealthyNodes,omitempty"`
+	Conditions                          []v1.ConditionApplyConfiguration        `json:"conditions,omitempty"`
+	Admission                           *AdmissionApplyConfiguration            `json:"admission,omitempty"`
+	RequeueState                        *RequeueStateApplyConfiguration         `json:"requeueState,omitempty"`
+	ReclaimablePods                     []ReclaimablePodApplyConfiguration      `json:"reclaimablePods,omitempty"`
+	AdmissionChecks                     []AdmissionCheckStateApplyConfiguration `json:"admissionChecks,omitempty"`
+	ResourceRequests                    []PodSetRequestApplyConfiguration       `json:"resourceRequests,omitempty"`
+	AccumulatedPastExecutionTimeSeconds *int32                                  `json:"accumulatedPastExecutionTimeSeconds,omitempty"`
+	SchedulingStats                     *SchedulingStatsApplyConfiguration      `json:"schedulingStats,omitempty"`
+	NominatedClusterNames               []string                                `json:"nominatedClusterNames,omitempty"`
+	ClusterName                         *string                                 `json:"clusterName,omitempty"`
+	UnhealthyNodes                      []UnhealthyNodeApplyConfiguration       `json:"unhealthyNodes,omitempty"`
 }
 
 // WorkloadStatusApplyConfiguration constructs a declarative configuration of the WorkloadStatus type for use with
@@ -111,11 +111,11 @@ func (b *WorkloadStatusApplyConfiguration) WithResourceRequests(values ...*PodSe
 	return b
 }
 
-// WithAccumulatedPastExexcutionTimeSeconds sets the AccumulatedPastExexcutionTimeSeconds field in the declarative configuration to the given value
+// WithAccumulatedPastExecutionTimeSeconds sets the AccumulatedPastExecutionTimeSeconds field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
-// If called multiple times, the AccumulatedPastExexcutionTimeSeconds field is set to the value of the last call.
-func (b *WorkloadStatusApplyConfiguration) WithAccumulatedPastExexcutionTimeSeconds(value int32) *WorkloadStatusApplyConfiguration {
-	b.AccumulatedPastExexcutionTimeSeconds = &value
+// If called multiple times, the AccumulatedPastExecutionTimeSeconds field is set to the value of the last call.
+func (b *WorkloadStatusApplyConfiguration) WithAccumulatedPastExecutionTimeSeconds(value int32) *WorkloadStatusApplyConfiguration {
+	b.AccumulatedPastExecutionTimeSeconds = &value
 	return b
 }
 
diff --git a/cmd/kueueviz/INSTALL.md b/cmd/kueueviz/INSTALL.md
index 82b344920..b8c2fd9bc 100644
--- a/cmd/kueueviz/INSTALL.md
+++ b/cmd/kueueviz/INSTALL.md
@@ -3,7 +3,7 @@
 KueueViz can be installed using `kubectl` with the following command:
 
 ```
-kubectl create -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.14.1/kueueviz.yaml
+kubectl create -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.14.2/kueueviz.yaml
 ```
 If you are using `kind` and that you don't have an `ingress` controller, you can use `port-forward` to 
 configure and run `KueueViz`:
@@ -23,7 +23,7 @@ by ensuring that `enableKueueViz` is set to `true`:
 
 ```
 helm upgrade --install kueue oci://registry.k8s.io/kueue/charts/kueue \
-  --version="0.14.1"
+  --version="0.14.2"
   --namespace kueue-system \
   --set enableKueueViz=true \
   --create-namespace
@@ -44,7 +44,7 @@ kind create cluster
 kind get kubeconfig > kubeconfig
 export KUBECONFIG=$PWD/kubeconfig
 helm install kueue oci://us-central1-docker.pkg.dev/k8s-staging-images/charts/kueue \
-            --version="0.14.1" --create-namespace --namespace=kueue-system
+            --version="0.14.2" --create-namespace --namespace=kueue-system
 ```
 
 ## Build
diff --git a/cmd/kueueviz/frontend/package-lock.json b/cmd/kueueviz/frontend/package-lock.json
index 487912dd7..adc29e480 100644
--- a/cmd/kueueviz/frontend/package-lock.json
+++ b/cmd/kueueviz/frontend/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "kueueviz-frontend",
-  "version": "0.14.1",
+  "version": "0.14.2",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "kueueviz-frontend",
-      "version": "0.14.1",
+      "version": "0.14.2",
       "license": "Apache 2.0",
       "dependencies": {
         "@emotion/react": "^11.14.0",
diff --git a/cmd/kueueviz/frontend/package.json b/cmd/kueueviz/frontend/package.json
index e0c171eb3..e60f3e40f 100644
--- a/cmd/kueueviz/frontend/package.json
+++ b/cmd/kueueviz/frontend/package.json
@@ -1,6 +1,6 @@
 {
   "name": "kueueviz-frontend",
-  "version": "0.14.1",
+  "version": "0.14.2",
   "private": true,
   "description": "Frontend dashboard for visualizing Kueue status",
   "main": "src/index.jsx",
diff --git a/config/components/crd/bases/kueue.x-k8s.io_clusterqueues.yaml b/config/components/crd/bases/kueue.x-k8s.io_clusterqueues.yaml
index bb64f68cc..e42809e8f 100644
--- a/config/components/crd/bases/kueue.x-k8s.io_clusterqueues.yaml
+++ b/config/components/crd/bases/kueue.x-k8s.io_clusterqueues.yaml
@@ -877,9 +877,9 @@ spec:
                 required:
                 - admissionMode
                 type: object
-              cohort:
+              cohortName:
                 description: |-
-                  cohort that this ClusterQueue belongs to. CQs that belong to the
+                  cohortName that this ClusterQueue belongs to. CQs that belong to the
                   same cohort can borrow unused resources from each other.
 
                   A CQ can be a member of a single borrowing cohort. A workload submitted
@@ -1260,7 +1260,7 @@ spec:
             type: object
             x-kubernetes-validations:
             - message: borrowingLimit must be nil when cohort is empty
-              rule: '!has(self.cohort) && has(self.resourceGroups) ? self.resourceGroups.all(rg,
+              rule: '!has(self.cohortName) && has(self.resourceGroups) ? self.resourceGroups.all(rg,
                 rg.flavors.all(f, f.resources.all(r, !has(r.borrowingLimit)))) : true'
           status:
             description: status is the status of the ClusterQueue.
diff --git a/config/components/crd/bases/kueue.x-k8s.io_localqueues.yaml b/config/components/crd/bases/kueue.x-k8s.io_localqueues.yaml
index 606ed2fe4..e8c95ba7e 100644
--- a/config/components/crd/bases/kueue.x-k8s.io_localqueues.yaml
+++ b/config/components/crd/bases/kueue.x-k8s.io_localqueues.yaml
@@ -266,9 +266,12 @@ spec:
                 - name
                 x-kubernetes-list-type: map
               flavors:
-                description: flavors lists all currently available ResourceFlavors
-                  in specified ClusterQueue.
+                description: |-
+                  flavors lists all currently available ResourceFlavors in specified ClusterQueue.
+                  Deprecated: Flavors is deprecated and marked for removal in v1beta2.
                 items:
+                  description: 'Deprecated: LocalQueueFlavorStatus is deprecated and
+                    marked for removal in v1beta2.'
                   properties:
                     name:
                       description: name of the flavor.
@@ -624,53 +627,13 @@ spec:
                 required:
                 - weightedShare
                 type: object
-              flavorUsage:
-                description: |-
-                  flavorUsage are the used quotas, by flavor currently in use by the
-                  workloads assigned to this LocalQueue.
-                items:
-                  properties:
-                    name:
-                      description: name of the flavor.
-                      maxLength: 253
-                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
-                      type: string
-                    resources:
-                      description: resources lists the quota usage for the resources
-                        in this flavor.
-                      items:
-                        properties:
-                          name:
-                            description: name of the resource.
-                            type: string
-                          total:
-                            anyOf:
-                            - type: integer
-                            - type: string
-                            description: total is the total quantity of used quota.
-                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                            x-kubernetes-int-or-string: true
-                        required:
-                        - name
-                        type: object
-                      maxItems: 16
-                      type: array
-                      x-kubernetes-list-map-keys:
-                      - name
-                      x-kubernetes-list-type: map
-                  required:
-                  - name
-                  - resources
-                  type: object
-                maxItems: 16
-                type: array
-                x-kubernetes-list-map-keys:
-                - name
-                x-kubernetes-list-type: map
               flavors:
-                description: flavors lists all currently available ResourceFlavors
-                  in specified ClusterQueue.
+                description: |-
+                  flavors lists all currently available ResourceFlavors in specified ClusterQueue.
+                  Deprecated: Flavors is deprecated and marked for removal in v1beta2.
                 items:
+                  description: 'Deprecated: LocalQueueFlavorStatus is deprecated and
+                    marked for removal in v1beta2.'
                   properties:
                     name:
                       description: name of the flavor.
@@ -805,6 +768,49 @@ spec:
                 x-kubernetes-list-map-keys:
                 - name
                 x-kubernetes-list-type: map
+              flavorsUsage:
+                description: |-
+                  flavorsUsage are the used quotas, by flavor currently in use by the
+                  workloads assigned to this LocalQueue.
+                items:
+                  properties:
+                    name:
+                      description: name of the flavor.
+                      maxLength: 253
+                      pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
+                      type: string
+                    resources:
+                      description: resources lists the quota usage for the resources
+                        in this flavor.
+                      items:
+                        properties:
+                          name:
+                            description: name of the resource.
+                            type: string
+                          total:
+                            anyOf:
+                            - type: integer
+                            - type: string
+                            description: total is the total quantity of used quota.
+                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                            x-kubernetes-int-or-string: true
+                        required:
+                        - name
+                        type: object
+                      maxItems: 16
+                      type: array
+                      x-kubernetes-list-map-keys:
+                      - name
+                      x-kubernetes-list-type: map
+                  required:
+                  - name
+                  - resources
+                  type: object
+                maxItems: 16
+                type: array
+                x-kubernetes-list-map-keys:
+                - name
+                x-kubernetes-list-type: map
               pendingWorkloads:
                 description: pendingWorkloads is the number of Workloads in the LocalQueue
                   not yet admitted to a ClusterQueue
diff --git a/config/components/crd/bases/kueue.x-k8s.io_workloads.yaml b/config/components/crd/bases/kueue.x-k8s.io_workloads.yaml
index 35c96cfb7..e83726674 100644
--- a/config/components/crd/bases/kueue.x-k8s.io_workloads.yaml
+++ b/config/components/crd/bases/kueue.x-k8s.io_workloads.yaml
@@ -9341,23 +9341,23 @@ spec:
             c.type == ''QuotaReserved'' && c.status == ''True'') && has(self.status.admission)
             ? size(self.spec.podSets) == size(self.status.admission.podSetAssignments)
             : true'
-        - message: field is immutable
+        - message: priorityClassSource is immutable while workload quota reserved
           rule: '(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c,
             c.type == ''QuotaReserved'' && c.status == ''True'')) ? (oldSelf.spec.priorityClassSource
             == self.spec.priorityClassSource) : true'
-        - message: field is immutable
+        - message: priorityClassName is immutable while workload quota reserved
           rule: '(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c,
             c.type == ''QuotaReserved'' && c.status == ''True'') && has(oldSelf.spec.priorityClassName)
             && has(self.spec.priorityClassName)) ? (oldSelf.spec.priorityClassName
             == self.spec.priorityClassName) : true'
-        - message: field is immutable
+        - message: queueName is immutable while workload quota reserved
           rule: '(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c,
             c.type == ''QuotaReserved'' && c.status == ''True'')) && (has(self.status)
             && has(self.status.conditions) && self.status.conditions.exists(c, c.type
             == ''QuotaReserved'' && c.status == ''True'')) && has(oldSelf.spec.queueName)
             && has(self.spec.queueName) ? oldSelf.spec.queueName == self.spec.queueName
             : true'
-        - message: maximumExecutionTimeSeconds is immutable while admitted
+        - message: maximumExecutionTimeSeconds is immutable while workload quota reserved
           rule: ((has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c,
             c.type == 'Admitted' && c.status == 'True')) && (has(self.status) && has(self.status.conditions)
             && self.status.conditions.exists(c, c.type == 'Admitted' && c.status ==
@@ -18139,9 +18139,9 @@ spec:
           status:
             description: status is the status of the Workload.
             properties:
-              accumulatedPastExexcutionTimeSeconds:
+              accumulatedPastExecutionTimeSeconds:
                 description: |-
-                  accumulatedPastExexcutionTimeSeconds holds the total time, in seconds, the workload spent
+                  accumulatedPastExecutionTimeSeconds holds the total time, in seconds, the workload spent
                   in Admitted state, in the previous `Admit` - `Evict` cycles.
                 format: int32
                 type: integer
@@ -18692,23 +18692,28 @@ spec:
             c.type == ''QuotaReserved'' && c.status == ''True'') && has(self.status.admission)
             ? size(self.spec.podSets) == size(self.status.admission.podSetAssignments)
             : true'
-        - message: field is immutable
+        - message: priorityClassSource is immutable while workload quota reserved
           rule: '(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c,
-            c.type == ''QuotaReserved'' && c.status == ''True'')) ? (oldSelf.spec.priorityClassSource
-            == self.spec.priorityClassSource) : true'
-        - message: field is immutable
+            c.type == ''QuotaReserved'' && c.status == ''True'')) ? ((!has(self.spec.priorityClassSource)
+            && !has(oldSelf.spec.priorityClassSource)) || (has(self.spec.priorityClassSource)
+            && has(oldSelf.spec.priorityClassSource) && self.spec.priorityClassSource
+            == oldSelf.spec.priorityClassSource) || (!has(self.spec.priorityClassSource)
+            && has(oldSelf.spec.priorityClassSource) && oldSelf.spec.priorityClassSource.size()
+            == 0) || (!has(oldSelf.spec.priorityClassSource) && has(self.spec.priorityClassSource)
+            && self.spec.priorityClassSource.size() == 0)) : true'
+        - message: priorityClassName is immutable while workload quota reserved
           rule: '(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c,
             c.type == ''QuotaReserved'' && c.status == ''True'') && has(oldSelf.spec.priorityClassName)
             && has(self.spec.priorityClassName)) ? (oldSelf.spec.priorityClassName
             == self.spec.priorityClassName) : true'
-        - message: field is immutable
+        - message: queueName is immutable while workload quota reserved
           rule: '(has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c,
             c.type == ''QuotaReserved'' && c.status == ''True'')) && (has(self.status)
             && has(self.status.conditions) && self.status.conditions.exists(c, c.type
             == ''QuotaReserved'' && c.status == ''True'')) && has(oldSelf.spec.queueName)
             && has(self.spec.queueName) ? oldSelf.spec.queueName == self.spec.queueName
             : true'
-        - message: maximumExecutionTimeSeconds is immutable while admitted
+        - message: maximumExecutionTimeSeconds is immutable while workload quota reserved
           rule: ((has(oldSelf.status) && has(oldSelf.status.conditions) && oldSelf.status.conditions.exists(c,
             c.type == 'Admitted' && c.status == 'True')) && (has(self.status) && has(self.status.conditions)
             && self.status.conditions.exists(c, c.type == 'Admitted' && c.status ==
diff --git a/config/components/crd/kustomization.yaml b/config/components/crd/kustomization.yaml
index c59e3a9a2..c5779dd70 100644
--- a/config/components/crd/kustomization.yaml
+++ b/config/components/crd/kustomization.yaml
@@ -18,9 +18,9 @@ resources:
 patches:
 # [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix.
 # patches here are for enabling the conversion webhook for each CRD
-#- path: patches/webhook_in_localqueues.yaml
-#- path: patches/webhook_in_clusterqueues.yaml
-#- path: patches/webhook_in_workloads.yaml
+- path: patches/webhook_in_localqueues.yaml
+- path: patches/webhook_in_clusterqueues.yaml
+- path: patches/webhook_in_workloads.yaml
 #- path: patches/webhook_in_resourceflavors.yaml
 #+kubebuilder:scaffold:crdkustomizewebhookpatch
 
diff --git a/config/components/rbac/role.yaml b/config/components/rbac/role.yaml
index cbe4c80a0..f6d955306 100644
--- a/config/components/rbac/role.yaml
+++ b/config/components/rbac/role.yaml
@@ -69,6 +69,15 @@ rules:
   - list
   - update
   - watch
+- apiGroups:
+  - apiextensions.k8s.io
+  resources:
+  - customresourcedefinitions
+  verbs:
+  - get
+  - list
+  - update
+  - watch
 - apiGroups:
   - apps
   resources:
diff --git a/go.mod b/go.mod
index 9b13cd842..a02321e90 100644
--- a/go.mod
+++ b/go.mod
@@ -9,7 +9,7 @@ require (
 	github.com/google/go-cmp v0.7.0
 	github.com/json-iterator/go v1.1.12
 	github.com/kubeflow/mpi-operator v0.6.0
-	github.com/kubeflow/trainer/v2 v2.0.1
+	github.com/kubeflow/trainer/v2 v2.1.0-rc.0
 	github.com/kubeflow/training-operator v1.9.3
 	github.com/onsi/ginkgo/v2 v2.26.0
 	github.com/onsi/gomega v1.38.2
@@ -155,4 +155,5 @@ require (
 	sigs.k8s.io/kustomize/kyaml v0.20.1 // indirect
 	sigs.k8s.io/randfill v1.0.0 // indirect
 	sigs.k8s.io/scheduler-plugins v0.31.8 // indirect
+	volcano.sh/apis v1.12.2 // indirect
 )
diff --git a/go.sum b/go.sum
index a3bd6af76..c08300498 100644
--- a/go.sum
+++ b/go.sum
@@ -136,8 +136,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/kubeflow/mpi-operator v0.6.0 h1:RzzG03oyQIiHe/SH2k19N+Hp4QkxEsG2l9G1T7US+ys=
 github.com/kubeflow/mpi-operator v0.6.0/go.mod h1:lu3cj3ESq3SdS29nbHC26TuXiTYYQYTHJ6fcy5Xv20c=
-github.com/kubeflow/trainer/v2 v2.0.1 h1:4bMZdFIpQBHjcUene6P+MqbY5v7ccyLUIKkefOhUFG8=
-github.com/kubeflow/trainer/v2 v2.0.1/go.mod h1:AH97YWUun+pLQlQHyRIlYcXw+YUuuQhnVWVYTbzGvgo=
+github.com/kubeflow/trainer/v2 v2.1.0-rc.0 h1:kr4Gjb7osBIwZm5qE4ajwxe0P4n2lWwD3grhfXc66ds=
+github.com/kubeflow/trainer/v2 v2.1.0-rc.0/go.mod h1:Y9hmSGG3A9tFKUjlcWf7Kg/SwibYwrZTK5ZqAxMxyno=
 github.com/kubeflow/training-operator v1.9.3 h1:aaSHqskOtCY8Dn8sVd+l9p5XAczW6O0nYMPjVLAw/lc=
 github.com/kubeflow/training-operator v1.9.3/go.mod h1:6zI0hgeCOheiW5Z12IcVkKBuSWm714fz8mUvYu4Fid4=
 github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
@@ -436,3 +436,5 @@ sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/
 sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
 sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
 sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=
+volcano.sh/apis v1.12.2 h1:KvNyM/kMizFVlALiH/uFHPwYFHRtxuVnBL0upbFbDss=
+volcano.sh/apis v1.12.2/go.mod h1:0XNNnIOevJSYNiXRmwhXUrYCcCcWcBeTY0nxrlkk03A=
diff --git a/pkg/cache/scheduler/cache.go b/pkg/cache/scheduler/cache.go
index ac2a06cab..233689f50 100644
--- a/pkg/cache/scheduler/cache.go
+++ b/pkg/cache/scheduler/cache.go
@@ -805,7 +805,8 @@ type LocalQueueUsageStats struct {
 	ReservingWorkloads int
 	AdmittedResources  []kueue.LocalQueueFlavorUsage
 	AdmittedWorkloads  int
-	Flavors            []kueue.LocalQueueFlavorStatus
+	// Deprecated: Flavors is deprecated and marked for removal in v1beta2.
+	Flavors []kueue.LocalQueueFlavorStatus
 }
 
 func (c *Cache) LocalQueueUsage(qObj *kueue.LocalQueue) (*LocalQueueUsageStats, error) {
diff --git a/pkg/controller/admissionchecks/multikueue/indexer.go b/pkg/controller/admissionchecks/multikueue/indexer.go
index 5a5582715..7be067f7e 100644
--- a/pkg/controller/admissionchecks/multikueue/indexer.go
+++ b/pkg/controller/admissionchecks/multikueue/indexer.go
@@ -25,12 +25,14 @@ import (
 
 	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/pkg/util/admissioncheck"
+	"sigs.k8s.io/kueue/pkg/util/slices"
 )
 
 const (
-	UsingKubeConfigs             = "spec.kubeconfigs"
-	UsingMultiKueueClusters      = "spec.multiKueueClusters"
-	AdmissionCheckUsingConfigKey = "spec.multiKueueConfig"
+	UsingKubeConfigs               = "spec.kubeconfigs"
+	UsingMultiKueueClusters        = "spec.multiKueueClusters"
+	AdmissionCheckUsingConfigKey   = "spec.multiKueueConfig"
+	WorkloadsWithAdmissionCheckKey = "status.admissionChecks"
 )
 
 var (
@@ -55,6 +57,16 @@ func indexUsingMultiKueueClusters(obj client.Object) []string {
 	return config.Spec.Clusters
 }
 
+func indexWorkloadsAdmissionChecks(obj client.Object) []string {
+	workload, isWorkload := obj.(*kueue.Workload)
+	if !isWorkload || len(workload.Status.AdmissionChecks) == 0 {
+		return nil
+	}
+	return slices.Map(workload.Status.AdmissionChecks, func(checkState *kueue.AdmissionCheckState) string {
+		return string(checkState.Name)
+	})
+}
+
 func SetupIndexer(ctx context.Context, indexer client.FieldIndexer, configNamespace string) error {
 	if err := indexer.IndexField(ctx, &kueue.MultiKueueCluster{}, UsingKubeConfigs, getIndexUsingKubeConfigs(configNamespace)); err != nil {
 		return fmt.Errorf("setting index on clusters using kubeconfig: %w", err)
@@ -65,5 +77,8 @@ func SetupIndexer(ctx context.Context, indexer client.FieldIndexer, configNamesp
 	if err := indexer.IndexField(ctx, &kueue.AdmissionCheck{}, AdmissionCheckUsingConfigKey, admissioncheck.IndexerByConfigFunction(kueue.MultiKueueControllerName, configGVK)); err != nil {
 		return fmt.Errorf("setting index on admission checks config: %w", err)
 	}
+	if err := indexer.IndexField(ctx, &kueue.Workload{}, WorkloadsWithAdmissionCheckKey, indexWorkloadsAdmissionChecks); err != nil {
+		return fmt.Errorf("setting index on workloads admission checks: %w", err)
+	}
 	return nil
 }
diff --git a/pkg/controller/admissionchecks/multikueue/workload.go b/pkg/controller/admissionchecks/multikueue/workload.go
index db7a23e0f..6ad58de71 100644
--- a/pkg/controller/admissionchecks/multikueue/workload.go
+++ b/pkg/controller/admissionchecks/multikueue/workload.go
@@ -559,6 +559,65 @@ func newWlReconciler(c client.Client, helper *admissioncheck.MultiKueueStoreHelp
 	return r
 }
 
+type configHandler struct {
+	client            client.Client
+	eventsBatchPeriod time.Duration
+}
+
+func (c *configHandler) Create(context.Context, event.CreateEvent, workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+	// no-op as we don't need to react to new configs
+}
+
+func (c *configHandler) Update(ctx context.Context, e event.UpdateEvent, q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+	oldConfig, isOldConfig := e.ObjectOld.(*kueue.MultiKueueConfig)
+	newConfig, isNewConfig := e.ObjectNew.(*kueue.MultiKueueConfig)
+	if !isOldConfig || !isNewConfig {
+		return
+	}
+	if equality.Semantic.DeepEqual(oldConfig.Spec.Clusters, newConfig.Spec.Clusters) {
+		return
+	}
+	if err := c.queueWorkloadsForConfig(ctx, oldConfig.Name, q); err != nil {
+		ctrl.LoggerFrom(ctx).V(2).Error(err, "Failed to queue workloads on config update", "multiKueueConfig", klog.KObj(oldConfig))
+	}
+}
+
+func (c *configHandler) Delete(ctx context.Context, e event.DeleteEvent, q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+	config, isConfig := e.Object.(*kueue.MultiKueueConfig)
+	if !isConfig {
+		return
+	}
+	if err := c.queueWorkloadsForConfig(ctx, config.Name, q); err != nil {
+		ctrl.LoggerFrom(ctx).V(2).Error(err, "Failed to queue workloads on config deletion", "multiKueueConfig", klog.KObj(config))
+	}
+}
+
+func (c *configHandler) Generic(context.Context, event.GenericEvent, workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+	// no-op as we don't need to react to generic
+}
+
+func (c *configHandler) queueWorkloadsForConfig(ctx context.Context, configName string, q workqueue.TypedRateLimitingInterface[reconcile.Request]) error {
+	admissionChecks := &kueue.AdmissionCheckList{}
+	var errs []error
+
+	if err := c.client.List(ctx, admissionChecks, client.MatchingFields{AdmissionCheckUsingConfigKey: configName}); err != nil {
+		errs = append(errs, err)
+		return errors.Join(errs...)
+	}
+
+	for _, admissionCheck := range admissionChecks.Items {
+		workloads := &kueue.WorkloadList{}
+		if err := c.client.List(ctx, workloads, client.MatchingFields{WorkloadsWithAdmissionCheckKey: admissionCheck.Name}); err != nil {
+			errs = append(errs, err)
+			continue
+		}
+		for _, workload := range workloads.Items {
+			q.AddAfter(reconcile.Request{NamespacedName: client.ObjectKeyFromObject(&workload)}, c.eventsBatchPeriod)
+		}
+	}
+	return errors.Join(errs...)
+}
+
 func (w *wlReconciler) setupWithManager(mgr ctrl.Manager) error {
 	syncHndl := handler.Funcs{
 		GenericFunc: func(_ context.Context, e event.GenericEvent, q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
@@ -573,6 +632,7 @@ func (w *wlReconciler) setupWithManager(mgr ctrl.Manager) error {
 		Named("multikueue_workload").
 		For(&kueue.Workload{}).
 		WatchesRawSource(source.Channel(w.clusters.wlUpdateCh, syncHndl)).
+		Watches(&kueue.MultiKueueConfig{}, &configHandler{client: w.client, eventsBatchPeriod: w.eventsBatchPeriod}).
 		WithEventFilter(w).
 		Complete(w)
 }
diff --git a/pkg/controller/jobs/trainjob/trainjob_controller.go b/pkg/controller/jobs/trainjob/trainjob_controller.go
index 544cd621d..5386fac2f 100644
--- a/pkg/controller/jobs/trainjob/trainjob_controller.go
+++ b/pkg/controller/jobs/trainjob/trainjob_controller.go
@@ -138,7 +138,8 @@ func (t *TrainJob) IsSuspended() bool {
 
 func (t *TrainJob) IsActive() bool {
 	for i := range t.Status.JobsStatus {
-		if t.Status.JobsStatus[i].Active > 0 {
+		active := ptr.Deref(t.Status.JobsStatus[i].Active, 0)
+		if active > 0 {
 			return true
 		}
 	}
@@ -229,13 +230,17 @@ func getRuntimeSpec(ctx context.Context, trainJob *kftrainer.TrainJob) (*kftrain
 	}
 }
 
-func (t *TrainJob) PodSets(ctx context.Context) ([]kueue.PodSet, error) {
+func podSets(ctx context.Context, t *TrainJob) ([]kueue.PodSet, error) {
 	jobset, err := getChildJobSet(ctx, t)
 	if err != nil {
 		return nil, err
 	}
 
-	podsets, err := (*workloadjobset.JobSet)(jobset).PodSets(ctx)
+	return (*workloadjobset.JobSet)(jobset).PodSets(ctx)
+}
+
+func (t *TrainJob) PodSets(ctx context.Context) ([]kueue.PodSet, error) {
+	podsets, err := podSets(ctx, t)
 	if err != nil {
 		return nil, err
 	}
@@ -261,26 +266,28 @@ func (t *TrainJob) RunWithPodSetsInfo(ctx context.Context, podSetsInfo []podset.
 		return podset.BadPodSetsInfoLenError(len(jobset.Spec.ReplicatedJobs), len(podSetsInfo))
 	}
 
-	if t.Spec.PodSpecOverrides == nil {
-		t.Spec.PodSpecOverrides = []kftrainer.PodSpecOverride{}
+	if t.Spec.PodTemplateOverrides == nil {
+		t.Spec.PodTemplateOverrides = []kftrainer.PodTemplateOverride{}
 	}
 	if t.Annotations == nil {
 		t.Annotations = map[string]string{}
 	}
-	t.Annotations[firstOverrideIdx] = strconv.Itoa(len(t.Spec.PodSpecOverrides))
+	t.Annotations[firstOverrideIdx] = strconv.Itoa(len(t.Spec.PodTemplateOverrides))
 	for _, info := range podSetsInfo {
 		// The trainjob controller merges each podSpecOverride sequentially, so any existing user provided override will be processed first
-		t.Spec.PodSpecOverrides = append(t.Spec.PodSpecOverrides, kftrainer.PodSpecOverride{
-			TargetJobs: []kftrainer.PodSpecOverrideTargetJob{
+		t.Spec.PodTemplateOverrides = append(t.Spec.PodTemplateOverrides, kftrainer.PodTemplateOverride{
+			TargetJobs: []kftrainer.PodTemplateOverrideTargetJob{
 				{Name: string(info.Name)},
 			},
-			// TODO: Set the labels/annotations when supported. See https://github.com/kubeflow/trainer/pull/2785
-			//
-			// NOTE: Due to the issue above, in TAS mode, missing PodSet-specific labels and annotations
-			//       prevent removal of the scheduling gate, leaving the Pod in a Pending state.
-			NodeSelector:    info.NodeSelector,
-			Tolerations:     info.Tolerations,
-			SchedulingGates: info.SchedulingGates,
+			Metadata: &metav1.ObjectMeta{
+				Annotations: info.Annotations,
+				Labels:      info.Labels,
+			},
+			Spec: &kftrainer.PodTemplateSpecOverride{
+				NodeSelector:    info.NodeSelector,
+				Tolerations:     info.Tolerations,
+				SchedulingGates: info.SchedulingGates,
+			},
 		})
 	}
 	// Update the podSpecOverrides while the job is suspended, since is a requirement from the trainjob admission webhook
@@ -327,7 +334,7 @@ func (t *TrainJob) RestorePodSetsInfo(_ []podset.PodSetInfo) bool {
 	if err != nil {
 		return false
 	}
-	t.Spec.PodSpecOverrides = t.Spec.PodSpecOverrides[:idxInt]
+	t.Spec.PodTemplateOverrides = t.Spec.PodTemplateOverrides[:idxInt]
 	return true
 }
 
@@ -353,7 +360,7 @@ func (t *TrainJob) PodsReady(ctx context.Context) bool {
 	}
 	var readyReplicas int32
 	for _, jobStatus := range t.Status.JobsStatus {
-		readyReplicas += jobStatus.Ready + jobStatus.Succeeded
+		readyReplicas += ptr.Deref(jobStatus.Ready, 0) + ptr.Deref(jobStatus.Succeeded, 0)
 	}
 	return replicas == readyReplicas
 }
@@ -372,11 +379,12 @@ func (t *TrainJob) ReclaimablePods(ctx context.Context) ([]kueue.ReclaimablePod,
 
 	for i := range jobset.Spec.ReplicatedJobs {
 		spec := &jobset.Spec.ReplicatedJobs[i]
-		if status, found := statuses[spec.Name]; found && status.Succeeded > 0 {
-			if status.Succeeded > 0 && status.Succeeded <= spec.Replicas {
+		if status, found := statuses[spec.Name]; found {
+			succeeded := ptr.Deref(status.Succeeded, 0)
+			if succeeded > 0 && succeeded <= spec.Replicas {
 				ret = append(ret, kueue.ReclaimablePod{
 					Name:  kueue.NewPodSetReference(spec.Name),
-					Count: status.Succeeded * workloadjobset.PodsCountPerReplica(spec),
+					Count: succeeded * workloadjobset.PodsCountPerReplica(spec),
 				})
 			}
 		}
diff --git a/pkg/controller/jobs/trainjob/trainjob_webhook.go b/pkg/controller/jobs/trainjob/trainjob_webhook.go
index bea81f631..37f736f2d 100644
--- a/pkg/controller/jobs/trainjob/trainjob_webhook.go
+++ b/pkg/controller/jobs/trainjob/trainjob_webhook.go
@@ -32,6 +32,7 @@ import (
 	controllerconstants "sigs.k8s.io/kueue/pkg/controller/constants"
 	"sigs.k8s.io/kueue/pkg/controller/jobframework"
 	"sigs.k8s.io/kueue/pkg/controller/jobframework/webhook"
+	"sigs.k8s.io/kueue/pkg/features"
 )
 
 type TrainJobWebhook struct {
@@ -97,7 +98,11 @@ func (w *TrainJobWebhook) ValidateCreate(ctx context.Context, obj runtime.Object
 	trainjob := fromObject(obj)
 	log := ctrl.LoggerFrom(ctx).WithName("trainjob-webhook")
 	log.Info("Validating create")
-	return nil, w.validateCreate(trainjob).ToAggregate()
+	validationErrs, err := w.validateCreate(ctx, trainjob)
+	if err != nil {
+		return nil, err
+	}
+	return nil, validationErrs.ToAggregate()
 }
 
 // ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type
@@ -106,20 +111,55 @@ func (w *TrainJobWebhook) ValidateUpdate(ctx context.Context, oldObj, newObj run
 	newTrainJob := fromObject(newObj)
 	log := ctrl.LoggerFrom(ctx).WithName("trainjob-webhook")
 	log.Info("Validating update")
-	return nil, w.validateUpdate(oldTrainJob, newTrainJob).ToAggregate()
+	validationErrs, err := w.validateUpdate(ctx, oldTrainJob, newTrainJob)
+	if err != nil {
+		return nil, err
+	}
+	return nil, validationErrs.ToAggregate()
 }
 
-func (w *TrainJobWebhook) validateUpdate(oldTrainJob, newTrainJob *TrainJob) field.ErrorList {
+func (w *TrainJobWebhook) validateUpdate(ctx context.Context, oldTrainJob, newTrainJob *TrainJob) (field.ErrorList, error) {
 	var allErrs field.ErrorList
 	allErrs = append(allErrs, jobframework.ValidateJobOnUpdate(oldTrainJob, newTrainJob, w.queues.DefaultLocalQueueExist)...)
-	allErrs = append(allErrs, w.validateCreate(newTrainJob)...)
-	return allErrs
+	validationErrs, err := w.validateCreate(ctx, newTrainJob)
+	if err != nil {
+		return nil, err
+	}
+	allErrs = append(allErrs, validationErrs...)
+	return allErrs, nil
 }
 
-func (w *TrainJobWebhook) validateCreate(trainjob *TrainJob) field.ErrorList {
+func (w *TrainJobWebhook) validateCreate(ctx context.Context, trainjob *TrainJob) (field.ErrorList, error) {
 	var allErrs field.ErrorList
 	allErrs = append(allErrs, jobframework.ValidateJobOnCreate(trainjob)...)
-	return allErrs
+	if features.Enabled(features.TopologyAwareScheduling) {
+		validationErrs, err := w.validateTopologyRequest(ctx, trainjob)
+		if err != nil {
+			return nil, err
+		}
+		allErrs = append(allErrs, validationErrs...)
+	}
+	return allErrs, nil
+}
+
+func (w *TrainJobWebhook) validateTopologyRequest(ctx context.Context, trainJob *TrainJob) (field.ErrorList, error) {
+	var allErrs field.ErrorList
+
+	podSets, podSetsErr := podSets(ctx, trainJob)
+	for _, p := range podSets {
+		jobPath := field.NewPath("job").Key(string(p.Name))
+		allErrs = append(allErrs, jobframework.ValidateTASPodSetRequest(jobPath, &p.Template.ObjectMeta)...)
+		allErrs = append(allErrs, jobframework.ValidateSliceSizeAnnotationUpperBound(jobPath, &p.Template.ObjectMeta, &p)...)
+	}
+
+	if len(allErrs) > 0 {
+		for _, err := range allErrs {
+			err.Detail += `. Adjust either the "TrainJob.spec.podTemplateOverrides" or the "TrainingRuntime.Template" annotations for the corresponding Job`
+		}
+		return allErrs, nil
+	}
+
+	return nil, podSetsErr
 }
 
 // ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type
diff --git a/pkg/util/cert/cert.go b/pkg/util/cert/cert.go
index 308c72a20..7fe7e236e 100644
--- a/pkg/util/cert/cert.go
+++ b/pkg/util/cert/cert.go
@@ -36,6 +36,7 @@ const (
 
 // +kubebuilder:rbac:groups="admissionregistration.k8s.io",resources=mutatingwebhookconfigurations,verbs=get;list;watch;update
 // +kubebuilder:rbac:groups="admissionregistration.k8s.io",resources=validatingwebhookconfigurations,verbs=get;list;watch;update
+// +kubebuilder:rbac:groups="apiextensions.k8s.io",resources=customresourcedefinitions,verbs=get;list;watch;update
 
 // ManageCerts creates all certs for webhooks. This function is called from main.go.
 func ManageCerts(mgr ctrl.Manager, cfg config.Configuration, setupFinished chan struct{}) error {
@@ -63,6 +64,15 @@ func ManageCerts(mgr ctrl.Manager, cfg config.Configuration, setupFinished chan
 		}, {
 			Type: cert.Mutating,
 			Name: mutatingWebhookName,
+		}, {
+			Type: cert.CRDConversion,
+			Name: "localqueues.kueue.x-k8s.io",
+		}, {
+			Type: cert.CRDConversion,
+			Name: "clusterqueues.kueue.x-k8s.io",
+		}, {
+			Type: cert.CRDConversion,
+			Name: "workloads.kueue.x-k8s.io",
 		}},
 		// When kueue is running in the leader election mode,
 		// we expect webhook server will run in primary and secondary instance
diff --git a/pkg/webhooks/webhooks.go b/pkg/webhooks/webhooks.go
index cb7c832bb..7c6616345 100644
--- a/pkg/webhooks/webhooks.go
+++ b/pkg/webhooks/webhooks.go
@@ -18,6 +18,8 @@ package webhooks
 
 import (
 	ctrl "sigs.k8s.io/controller-runtime"
+
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 )
 
 // Setup sets up the webhooks for core controllers. It returns the name of the
@@ -39,5 +41,9 @@ func Setup(mgr ctrl.Manager) (string, error) {
 		return "Cohort", err
 	}
 
+	if err := ctrl.NewWebhookManagedBy(mgr).For(&kueue.LocalQueue{}).Complete(); err != nil {
+		return "LocalQueue", err
+	}
+
 	return "", nil
 }
diff --git a/site/content/en/docs/reference/kueue.v1beta1.md b/site/content/en/docs/reference/kueue.v1beta1.md
index 0fff02f80..c6e40fb29 100644
--- a/site/content/en/docs/reference/kueue.v1beta1.md
+++ b/site/content/en/docs/reference/kueue.v1beta1.md
@@ -1592,6 +1592,8 @@ which the kueue controller manager is running. The config should be stored in th
 - [LocalQueueStatus](#kueue-x-k8s-io-v1beta1-LocalQueueStatus)
 
 
+<p>Deprecated: LocalQueueFlavorStatus is deprecated and marked for removal in v1beta2.</p>
+
 
 <table class="table">
 <thead><tr><th width="30%">Field</th><th>Description</th></tr></thead>
@@ -1833,7 +1835,8 @@ workloads assigned to this LocalQueue.</p>
 <a href="#kueue-x-k8s-io-v1beta1-LocalQueueFlavorStatus"><code>[]LocalQueueFlavorStatus</code></a>
 </td>
 <td>
-   <p>flavors lists all currently available ResourceFlavors in specified ClusterQueue.</p>
+   <p>flavors lists all currently available ResourceFlavors in specified ClusterQueue.
+Deprecated: Flavors is deprecated and marked for removal in v1beta2.</p>
 </td>
 </tr>
 <tr><td><code>fairSharing</code><br/>
diff --git a/site/content/zh-CN/docs/reference/kueue.v1beta1.md b/site/content/zh-CN/docs/reference/kueue.v1beta1.md
index 9082b376b..852b67978 100644
--- a/site/content/zh-CN/docs/reference/kueue.v1beta1.md
+++ b/site/content/zh-CN/docs/reference/kueue.v1beta1.md
@@ -1519,6 +1519,7 @@ which the kueue controller manager is running. The config should be stored in th
 **Appears in:**
 
 - [LocalQueueStatus](#kueue-x-k8s-io-v1beta1-LocalQueueStatus)
+<p>Deprecated: LocalQueueFlavorStatus is deprecated and marked for removal in v1beta2.</p>
 
 
 
@@ -1763,6 +1764,7 @@ workloads assigned to this LocalQueue.</p>
 </td>
 <td>
    <p>flavors lists all currently available ResourceFlavors in specified ClusterQueue.</p>
+   <p>Deprecated: LocalQueueFlavorStatus is deprecated and marked for removal in v1beta2.</p>
 </td>
 </tr>
 <tr><td><code>fairSharing</code><br/>
diff --git a/site/hugo.toml b/site/hugo.toml
index 341b6b39b..b79c676f2 100644
--- a/site/hugo.toml
+++ b/site/hugo.toml
@@ -99,10 +99,10 @@ ignoreFiles = []
   # The major.minor version tag for the version of the docs represented in this
   # branch of the repository. Used in the "version-banner" partial to display a
   # version number for this doc set.
-  version = "v0.14.1"
+  version = "v0.14.2"
 
   # Version of Kueue without the leading "v", as used for Helm charts.
-  chart_version = "0.14.1"
+  chart_version = "0.14.2"
 
   # Flag used in the "version-banner" partial to decide whether to display a
   # banner on every page indicating that this is an archived version of the docs.
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/trainingruntime_types.go b/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/trainingruntime_types.go
index 6c4478b4c..221e70d8c 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/trainingruntime_types.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/trainingruntime_types.go
@@ -21,6 +21,7 @@ import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/util/intstr"
 	jobsetv1alpha2 "sigs.k8s.io/jobset/api/jobset/v1alpha2"
+	volcanov1beta1 "volcano.sh/apis/pkg/apis/scheduling/v1beta1"
 )
 
 const (
@@ -44,11 +45,13 @@ const (
 type ClusterTrainingRuntime struct {
 	metav1.TypeMeta `json:",inline"`
 
-	// Standard object's metadata.
+	// metadata of the ClusterTrainingRuntime.
+	// +optional
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 
-	// Specification of the desired ClusterTrainingRuntime.
-	Spec TrainingRuntimeSpec `json:"spec,omitempty"`
+	// spec of the ClusterTrainingRuntime.
+	// +optional
+	Spec TrainingRuntimeSpec `json:"spec,omitzero"`
 }
 
 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
@@ -78,11 +81,13 @@ type ClusterTrainingRuntimeList struct {
 type TrainingRuntime struct {
 	metav1.TypeMeta `json:",inline"`
 
-	// Standard object's metadata.
+	// metadata of the TrainingRuntime.
+	// +optional
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 
-	// Specification of the desired TrainingRuntime.
-	Spec TrainingRuntimeSpec `json:"spec,omitempty"`
+	// spec of the TrainingRuntime.
+	// +optional
+	Spec TrainingRuntimeSpec `json:"spec,omitempty,omitzero"`
 }
 
 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
@@ -101,24 +106,31 @@ type TrainingRuntimeList struct {
 }
 
 // TrainingRuntimeSpec represents a specification of the desired training runtime.
+// +kubebuilder:validation:MinProperties=1
 type TrainingRuntimeSpec struct {
-	// Configuration for the model training with ML-specific parameters.
+	// mlPolicy provides the ML-specific parameters for the model training.
+	// +optional
 	MLPolicy *MLPolicy `json:"mlPolicy,omitempty"`
 
-	// Configuration for the PodGroup to enable gang-scheduling via supported plugins.
+	// podGroupPolicy defines the configuration for the PodGroup to enable gang-scheduling via supported plugins.
+	// +optional
 	PodGroupPolicy *PodGroupPolicy `json:"podGroupPolicy,omitempty"`
 
-	// JobSet template which will be used by TrainJob.
-	Template JobSetTemplateSpec `json:"template"`
+	// template for the JobSet which will be used by TrainJob.
+	// +optional
+	Template JobSetTemplateSpec `json:"template,omitzero"`
 }
 
 // JobSetTemplateSpec represents a template of the desired JobSet.
+// +kubebuilder:validation:MinProperties=1
 type JobSetTemplateSpec struct {
-	// Metadata for custom JobSet's labels and annotations.
+	// metadata for custom JobSet's labels and annotations.
 	// JobSet name and namespace is equal to the TrainJob's name and namespace.
+	// +optional
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 
-	// Specification of the desired JobSet which will be created from TrainJob.
+	// spec of the desired JobSet which will be created from TrainJob.
+	// +optional
 	Spec jobsetv1alpha2.JobSetSpec `json:"spec,omitempty"`
 }
 
@@ -131,28 +143,40 @@ type PodGroupPolicy struct {
 // PodGroupPolicySource represents supported plugins for gang-scheduling.
 // Only one of its members may be specified.
 type PodGroupPolicySource struct {
-	// Coscheduling plugin from the Kubernetes scheduler-plugins for gang-scheduling.
+	// coscheduling plugin from the Kubernetes scheduler-plugins for gang-scheduling.
+	// +optional
 	Coscheduling *CoschedulingPodGroupPolicySource `json:"coscheduling,omitempty"`
 
-	// TODO (andreyvelich): Add support for Volcano gang-scheduler.
+	// volcano plugin for gang-scheduling.
+	// +optional
+	Volcano *VolcanoPodGroupPolicySource `json:"volcano,omitempty"`
 }
 
 // CoschedulingPodGroupPolicySource represents configuration for coscheduling plugin.
 // The number of min members in the PodGroupSpec is always equal to the number of nodes.
 type CoschedulingPodGroupPolicySource struct {
-	// Time threshold to schedule PodGroup for gang-scheduling.
+	// scheduleTimeoutSeconds is the maximum duration to schedule PodGroup for gang-scheduling.
 	// If the scheduling timeout is equal to 0, the default value is used.
 	// Defaults to 60 seconds.
 	// +kubebuilder:default=60
+	// +optional
 	ScheduleTimeoutSeconds *int32 `json:"scheduleTimeoutSeconds,omitempty"`
 }
 
-// MLPolicy represents configuration for the model trining with ML-specific parameters.
+// VolcanoPodGroupPolicySource represents configuration for the Volcano gang-scheduler.
+type VolcanoPodGroupPolicySource struct {
+	// networkTopology defines the NetworkTopology config, this field works in conjunction with network topology feature and hyperNode CRD.
+	// +optional
+	NetworkTopology *volcanov1beta1.NetworkTopologySpec `json:"networkTopology,omitempty"`
+}
+
+// MLPolicy represents configuration for the model training with ML-specific parameters.
 // +kubebuilder:validation:XValidation:rule="!(has(self.numNodes) && (has(self.torch) && has(self.torch.elasticPolicy)))", message="numNodes should not be set if torch.elasticPolicy is configured"
 // +kubebuilder:validation:XValidation:rule="!(has(self.torch) && has(self.mpi))", message="Only one of the policy can be configured"
 type MLPolicy struct {
-	// Number of training nodes.
+	// numNodes is the number of training nodes.
 	// Defaults to 1.
+	// +optional
 	NumNodes *int32 `json:"numNodes,omitempty"`
 
 	// Configuration for the runtime-specific parameters, such as Torch or MPI.
@@ -163,24 +187,28 @@ type MLPolicy struct {
 // MLPolicySource represents the runtime-specific configuration for various technologies.
 // One of the following specs can be set.
 type MLPolicySource struct {
-	// Configuration for the PyTorch runtime.
+	// torch defines the configuration for the PyTorch runtime.
+	// +optional
 	Torch *TorchMLPolicySource `json:"torch,omitempty"`
 
-	// Configuration for the MPI Runtime.
+	// mpi defines the configuration for the MPI Runtime.
+	// +optional
 	MPI *MPIMLPolicySource `json:"mpi,omitempty"`
 }
 
 // TorchMLPolicySource represents a PyTorch runtime configuration.
 type TorchMLPolicySource struct {
-	// Number of processes per node.
+	// numProcPerNode is the number of processes per node.
 	// This value is inserted into the `--nproc-per-node` argument of the `torchrun` CLI.
 	// Supported values: `auto`, `cpu`, `gpu`, or int value.
 	// Defaults to `auto`.
 	// +kubebuilder:default="auto"
 	// +kubebuilder:validation:XValidation:rule="self > 0 || self in ['auto', 'cpu', 'gpu']", message="NumProcPerNode must be equal to auto, cpu, gpu, or int value"
+	// +optional
 	NumProcPerNode *intstr.IntOrString `json:"numProcPerNode,omitempty"`
 
-	// Elastic policy for the PyTorch training.
+	// elasticPolicy defines the Elastic policy for the PyTorch training.
+	// +optional
 	ElasticPolicy *TorchElasticPolicy `json:"elasticPolicy,omitempty"`
 }
 
@@ -189,46 +217,54 @@ type TorchMLPolicySource struct {
 // is used to configure the `torchrun` CLI argument: `--nnodes=minNodes:maxNodes`.
 // Only `c10d` backend is supported for the Rendezvous communication.
 type TorchElasticPolicy struct {
-	// How many times the training job can be restarted.
+	// maxRestarts defines how many times the training job can be restarted.
 	// This value is inserted into the `--max-restarts` argument of the `torchrun` CLI and
 	// the `.spec.failurePolicy.maxRestarts` parameter of the training Job.
+	// +optional
 	MaxRestarts *int32 `json:"maxRestarts,omitempty"`
 
-	// Lower limit for the number of nodes to which training job can scale down.
+	// minNodes is the lower limit for the number of nodes to which training job can scale down.
+	// +optional
 	MinNodes *int32 `json:"minNodes,omitempty"`
 
-	// Upper limit for the number of nodes to which training job can scale up.
+	// maxNodes is the upper limit for the number of nodes to which training job can scale up.
+	// +optional
 	MaxNodes *int32 `json:"maxNodes,omitempty"`
 
-	// Specification which are used to calculate the desired number of nodes. See the individual
+	// metrics which are used to calculate the desired number of nodes. See the individual
 	// metric source types for more information about how each type of metric must respond.
 	// The HPA will be created to perform auto-scaling.
 	// +listType=atomic
+	// +optional
 	Metrics []autoscalingv2.MetricSpec `json:"metrics,omitempty"`
 }
 
 // MPIMLPolicySource represents a MPI runtime configuration.
 type MPIMLPolicySource struct {
-	// Number of processes per node.
+	// numProcPerNode is the number of processes per node.
 	// This value is equal to the number of slots for each node in the hostfile.
 	// Defaults to 1.
 	// +kubebuilder:default=1
+	// +optional
 	NumProcPerNode *int32 `json:"numProcPerNode,omitempty"`
 
-	// Implementation name for the MPI to create the appropriate hostfile.
+	// mpiImplementation is the name of the MPI implementation to create the appropriate hostfile.
 	// Defaults to OpenMPI.
 	// +kubebuilder:default=OpenMPI
-	// +kubebuilder:validation:Enum=OpenMPI
+	// +kubebuilder:validation:Enum=OpenMPI;""
+	// +optional
 	MPIImplementation *MPIImplementation `json:"mpiImplementation,omitempty"`
 
-	// Directory where SSH keys are mounted.
+	// sshAuthMountPath is the directory where SSH keys are mounted.
 	// Defaults to /root/.ssh.
 	// +kubebuilder:default=/root/.ssh
+	// +optional
 	SSHAuthMountPath *string `json:"sshAuthMountPath,omitempty"`
 
-	// Whether to run training process on the launcher Job.
+	// runLauncherAsNode defines whether to run training process on the launcher Job.
 	// Defaults to false.
 	// +kubebuilder:default=false
+	// +optional
 	RunLauncherAsNode *bool `json:"runLauncherAsNode,omitempty"`
 }
 
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/trainjob_types.go b/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/trainjob_types.go
index 6d0f9e122..580382ee3 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/trainjob_types.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/trainjob_types.go
@@ -34,19 +34,24 @@ const (
 // +kubebuilder:storageversion
 // +kubebuilder:printcolumn:name="State",type=string,JSONPath=`.status.conditions[-1:].type`
 // +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`
+// +kubebuilder:validation:XValidation:rule="self.metadata.name.matches('^[a-z]([-a-z0-9]*[a-z0-9])?$')", message="metadata.name must match RFC 1035 DNS label format"
+// +kubebuilder:validation:XValidation:rule="size(self.metadata.name) <= 63", message="metadata.name must be no more than 63 characters"
 
 // TrainJob represents configuration of a training job.
 type TrainJob struct {
 	metav1.TypeMeta `json:",inline"`
 
-	// Standard object's metadata.
+	// metadata of the TrainJob.
+	// +optional
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 
-	// Specification of the desired TrainJob.
-	Spec TrainJobSpec `json:"spec,omitempty"`
+	// spec of the TrainJob.
+	// +optional
+	Spec TrainJobSpec `json:"spec,omitzero"`
 
-	// Current status of TrainJob.
-	Status TrainJobStatus `json:"status,omitempty"`
+	// status of TrainJob.
+	// +optional
+	Status TrainJobStatus `json:"status,omitzero"`
 }
 
 const (
@@ -91,35 +96,43 @@ type TrainJobList struct {
 
 // TrainJobSpec represents specification of the desired TrainJob.
 type TrainJobSpec struct {
-	// Reference to the training runtime.
+	// runtimeRef is the reference to the training runtime.
 	// The field is immutable.
 	// +kubebuilder:validation:XValidation:rule="self == oldSelf", message="runtimeRef is immutable"
-	RuntimeRef RuntimeRef `json:"runtimeRef"`
+	// +required
+	RuntimeRef RuntimeRef `json:"runtimeRef,omitzero"`
 
-	// Configuration of the initializer.
+	// initializer defines the configuration of the initializer.
+	// +optional
 	Initializer *Initializer `json:"initializer,omitempty"`
 
-	// Configuration of the trainer.
+	// trainer defines the configuration of the trainer.
+	// +optional
 	Trainer *Trainer `json:"trainer,omitempty"`
 
-	// Labels to apply for the derivative JobSet and Jobs.
+	// labels to apply for the derivative JobSet and Jobs.
 	// They will be merged with the TrainingRuntime values.
+	// +optional
 	Labels map[string]string `json:"labels,omitempty"`
 
-	// Annotations to apply for the derivative JobSet and Jobs.
+	// annotations to apply for the derivative JobSet and Jobs.
 	// They will be merged with the TrainingRuntime values.
+	// +optional
 	Annotations map[string]string `json:"annotations,omitempty"`
 
-	// Custom overrides for the training runtime.
+	// podTemplateOverrides define the PodTemplateOverrides for the training runtime.
+	// When multiple overrides apply to the same targetJob, later entries in the slice override earlier field values.
 	// +listType=atomic
-	PodSpecOverrides []PodSpecOverride `json:"podSpecOverrides,omitempty"`
+	// +optional
+	PodTemplateOverrides []PodTemplateOverride `json:"podTemplateOverrides,omitempty"`
 
-	// Whether the controller should suspend the running TrainJob.
+	// suspend defines whether to suspend the running TrainJob.
 	// Defaults to false.
 	// +kubebuilder:default=false
+	// +optional
 	Suspend *bool `json:"suspend,omitempty"`
 
-	// ManagedBy is used to indicate the controller or entity that manages a TrainJob.
+	// managedBy is used to indicate the controller or entity that manages a TrainJob.
 	// The value must be either an empty, `trainer.kubeflow.org/trainjob-controller` or
 	// `kueue.x-k8s.io/multikueue`. The built-in TrainJob controller reconciles TrainJob which
 	// don't have this field at all or the field value is the reserved string
@@ -129,34 +142,41 @@ type TrainJobSpec struct {
 	// +kubebuilder:default="trainer.kubeflow.org/trainjob-controller"
 	// +kubebuilder:validation:XValidation:rule="self in ['trainer.kubeflow.org/trainjob-controller', 'kueue.x-k8s.io/multikueue']", message="ManagedBy must be trainer.kubeflow.org/trainjob-controller or kueue.x-k8s.io/multikueue if set"
 	// +kubebuilder:validation:XValidation:rule="self == oldSelf", message="ManagedBy value is immutable"
+	// +optional
 	ManagedBy *string `json:"managedBy,omitempty"`
 }
 
 // RuntimeRef represents the reference to the existing training runtime.
 type RuntimeRef struct {
-	// Name of the runtime being referenced.
+	// name of the runtime being referenced.
 	// When namespaced-scoped TrainingRuntime is used, the TrainJob must have
 	// the same namespace as the deployed runtime.
-	Name string `json:"name"`
+	// +kubebuilder:validation:MinLength=1
+	// +required
+	Name string `json:"name,omitempty"`
 
-	// APIGroup of the runtime being referenced.
+	// apiGroup of the runtime being referenced.
 	// Defaults to `trainer.kubeflow.org`.
 	// +kubebuilder:default="trainer.kubeflow.org"
+	// +optional
 	APIGroup *string `json:"apiGroup,omitempty"`
 
-	// Kind of the runtime being referenced.
+	// kind of the runtime being referenced.
 	// Defaults to ClusterTrainingRuntime.
 	// +kubebuilder:default="ClusterTrainingRuntime"
+	// +optional
 	Kind *string `json:"kind,omitempty"`
 }
 
 // Initializer represents the desired configuration for the dataset and model initialization.
 // It is used to initialize the assets (dataset and pre-trained model) and pre-process data.
 type Initializer struct {
-	// Configuration of the dataset initialization and pre-processing.
+	// dataset defines the configuration for the dataset initialization and pre-processing.
+	// +optional
 	Dataset *DatasetInitializer `json:"dataset,omitempty"`
 
-	// Configuration of the pre-trained model initialization
+	// model defines the configuration for the pre-trained model initialization
+	// +optional
 	Model *ModelInitializer `json:"model,omitempty"`
 }
 
@@ -164,35 +184,41 @@ type Initializer struct {
 // The DatasetInitializer spec will override the runtime Job template
 // which contains this label: `trainer.kubeflow.org/trainjob-ancestor-step: dataset-initializer`
 type DatasetInitializer struct {
-	// Storage uri for the dataset provider.
+	// storageUri is the URI for the dataset provider.
+	// +optional
 	StorageUri *string `json:"storageUri,omitempty"`
 
-	// List of environment variables to set in the dataset initializer container.
+	// env is the list of environment variables to set in the dataset initializer container.
 	// These values will be merged with the TrainingRuntime's dataset initializer environments.
 	// +listType=map
 	// +listMapKey=name
+	// +optional
 	Env []corev1.EnvVar `json:"env,omitempty"`
 
-	// Reference to the secret with credentials to download dataset.
+	// secretRef is the reference to the secret with credentials to download dataset.
 	// Secret must be created in the TrainJob's namespace.
+	// +optional
 	SecretRef *corev1.LocalObjectReference `json:"secretRef,omitempty"`
 }
 
-// DatasetInitializer represents the desired configuration to initialize pre-trained model.
-// The DatasetInitializer spec will override the runtime Job template
+// ModelInitializer represents the desired configuration to initialize pre-trained model.
+// The ModelInitializer spec will override the runtime Job template
 // which contains this label: `trainer.kubeflow.org/trainjob-ancestor-step: dataset-initializer`
 type ModelInitializer struct {
-	// Storage uri for the model provider.
+	// storageUri is the URI for the model provider.
+	// +optional
 	StorageUri *string `json:"storageUri,omitempty"`
 
-	// List of environment variables to set in the model initializer container.
+	// env is the list of environment variables to set in the model initializer container.
 	// These values will be merged with the TrainingRuntime's model initializer environments.
 	// +listType=map
 	// +listMapKey=name
+	// +optional
 	Env []corev1.EnvVar `json:"env,omitempty"`
 
-	// Reference to the secret with credentials to download model.
+	// secretRef is the reference to the secret with credentials to download model.
 	// Secret must be created in the TrainJob's namespace.
+	// +optional
 	SecretRef *corev1.LocalObjectReference `json:"secretRef,omitempty"`
 }
 
@@ -200,135 +226,191 @@ type ModelInitializer struct {
 // The Trainer spec will override the runtime template
 // which contains this label: `trainer.kubeflow.org/trainjob-ancestor-step: trainer`
 type Trainer struct {
-	// Docker image for the training container.
+	// image is the container image for the training container.
+	// +optional
 	Image *string `json:"image,omitempty"`
 
-	// Entrypoint commands for the training container.
+	// command for the entrypoint of the training container.
 	// +listType=atomic
+	// +optional
 	Command []string `json:"command,omitempty"`
 
-	// Arguments to the entrypoint for the training container.
+	// args for the entrypoint for the training container.
 	// +listType=atomic
+	// +optional
 	Args []string `json:"args,omitempty"`
 
-	// List of environment variables to set in the training container.
+	// env is the list of environment variables to set in the training container.
 	// These values will be merged with the TrainingRuntime's trainer environments.
 	// +listType=map
 	// +listMapKey=name
+	// +optional
 	Env []corev1.EnvVar `json:"env,omitempty"`
 
-	// Number of training nodes.
+	// numNodes is the number of training nodes.
 	// TODO (andreyvelich): Do we want to support dynamic num of nodes in TrainJob for PyTorch elastic: `--nnodes=1:4` ?
+	// +optional
 	NumNodes *int32 `json:"numNodes,omitempty"`
 
-	// Compute resources for each training node.
+	// resourcesPerNode defines the compute resources for each training node.
+	// +optional
 	ResourcesPerNode *corev1.ResourceRequirements `json:"resourcesPerNode,omitempty"`
 
-	// Number of processes/workers/slots on every training node.
+	// numProcPerNode is the number of processes/workers/slots on every training node.
 	// For the Torch runtime: `auto`, `cpu`, `gpu`, or int value can be set.
 	// For the MPI runtime only int value can be set.
+	// +optional
 	NumProcPerNode *intstr.IntOrString `json:"numProcPerNode,omitempty"`
 }
 
-// PodSpecOverride represents the custom overrides that will be applied for the TrainJob's resources.
-type PodSpecOverride struct {
-	// TrainJobs is the training job replicas in the training runtime template to apply the overrides.
+// PodTemplateOverride represents a custom PodTemplateSpec override that will be applied to the TrainJob's training runtime.
+type PodTemplateOverride struct {
+	// targetJobs is the list of replicated jobs in the training runtime template to apply the overrides.
 	// +listType=atomic
-	TargetJobs []PodSpecOverrideTargetJob `json:"targetJobs"`
+	// +required
+	TargetJobs []PodTemplateOverrideTargetJob `json:"targetJobs,omitempty"`
+
+	// metadata overrides the Pod template metadata.
+	// These values will be merged with the TrainingRuntime's Pod template metadata.
+	// +optional
+	Metadata *metav1.ObjectMeta `json:"metadata,omitempty"`
+
+	// spec overrides the Pod template spec.
+	// These values will be merged with the TrainingRuntime's Pod template spec.
+	// +optional
+	Spec *PodTemplateSpecOverride `json:"spec,omitempty"`
+}
 
-	// Override for the service account.
+type PodTemplateOverrideTargetJob struct {
+	// name is the target training job name for which the PodTemplateSpec is overridden.
+	// +kubebuilder:validation:MinLength=1
+	// +required
+	Name string `json:"name,omitempty"`
+}
+
+// PodTemplateSpecOverride represents the spec overrides for Pod template.
+type PodTemplateSpecOverride struct {
+	// serviceAccountName overrides the service account.
+	// +optional
 	ServiceAccountName *string `json:"serviceAccountName,omitempty"`
 
-	// Override for the node selector to place Pod on the specific node.
+	// nodeSelector overrides the node selector to place Pod on the specific node.
+	// +optional
 	NodeSelector map[string]string `json:"nodeSelector,omitempty"`
 
-	// Override for the Pod's tolerations.
+	// affinity overrides for the Pod's affinity.
+	// +optional
+	Affinity *corev1.Affinity `json:"affinity,omitempty"`
+
+	// tolerations overrides the Pod's tolerations.
 	// +listType=atomic
+	// +optional
 	Tolerations []corev1.Toleration `json:"tolerations,omitempty"`
 
-	// Overrides for the Pod volume configurations.
+	// volumes overrides the Pod's volumes.
 	// +listType=map
 	// +listMapKey=name
+	// +optional
 	Volumes []corev1.Volume `json:"volumes,omitempty"`
 
-	// Overrides for the init container in the target job templates.
+	// initContainers overrides the init container in the target job templates.
 	// +listType=map
 	// +listMapKey=name
+	// +optional
 	InitContainers []ContainerOverride `json:"initContainers,omitempty"`
 
-	// Overrides for the containers in the target job templates.
+	// containers overrides for the containers in the target job templates.
 	// +listType=map
 	// +listMapKey=name
+	// +optional
 	Containers []ContainerOverride `json:"containers,omitempty"`
 
-	// SchedulingGates overrides the scheduling gates of the Pods in the target job templates.
+	// schedulingGates overrides the scheduling gates of the Pods in the target job templates.
 	// More info: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-scheduling-readiness/
 	// +listType=map
 	// +listMapKey=name
+	// +optional
 	SchedulingGates []corev1.PodSchedulingGate `json:"schedulingGates,omitempty"`
-}
 
-type PodSpecOverrideTargetJob struct {
-	// Name is the target training job name for which the PodSpec is overridden.
-	Name string `json:"name"`
+	// imagePullSecrets overrides the image pull secrets for the Pods in the target job templates.
+	// +listType=map
+	// +listMapKey=name
+	// +optional
+	ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"`
 }
 
 // ContainerOverride represents parameters that can be overridden using PodSpecOverrides.
 type ContainerOverride struct {
-	// Name for the container. TrainingRuntime must have this container.
-	Name string `json:"name"`
+	// name for the container. TrainingRuntime must have this container.
+	// +kubebuilder:validation:MinLength=1
+	// +required
+	Name string `json:"name,omitempty"`
 
-	// List of environment variables to set in the container.
+	// env is the list of environment variables to set in the container.
 	// These values will be merged with the TrainingRuntime's environments.
 	// These values can't be set for container with the name: `node`, `dataset-initializer`, or
 	// `model-initializer`. For those containers the envs can only be set via Trainer or Initializer APIs.
 	// +listType=map
 	// +listMapKey=name
+	// +optional
 	Env []corev1.EnvVar `json:"env,omitempty"`
 
-	// Pod volumes to mount into the container's filesystem.
+	// volumeMounts are the volumes to mount into the container's filesystem.
 	// +listType=map
 	// +listMapKey=name
+	// +optional
 	VolumeMounts []corev1.VolumeMount `json:"volumeMounts,omitempty"`
 }
 
 // TrainJobStatus represents the current status of TrainJob.
+// +kubebuilder:validation:MinProperties=1
 type TrainJobStatus struct {
-	// Conditions for the TrainJob.
+	// conditions for the TrainJob.
 	//
 	// +optional
 	// +listType=map
 	// +listMapKey=type
-	// +patchStrategy=merge
-	// +patchMergeKey=type
-	Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"`
+	Conditions []metav1.Condition `json:"conditions,omitempty"`
 
-	// JobsStatus tracks the child Jobs in TrainJob.
+	// jobsStatus tracks the child Jobs in TrainJob.
 	// +listType=map
 	// +listMapKey=name
+	// +optional
 	JobsStatus []JobStatus `json:"jobsStatus,omitempty"`
 }
 
 type JobStatus struct {
-	// Name of the child Job.
-	Name string `json:"name"`
+	// name of the child Job.
+	// +kubebuilder:validation:MinLength=1
+	// +required
+	Name string `json:"name,omitempty"`
 
-	// Ready is the number of child Jobs where the number of ready pods and completed pods
+	// ready is the number of child Jobs where the number of ready pods and completed pods
 	// is greater than or equal to the total expected pod count for the child Job.
-	Ready int32 `json:"ready"`
+	// +kubebuilder:validation:Minimum=0
+	// +required
+	Ready *int32 `json:"ready,omitempty"`
 
-	// Succeeded is the number of successfully completed child Jobs.
-	Succeeded int32 `json:"succeeded"`
+	// succeeded is the number of successfully completed child Jobs.
+	// +kubebuilder:validation:Minimum=0
+	// +required
+	Succeeded *int32 `json:"succeeded,omitempty"`
 
-	// Failed is the number of failed child Jobs.
-	Failed int32 `json:"failed"`
+	// failed is the number of failed child Jobs.
+	// +kubebuilder:validation:Minimum=0
+	// +required
+	Failed *int32 `json:"failed,omitempty"`
 
-	// Active is the number of child Jobs with at least 1 pod in a running or pending state
+	// active is the number of child Jobs with at least 1 pod in a running or pending state
 	// which are not marked for deletion.
-	Active int32 `json:"active"`
-
-	// Suspended is the number of child Jobs which are in a suspended state.
-	Suspended int32 `json:"suspended"`
+	// +kubebuilder:validation:Minimum=0
+	// +required
+	Active *int32 `json:"active,omitempty"`
+
+	// suspended is the number of child Jobs which are in a suspended state.
+	// +kubebuilder:validation:Minimum=0
+	// +required
+	Suspended *int32 `json:"suspended,omitempty"`
 }
 
 func init() {
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/zz_generated.deepcopy.go
index edf81854d..93602c41a 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/zz_generated.deepcopy.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/zz_generated.deepcopy.go
@@ -25,6 +25,7 @@ import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	runtime "k8s.io/apimachinery/pkg/runtime"
 	intstr "k8s.io/apimachinery/pkg/util/intstr"
+	v1beta1 "volcano.sh/apis/pkg/apis/scheduling/v1beta1"
 )
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -218,6 +219,31 @@ func (in *JobSetTemplateSpec) DeepCopy() *JobSetTemplateSpec {
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *JobStatus) DeepCopyInto(out *JobStatus) {
 	*out = *in
+	if in.Ready != nil {
+		in, out := &in.Ready, &out.Ready
+		*out = new(int32)
+		**out = **in
+	}
+	if in.Succeeded != nil {
+		in, out := &in.Succeeded, &out.Succeeded
+		*out = new(int32)
+		**out = **in
+	}
+	if in.Failed != nil {
+		in, out := &in.Failed, &out.Failed
+		*out = new(int32)
+		**out = **in
+	}
+	if in.Active != nil {
+		in, out := &in.Active, &out.Active
+		*out = new(int32)
+		**out = **in
+	}
+	if in.Suspended != nil {
+		in, out := &in.Suspended, &out.Suspended
+		*out = new(int32)
+		**out = **in
+	}
 	return
 }
 
@@ -373,6 +399,11 @@ func (in *PodGroupPolicySource) DeepCopyInto(out *PodGroupPolicySource) {
 		*out = new(CoschedulingPodGroupPolicySource)
 		(*in).DeepCopyInto(*out)
 	}
+	if in.Volcano != nil {
+		in, out := &in.Volcano, &out.Volcano
+		*out = new(VolcanoPodGroupPolicySource)
+		(*in).DeepCopyInto(*out)
+	}
 	return
 }
 
@@ -387,13 +418,55 @@ func (in *PodGroupPolicySource) DeepCopy() *PodGroupPolicySource {
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *PodSpecOverride) DeepCopyInto(out *PodSpecOverride) {
+func (in *PodTemplateOverride) DeepCopyInto(out *PodTemplateOverride) {
 	*out = *in
 	if in.TargetJobs != nil {
 		in, out := &in.TargetJobs, &out.TargetJobs
-		*out = make([]PodSpecOverrideTargetJob, len(*in))
+		*out = make([]PodTemplateOverrideTargetJob, len(*in))
 		copy(*out, *in)
 	}
+	if in.Metadata != nil {
+		in, out := &in.Metadata, &out.Metadata
+		*out = new(metav1.ObjectMeta)
+		(*in).DeepCopyInto(*out)
+	}
+	if in.Spec != nil {
+		in, out := &in.Spec, &out.Spec
+		*out = new(PodTemplateSpecOverride)
+		(*in).DeepCopyInto(*out)
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodTemplateOverride.
+func (in *PodTemplateOverride) DeepCopy() *PodTemplateOverride {
+	if in == nil {
+		return nil
+	}
+	out := new(PodTemplateOverride)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PodTemplateOverrideTargetJob) DeepCopyInto(out *PodTemplateOverrideTargetJob) {
+	*out = *in
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodTemplateOverrideTargetJob.
+func (in *PodTemplateOverrideTargetJob) DeepCopy() *PodTemplateOverrideTargetJob {
+	if in == nil {
+		return nil
+	}
+	out := new(PodTemplateOverrideTargetJob)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PodTemplateSpecOverride) DeepCopyInto(out *PodTemplateSpecOverride) {
+	*out = *in
 	if in.ServiceAccountName != nil {
 		in, out := &in.ServiceAccountName, &out.ServiceAccountName
 		*out = new(string)
@@ -406,6 +479,11 @@ func (in *PodSpecOverride) DeepCopyInto(out *PodSpecOverride) {
 			(*out)[key] = val
 		}
 	}
+	if in.Affinity != nil {
+		in, out := &in.Affinity, &out.Affinity
+		*out = new(v1.Affinity)
+		(*in).DeepCopyInto(*out)
+	}
 	if in.Tolerations != nil {
 		in, out := &in.Tolerations, &out.Tolerations
 		*out = make([]v1.Toleration, len(*in))
@@ -439,31 +517,20 @@ func (in *PodSpecOverride) DeepCopyInto(out *PodSpecOverride) {
 		*out = make([]v1.PodSchedulingGate, len(*in))
 		copy(*out, *in)
 	}
-	return
-}
-
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSpecOverride.
-func (in *PodSpecOverride) DeepCopy() *PodSpecOverride {
-	if in == nil {
-		return nil
+	if in.ImagePullSecrets != nil {
+		in, out := &in.ImagePullSecrets, &out.ImagePullSecrets
+		*out = make([]v1.LocalObjectReference, len(*in))
+		copy(*out, *in)
 	}
-	out := new(PodSpecOverride)
-	in.DeepCopyInto(out)
-	return out
-}
-
-// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
-func (in *PodSpecOverrideTargetJob) DeepCopyInto(out *PodSpecOverrideTargetJob) {
-	*out = *in
 	return
 }
 
-// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSpecOverrideTargetJob.
-func (in *PodSpecOverrideTargetJob) DeepCopy() *PodSpecOverrideTargetJob {
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodTemplateSpecOverride.
+func (in *PodTemplateSpecOverride) DeepCopy() *PodTemplateSpecOverride {
 	if in == nil {
 		return nil
 	}
-	out := new(PodSpecOverrideTargetJob)
+	out := new(PodTemplateSpecOverride)
 	in.DeepCopyInto(out)
 	return out
 }
@@ -647,9 +714,9 @@ func (in *TrainJobSpec) DeepCopyInto(out *TrainJobSpec) {
 			(*out)[key] = val
 		}
 	}
-	if in.PodSpecOverrides != nil {
-		in, out := &in.PodSpecOverrides, &out.PodSpecOverrides
-		*out = make([]PodSpecOverride, len(*in))
+	if in.PodTemplateOverrides != nil {
+		in, out := &in.PodTemplateOverrides, &out.PodTemplateOverrides
+		*out = make([]PodTemplateOverride, len(*in))
 		for i := range *in {
 			(*in)[i].DeepCopyInto(&(*out)[i])
 		}
@@ -690,7 +757,9 @@ func (in *TrainJobStatus) DeepCopyInto(out *TrainJobStatus) {
 	if in.JobsStatus != nil {
 		in, out := &in.JobsStatus, &out.JobsStatus
 		*out = make([]JobStatus, len(*in))
-		copy(*out, *in)
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
 	}
 	return
 }
@@ -844,3 +913,24 @@ func (in *TrainingRuntimeSpec) DeepCopy() *TrainingRuntimeSpec {
 	in.DeepCopyInto(out)
 	return out
 }
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *VolcanoPodGroupPolicySource) DeepCopyInto(out *VolcanoPodGroupPolicySource) {
+	*out = *in
+	if in.NetworkTopology != nil {
+		in, out := &in.NetworkTopology, &out.NetworkTopology
+		*out = new(v1beta1.NetworkTopologySpec)
+		(*in).DeepCopyInto(*out)
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolcanoPodGroupPolicySource.
+func (in *VolcanoPodGroupPolicySource) DeepCopy() *VolcanoPodGroupPolicySource {
+	if in == nil {
+		return nil
+	}
+	out := new(VolcanoPodGroupPolicySource)
+	in.DeepCopyInto(out)
+	return out
+}
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/zz_generated.defaults.go b/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/zz_generated.defaults.go
index fc71e0087..4482b70d9 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/zz_generated.defaults.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/zz_generated.defaults.go
@@ -93,6 +93,17 @@ func SetObjectDefaults_ClusterTrainingRuntime(in *ClusterTrainingRuntime) {
 					c.Protocol = "TCP"
 				}
 			}
+			for k := range b.Env {
+				c := &b.Env[k]
+				if c.ValueFrom != nil {
+					if c.ValueFrom.FileKeyRef != nil {
+						if c.ValueFrom.FileKeyRef.Optional == nil {
+							var ptrVar1 bool = false
+							c.ValueFrom.FileKeyRef.Optional = &ptrVar1
+						}
+					}
+				}
+			}
 			if b.LivenessProbe != nil {
 				if b.LivenessProbe.ProbeHandler.GRPC != nil {
 					if b.LivenessProbe.ProbeHandler.GRPC.Service == nil {
@@ -126,6 +137,17 @@ func SetObjectDefaults_ClusterTrainingRuntime(in *ClusterTrainingRuntime) {
 					c.Protocol = "TCP"
 				}
 			}
+			for k := range b.Env {
+				c := &b.Env[k]
+				if c.ValueFrom != nil {
+					if c.ValueFrom.FileKeyRef != nil {
+						if c.ValueFrom.FileKeyRef.Optional == nil {
+							var ptrVar1 bool = false
+							c.ValueFrom.FileKeyRef.Optional = &ptrVar1
+						}
+					}
+				}
+			}
 			if b.LivenessProbe != nil {
 				if b.LivenessProbe.ProbeHandler.GRPC != nil {
 					if b.LivenessProbe.ProbeHandler.GRPC.Service == nil {
@@ -159,6 +181,17 @@ func SetObjectDefaults_ClusterTrainingRuntime(in *ClusterTrainingRuntime) {
 					c.Protocol = "TCP"
 				}
 			}
+			for k := range b.EphemeralContainerCommon.Env {
+				c := &b.EphemeralContainerCommon.Env[k]
+				if c.ValueFrom != nil {
+					if c.ValueFrom.FileKeyRef != nil {
+						if c.ValueFrom.FileKeyRef.Optional == nil {
+							var ptrVar1 bool = false
+							c.ValueFrom.FileKeyRef.Optional = &ptrVar1
+						}
+					}
+				}
+			}
 			if b.EphemeralContainerCommon.LivenessProbe != nil {
 				if b.EphemeralContainerCommon.LivenessProbe.ProbeHandler.GRPC != nil {
 					if b.EphemeralContainerCommon.LivenessProbe.ProbeHandler.GRPC.Service == nil {
@@ -195,50 +228,121 @@ func SetObjectDefaults_ClusterTrainingRuntimeList(in *ClusterTrainingRuntimeList
 }
 
 func SetObjectDefaults_TrainJob(in *TrainJob) {
-	for i := range in.Spec.PodSpecOverrides {
-		a := &in.Spec.PodSpecOverrides[i]
-		for j := range a.Volumes {
-			b := &a.Volumes[j]
-			if b.VolumeSource.ISCSI != nil {
-				if b.VolumeSource.ISCSI.ISCSIInterface == "" {
-					b.VolumeSource.ISCSI.ISCSIInterface = "default"
+	if in.Spec.Initializer != nil {
+		if in.Spec.Initializer.Dataset != nil {
+			for i := range in.Spec.Initializer.Dataset.Env {
+				a := &in.Spec.Initializer.Dataset.Env[i]
+				if a.ValueFrom != nil {
+					if a.ValueFrom.FileKeyRef != nil {
+						if a.ValueFrom.FileKeyRef.Optional == nil {
+							var ptrVar1 bool = false
+							a.ValueFrom.FileKeyRef.Optional = &ptrVar1
+						}
+					}
 				}
 			}
-			if b.VolumeSource.RBD != nil {
-				if b.VolumeSource.RBD.RBDPool == "" {
-					b.VolumeSource.RBD.RBDPool = "rbd"
-				}
-				if b.VolumeSource.RBD.RadosUser == "" {
-					b.VolumeSource.RBD.RadosUser = "admin"
+		}
+		if in.Spec.Initializer.Model != nil {
+			for i := range in.Spec.Initializer.Model.Env {
+				a := &in.Spec.Initializer.Model.Env[i]
+				if a.ValueFrom != nil {
+					if a.ValueFrom.FileKeyRef != nil {
+						if a.ValueFrom.FileKeyRef.Optional == nil {
+							var ptrVar1 bool = false
+							a.ValueFrom.FileKeyRef.Optional = &ptrVar1
+						}
+					}
 				}
-				if b.VolumeSource.RBD.Keyring == "" {
-					b.VolumeSource.RBD.Keyring = "/etc/ceph/keyring"
+			}
+		}
+	}
+	if in.Spec.Trainer != nil {
+		for i := range in.Spec.Trainer.Env {
+			a := &in.Spec.Trainer.Env[i]
+			if a.ValueFrom != nil {
+				if a.ValueFrom.FileKeyRef != nil {
+					if a.ValueFrom.FileKeyRef.Optional == nil {
+						var ptrVar1 bool = false
+						a.ValueFrom.FileKeyRef.Optional = &ptrVar1
+					}
 				}
 			}
-			if b.VolumeSource.AzureDisk != nil {
-				if b.VolumeSource.AzureDisk.CachingMode == nil {
-					ptrVar1 := v1.AzureDataDiskCachingMode(v1.AzureDataDiskCachingReadWrite)
-					b.VolumeSource.AzureDisk.CachingMode = &ptrVar1
+		}
+	}
+	for i := range in.Spec.PodTemplateOverrides {
+		a := &in.Spec.PodTemplateOverrides[i]
+		if a.Spec != nil {
+			for j := range a.Spec.Volumes {
+				b := &a.Spec.Volumes[j]
+				if b.VolumeSource.ISCSI != nil {
+					if b.VolumeSource.ISCSI.ISCSIInterface == "" {
+						b.VolumeSource.ISCSI.ISCSIInterface = "default"
+					}
 				}
-				if b.VolumeSource.AzureDisk.FSType == nil {
-					var ptrVar1 string = "ext4"
-					b.VolumeSource.AzureDisk.FSType = &ptrVar1
+				if b.VolumeSource.RBD != nil {
+					if b.VolumeSource.RBD.RBDPool == "" {
+						b.VolumeSource.RBD.RBDPool = "rbd"
+					}
+					if b.VolumeSource.RBD.RadosUser == "" {
+						b.VolumeSource.RBD.RadosUser = "admin"
+					}
+					if b.VolumeSource.RBD.Keyring == "" {
+						b.VolumeSource.RBD.Keyring = "/etc/ceph/keyring"
+					}
 				}
-				if b.VolumeSource.AzureDisk.ReadOnly == nil {
-					var ptrVar1 bool = false
-					b.VolumeSource.AzureDisk.ReadOnly = &ptrVar1
+				if b.VolumeSource.AzureDisk != nil {
+					if b.VolumeSource.AzureDisk.CachingMode == nil {
+						ptrVar1 := v1.AzureDataDiskCachingMode(v1.AzureDataDiskCachingReadWrite)
+						b.VolumeSource.AzureDisk.CachingMode = &ptrVar1
+					}
+					if b.VolumeSource.AzureDisk.FSType == nil {
+						var ptrVar1 string = "ext4"
+						b.VolumeSource.AzureDisk.FSType = &ptrVar1
+					}
+					if b.VolumeSource.AzureDisk.ReadOnly == nil {
+						var ptrVar1 bool = false
+						b.VolumeSource.AzureDisk.ReadOnly = &ptrVar1
+					}
+					if b.VolumeSource.AzureDisk.Kind == nil {
+						ptrVar1 := v1.AzureDataDiskKind(v1.AzureSharedBlobDisk)
+						b.VolumeSource.AzureDisk.Kind = &ptrVar1
+					}
 				}
-				if b.VolumeSource.AzureDisk.Kind == nil {
-					ptrVar1 := v1.AzureDataDiskKind(v1.AzureSharedBlobDisk)
-					b.VolumeSource.AzureDisk.Kind = &ptrVar1
+				if b.VolumeSource.ScaleIO != nil {
+					if b.VolumeSource.ScaleIO.StorageMode == "" {
+						b.VolumeSource.ScaleIO.StorageMode = "ThinProvisioned"
+					}
+					if b.VolumeSource.ScaleIO.FSType == "" {
+						b.VolumeSource.ScaleIO.FSType = "xfs"
+					}
 				}
 			}
-			if b.VolumeSource.ScaleIO != nil {
-				if b.VolumeSource.ScaleIO.StorageMode == "" {
-					b.VolumeSource.ScaleIO.StorageMode = "ThinProvisioned"
+			for j := range a.Spec.InitContainers {
+				b := &a.Spec.InitContainers[j]
+				for k := range b.Env {
+					c := &b.Env[k]
+					if c.ValueFrom != nil {
+						if c.ValueFrom.FileKeyRef != nil {
+							if c.ValueFrom.FileKeyRef.Optional == nil {
+								var ptrVar1 bool = false
+								c.ValueFrom.FileKeyRef.Optional = &ptrVar1
+							}
+						}
+					}
 				}
-				if b.VolumeSource.ScaleIO.FSType == "" {
-					b.VolumeSource.ScaleIO.FSType = "xfs"
+			}
+			for j := range a.Spec.Containers {
+				b := &a.Spec.Containers[j]
+				for k := range b.Env {
+					c := &b.Env[k]
+					if c.ValueFrom != nil {
+						if c.ValueFrom.FileKeyRef != nil {
+							if c.ValueFrom.FileKeyRef.Optional == nil {
+								var ptrVar1 bool = false
+								c.ValueFrom.FileKeyRef.Optional = &ptrVar1
+							}
+						}
+					}
 				}
 			}
 		}
@@ -308,6 +412,17 @@ func SetObjectDefaults_TrainingRuntime(in *TrainingRuntime) {
 					c.Protocol = "TCP"
 				}
 			}
+			for k := range b.Env {
+				c := &b.Env[k]
+				if c.ValueFrom != nil {
+					if c.ValueFrom.FileKeyRef != nil {
+						if c.ValueFrom.FileKeyRef.Optional == nil {
+							var ptrVar1 bool = false
+							c.ValueFrom.FileKeyRef.Optional = &ptrVar1
+						}
+					}
+				}
+			}
 			if b.LivenessProbe != nil {
 				if b.LivenessProbe.ProbeHandler.GRPC != nil {
 					if b.LivenessProbe.ProbeHandler.GRPC.Service == nil {
@@ -341,6 +456,17 @@ func SetObjectDefaults_TrainingRuntime(in *TrainingRuntime) {
 					c.Protocol = "TCP"
 				}
 			}
+			for k := range b.Env {
+				c := &b.Env[k]
+				if c.ValueFrom != nil {
+					if c.ValueFrom.FileKeyRef != nil {
+						if c.ValueFrom.FileKeyRef.Optional == nil {
+							var ptrVar1 bool = false
+							c.ValueFrom.FileKeyRef.Optional = &ptrVar1
+						}
+					}
+				}
+			}
 			if b.LivenessProbe != nil {
 				if b.LivenessProbe.ProbeHandler.GRPC != nil {
 					if b.LivenessProbe.ProbeHandler.GRPC.Service == nil {
@@ -374,6 +500,17 @@ func SetObjectDefaults_TrainingRuntime(in *TrainingRuntime) {
 					c.Protocol = "TCP"
 				}
 			}
+			for k := range b.EphemeralContainerCommon.Env {
+				c := &b.EphemeralContainerCommon.Env[k]
+				if c.ValueFrom != nil {
+					if c.ValueFrom.FileKeyRef != nil {
+						if c.ValueFrom.FileKeyRef.Optional == nil {
+							var ptrVar1 bool = false
+							c.ValueFrom.FileKeyRef.Optional = &ptrVar1
+						}
+					}
+				}
+			}
 			if b.EphemeralContainerCommon.LivenessProbe != nil {
 				if b.EphemeralContainerCommon.LivenessProbe.ProbeHandler.GRPC != nil {
 					if b.EphemeralContainerCommon.LivenessProbe.ProbeHandler.GRPC.Service == nil {
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/zz_generated.openapi.go b/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/zz_generated.openapi.go
index 235b2a823..acafe1b57 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/zz_generated.openapi.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1/zz_generated.openapi.go
@@ -44,8 +44,9 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
 		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.ModelInitializer":                 schema_pkg_apis_trainer_v1alpha1_ModelInitializer(ref),
 		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodGroupPolicy":                   schema_pkg_apis_trainer_v1alpha1_PodGroupPolicy(ref),
 		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodGroupPolicySource":             schema_pkg_apis_trainer_v1alpha1_PodGroupPolicySource(ref),
-		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodSpecOverride":                  schema_pkg_apis_trainer_v1alpha1_PodSpecOverride(ref),
-		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodSpecOverrideTargetJob":         schema_pkg_apis_trainer_v1alpha1_PodSpecOverrideTargetJob(ref),
+		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodTemplateOverride":              schema_pkg_apis_trainer_v1alpha1_PodTemplateOverride(ref),
+		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodTemplateOverrideTargetJob":     schema_pkg_apis_trainer_v1alpha1_PodTemplateOverrideTargetJob(ref),
+		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodTemplateSpecOverride":          schema_pkg_apis_trainer_v1alpha1_PodTemplateSpecOverride(ref),
 		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.RuntimeRef":                       schema_pkg_apis_trainer_v1alpha1_RuntimeRef(ref),
 		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.TorchElasticPolicy":               schema_pkg_apis_trainer_v1alpha1_TorchElasticPolicy(ref),
 		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.TorchMLPolicySource":              schema_pkg_apis_trainer_v1alpha1_TorchMLPolicySource(ref),
@@ -57,6 +58,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
 		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.TrainingRuntime":                  schema_pkg_apis_trainer_v1alpha1_TrainingRuntime(ref),
 		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.TrainingRuntimeList":              schema_pkg_apis_trainer_v1alpha1_TrainingRuntimeList(ref),
 		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.TrainingRuntimeSpec":              schema_pkg_apis_trainer_v1alpha1_TrainingRuntimeSpec(ref),
+		"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.VolcanoPodGroupPolicySource":      schema_pkg_apis_trainer_v1alpha1_VolcanoPodGroupPolicySource(ref),
 		"k8s.io/api/autoscaling/v2.ContainerResourceMetricSource":                                   schema_k8sio_api_autoscaling_v2_ContainerResourceMetricSource(ref),
 		"k8s.io/api/autoscaling/v2.ContainerResourceMetricStatus":                                   schema_k8sio_api_autoscaling_v2_ContainerResourceMetricStatus(ref),
 		"k8s.io/api/autoscaling/v2.CrossVersionObjectReference":                                     schema_k8sio_api_autoscaling_v2_CrossVersionObjectReference(ref),
@@ -127,9 +129,12 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
 		"k8s.io/api/core/v1.ConfigMapProjection":                                                    schema_k8sio_api_core_v1_ConfigMapProjection(ref),
 		"k8s.io/api/core/v1.ConfigMapVolumeSource":                                                  schema_k8sio_api_core_v1_ConfigMapVolumeSource(ref),
 		"k8s.io/api/core/v1.Container":                                                              schema_k8sio_api_core_v1_Container(ref),
+		"k8s.io/api/core/v1.ContainerExtendedResourceRequest":                                       schema_k8sio_api_core_v1_ContainerExtendedResourceRequest(ref),
 		"k8s.io/api/core/v1.ContainerImage":                                                         schema_k8sio_api_core_v1_ContainerImage(ref),
 		"k8s.io/api/core/v1.ContainerPort":                                                          schema_k8sio_api_core_v1_ContainerPort(ref),
 		"k8s.io/api/core/v1.ContainerResizePolicy":                                                  schema_k8sio_api_core_v1_ContainerResizePolicy(ref),
+		"k8s.io/api/core/v1.ContainerRestartRule":                                                   schema_k8sio_api_core_v1_ContainerRestartRule(ref),
+		"k8s.io/api/core/v1.ContainerRestartRuleOnExitCodes":                                        schema_k8sio_api_core_v1_ContainerRestartRuleOnExitCodes(ref),
 		"k8s.io/api/core/v1.ContainerState":                                                         schema_k8sio_api_core_v1_ContainerState(ref),
 		"k8s.io/api/core/v1.ContainerStateRunning":                                                  schema_k8sio_api_core_v1_ContainerStateRunning(ref),
 		"k8s.io/api/core/v1.ContainerStateTerminated":                                               schema_k8sio_api_core_v1_ContainerStateTerminated(ref),
@@ -158,6 +163,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
 		"k8s.io/api/core/v1.EventSource":                                                            schema_k8sio_api_core_v1_EventSource(ref),
 		"k8s.io/api/core/v1.ExecAction":                                                             schema_k8sio_api_core_v1_ExecAction(ref),
 		"k8s.io/api/core/v1.FCVolumeSource":                                                         schema_k8sio_api_core_v1_FCVolumeSource(ref),
+		"k8s.io/api/core/v1.FileKeySelector":                                                        schema_k8sio_api_core_v1_FileKeySelector(ref),
 		"k8s.io/api/core/v1.FlexPersistentVolumeSource":                                             schema_k8sio_api_core_v1_FlexPersistentVolumeSource(ref),
 		"k8s.io/api/core/v1.FlexVolumeSource":                                                       schema_k8sio_api_core_v1_FlexVolumeSource(ref),
 		"k8s.io/api/core/v1.FlockerVolumeSource":                                                    schema_k8sio_api_core_v1_FlockerVolumeSource(ref),
@@ -211,6 +217,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
 		"k8s.io/api/core/v1.NodeSelectorTerm":                                                       schema_k8sio_api_core_v1_NodeSelectorTerm(ref),
 		"k8s.io/api/core/v1.NodeSpec":                                                               schema_k8sio_api_core_v1_NodeSpec(ref),
 		"k8s.io/api/core/v1.NodeStatus":                                                             schema_k8sio_api_core_v1_NodeStatus(ref),
+		"k8s.io/api/core/v1.NodeSwapStatus":                                                         schema_k8sio_api_core_v1_NodeSwapStatus(ref),
 		"k8s.io/api/core/v1.NodeSystemInfo":                                                         schema_k8sio_api_core_v1_NodeSystemInfo(ref),
 		"k8s.io/api/core/v1.ObjectFieldSelector":                                                    schema_k8sio_api_core_v1_ObjectFieldSelector(ref),
 		"k8s.io/api/core/v1.ObjectReference":                                                        schema_k8sio_api_core_v1_ObjectReference(ref),
@@ -232,10 +239,12 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
 		"k8s.io/api/core/v1.PodAffinityTerm":                                                        schema_k8sio_api_core_v1_PodAffinityTerm(ref),
 		"k8s.io/api/core/v1.PodAntiAffinity":                                                        schema_k8sio_api_core_v1_PodAntiAffinity(ref),
 		"k8s.io/api/core/v1.PodAttachOptions":                                                       schema_k8sio_api_core_v1_PodAttachOptions(ref),
+		"k8s.io/api/core/v1.PodCertificateProjection":                                               schema_k8sio_api_core_v1_PodCertificateProjection(ref),
 		"k8s.io/api/core/v1.PodCondition":                                                           schema_k8sio_api_core_v1_PodCondition(ref),
 		"k8s.io/api/core/v1.PodDNSConfig":                                                           schema_k8sio_api_core_v1_PodDNSConfig(ref),
 		"k8s.io/api/core/v1.PodDNSConfigOption":                                                     schema_k8sio_api_core_v1_PodDNSConfigOption(ref),
 		"k8s.io/api/core/v1.PodExecOptions":                                                         schema_k8sio_api_core_v1_PodExecOptions(ref),
+		"k8s.io/api/core/v1.PodExtendedResourceClaimStatus":                                         schema_k8sio_api_core_v1_PodExtendedResourceClaimStatus(ref),
 		"k8s.io/api/core/v1.PodIP":                                                                  schema_k8sio_api_core_v1_PodIP(ref),
 		"k8s.io/api/core/v1.PodList":                                                                schema_k8sio_api_core_v1_PodList(ref),
 		"k8s.io/api/core/v1.PodLogOptions":                                                          schema_k8sio_api_core_v1_PodLogOptions(ref),
@@ -395,6 +404,22 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
 		"sigs.k8s.io/jobset/api/jobset/v1alpha2.ReplicatedJobStatus":                                schema_jobset_api_jobset_v1alpha2_ReplicatedJobStatus(ref),
 		"sigs.k8s.io/jobset/api/jobset/v1alpha2.StartupPolicy":                                      schema_jobset_api_jobset_v1alpha2_StartupPolicy(ref),
 		"sigs.k8s.io/jobset/api/jobset/v1alpha2.SuccessPolicy":                                      schema_jobset_api_jobset_v1alpha2_SuccessPolicy(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.Affinity":                                      schema_pkg_apis_scheduling_v1beta1_Affinity(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.Cluster":                                       schema_pkg_apis_scheduling_v1beta1_Cluster(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.Guarantee":                                     schema_pkg_apis_scheduling_v1beta1_Guarantee(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.NetworkTopologySpec":                           schema_pkg_apis_scheduling_v1beta1_NetworkTopologySpec(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.NodeGroupAffinity":                             schema_pkg_apis_scheduling_v1beta1_NodeGroupAffinity(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.NodeGroupAntiAffinity":                         schema_pkg_apis_scheduling_v1beta1_NodeGroupAntiAffinity(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.PodGroup":                                      schema_pkg_apis_scheduling_v1beta1_PodGroup(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.PodGroupCondition":                             schema_pkg_apis_scheduling_v1beta1_PodGroupCondition(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.PodGroupList":                                  schema_pkg_apis_scheduling_v1beta1_PodGroupList(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.PodGroupSpec":                                  schema_pkg_apis_scheduling_v1beta1_PodGroupSpec(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.PodGroupStatus":                                schema_pkg_apis_scheduling_v1beta1_PodGroupStatus(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.Queue":                                         schema_pkg_apis_scheduling_v1beta1_Queue(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.QueueList":                                     schema_pkg_apis_scheduling_v1beta1_QueueList(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.QueueSpec":                                     schema_pkg_apis_scheduling_v1beta1_QueueSpec(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.QueueStatus":                                   schema_pkg_apis_scheduling_v1beta1_QueueStatus(ref),
+		"volcano.sh/apis/pkg/apis/scheduling/v1beta1.Reservation":                                   schema_pkg_apis_scheduling_v1beta1_Reservation(ref),
 	}
 }
 
@@ -421,14 +446,14 @@ func schema_pkg_apis_trainer_v1alpha1_ClusterTrainingRuntime(ref common.Referenc
 					},
 					"metadata": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Standard object's metadata.",
+							Description: "metadata of the ClusterTrainingRuntime.",
 							Default:     map[string]interface{}{},
 							Ref:         ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
 						},
 					},
 					"spec": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Specification of the desired ClusterTrainingRuntime.",
+							Description: "spec of the ClusterTrainingRuntime.",
 							Default:     map[string]interface{}{},
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.TrainingRuntimeSpec"),
 						},
@@ -501,8 +526,7 @@ func schema_pkg_apis_trainer_v1alpha1_ContainerOverride(ref common.ReferenceCall
 				Properties: map[string]spec.Schema{
 					"name": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Name for the container. TrainingRuntime must have this container.",
-							Default:     "",
+							Description: "name for the container. TrainingRuntime must have this container.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -517,7 +541,7 @@ func schema_pkg_apis_trainer_v1alpha1_ContainerOverride(ref common.ReferenceCall
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "List of environment variables to set in the container. These values will be merged with the TrainingRuntime's environments. These values can't be set for container with the name: `node`, `dataset-initializer`, or `model-initializer`. For those containers the envs can only be set via Trainer or Initializer APIs.",
+							Description: "env is the list of environment variables to set in the container. These values will be merged with the TrainingRuntime's environments. These values can't be set for container with the name: `node`, `dataset-initializer`, or `model-initializer`. For those containers the envs can only be set via Trainer or Initializer APIs.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -539,7 +563,7 @@ func schema_pkg_apis_trainer_v1alpha1_ContainerOverride(ref common.ReferenceCall
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Pod volumes to mount into the container's filesystem.",
+							Description: "volumeMounts are the volumes to mount into the container's filesystem.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -569,7 +593,7 @@ func schema_pkg_apis_trainer_v1alpha1_CoschedulingPodGroupPolicySource(ref commo
 				Properties: map[string]spec.Schema{
 					"scheduleTimeoutSeconds": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Time threshold to schedule PodGroup for gang-scheduling. If the scheduling timeout is equal to 0, the default value is used. Defaults to 60 seconds.",
+							Description: "scheduleTimeoutSeconds is the maximum duration to schedule PodGroup for gang-scheduling. If the scheduling timeout is equal to 0, the default value is used. Defaults to 60 seconds.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
@@ -589,7 +613,7 @@ func schema_pkg_apis_trainer_v1alpha1_DatasetInitializer(ref common.ReferenceCal
 				Properties: map[string]spec.Schema{
 					"storageUri": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Storage uri for the dataset provider.",
+							Description: "storageUri is the URI for the dataset provider.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -604,7 +628,7 @@ func schema_pkg_apis_trainer_v1alpha1_DatasetInitializer(ref common.ReferenceCal
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "List of environment variables to set in the dataset initializer container. These values will be merged with the TrainingRuntime's dataset initializer environments.",
+							Description: "env is the list of environment variables to set in the dataset initializer container. These values will be merged with the TrainingRuntime's dataset initializer environments.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -618,7 +642,7 @@ func schema_pkg_apis_trainer_v1alpha1_DatasetInitializer(ref common.ReferenceCal
 					},
 					"secretRef": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Reference to the secret with credentials to download dataset. Secret must be created in the TrainJob's namespace.",
+							Description: "secretRef is the reference to the secret with credentials to download dataset. Secret must be created in the TrainJob's namespace.",
 							Ref:         ref("k8s.io/api/core/v1.LocalObjectReference"),
 						},
 					},
@@ -639,13 +663,13 @@ func schema_pkg_apis_trainer_v1alpha1_Initializer(ref common.ReferenceCallback)
 				Properties: map[string]spec.Schema{
 					"dataset": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Configuration of the dataset initialization and pre-processing.",
+							Description: "dataset defines the configuration for the dataset initialization and pre-processing.",
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.DatasetInitializer"),
 						},
 					},
 					"model": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Configuration of the pre-trained model initialization",
+							Description: "model defines the configuration for the pre-trained model initialization",
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.ModelInitializer"),
 						},
 					},
@@ -666,14 +690,14 @@ func schema_pkg_apis_trainer_v1alpha1_JobSetTemplateSpec(ref common.ReferenceCal
 				Properties: map[string]spec.Schema{
 					"metadata": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Metadata for custom JobSet's labels and annotations. JobSet name and namespace is equal to the TrainJob's name and namespace.",
+							Description: "metadata for custom JobSet's labels and annotations. JobSet name and namespace is equal to the TrainJob's name and namespace.",
 							Default:     map[string]interface{}{},
 							Ref:         ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
 						},
 					},
 					"spec": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Specification of the desired JobSet which will be created from TrainJob.",
+							Description: "spec of the desired JobSet which will be created from TrainJob.",
 							Default:     map[string]interface{}{},
 							Ref:         ref("sigs.k8s.io/jobset/api/jobset/v1alpha2.JobSetSpec"),
 						},
@@ -694,48 +718,42 @@ func schema_pkg_apis_trainer_v1alpha1_JobStatus(ref common.ReferenceCallback) co
 				Properties: map[string]spec.Schema{
 					"name": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Name of the child Job.",
-							Default:     "",
+							Description: "name of the child Job.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
 					},
 					"ready": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Ready is the number of child Jobs where the number of ready pods and completed pods is greater than or equal to the total expected pod count for the child Job.",
-							Default:     0,
+							Description: "ready is the number of child Jobs where the number of ready pods and completed pods is greater than or equal to the total expected pod count for the child Job.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
 					},
 					"succeeded": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Succeeded is the number of successfully completed child Jobs.",
-							Default:     0,
+							Description: "succeeded is the number of successfully completed child Jobs.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
 					},
 					"failed": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Failed is the number of failed child Jobs.",
-							Default:     0,
+							Description: "failed is the number of failed child Jobs.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
 					},
 					"active": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Active is the number of child Jobs with at least 1 pod in a running or pending state which are not marked for deletion.",
-							Default:     0,
+							Description: "active is the number of child Jobs with at least 1 pod in a running or pending state which are not marked for deletion.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
 					},
 					"suspended": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Suspended is the number of child Jobs which are in a suspended state.",
-							Default:     0,
+							Description: "suspended is the number of child Jobs which are in a suspended state.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
@@ -751,25 +769,25 @@ func schema_pkg_apis_trainer_v1alpha1_MLPolicy(ref common.ReferenceCallback) com
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
 			SchemaProps: spec.SchemaProps{
-				Description: "MLPolicy represents configuration for the model trining with ML-specific parameters.",
+				Description: "MLPolicy represents configuration for the model training with ML-specific parameters.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
 					"numNodes": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Number of training nodes. Defaults to 1.",
+							Description: "numNodes is the number of training nodes. Defaults to 1.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
 					},
 					"torch": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Configuration for the PyTorch runtime.",
+							Description: "torch defines the configuration for the PyTorch runtime.",
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.TorchMLPolicySource"),
 						},
 					},
 					"mpi": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Configuration for the MPI Runtime.",
+							Description: "mpi defines the configuration for the MPI Runtime.",
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.MPIMLPolicySource"),
 						},
 					},
@@ -790,13 +808,13 @@ func schema_pkg_apis_trainer_v1alpha1_MLPolicySource(ref common.ReferenceCallbac
 				Properties: map[string]spec.Schema{
 					"torch": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Configuration for the PyTorch runtime.",
+							Description: "torch defines the configuration for the PyTorch runtime.",
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.TorchMLPolicySource"),
 						},
 					},
 					"mpi": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Configuration for the MPI Runtime.",
+							Description: "mpi defines the configuration for the MPI Runtime.",
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.MPIMLPolicySource"),
 						},
 					},
@@ -817,28 +835,28 @@ func schema_pkg_apis_trainer_v1alpha1_MPIMLPolicySource(ref common.ReferenceCall
 				Properties: map[string]spec.Schema{
 					"numProcPerNode": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Number of processes per node. This value is equal to the number of slots for each node in the hostfile. Defaults to 1.",
+							Description: "numProcPerNode is the number of processes per node. This value is equal to the number of slots for each node in the hostfile. Defaults to 1.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
 					},
 					"mpiImplementation": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Implementation name for the MPI to create the appropriate hostfile. Defaults to OpenMPI.",
+							Description: "mpiImplementation is the name of the MPI implementation to create the appropriate hostfile. Defaults to OpenMPI.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
 					},
 					"sshAuthMountPath": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Directory where SSH keys are mounted. Defaults to /root/.ssh.",
+							Description: "sshAuthMountPath is the directory where SSH keys are mounted. Defaults to /root/.ssh.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
 					},
 					"runLauncherAsNode": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Whether to run training process on the launcher Job. Defaults to false.",
+							Description: "runLauncherAsNode defines whether to run training process on the launcher Job. Defaults to false.",
 							Type:        []string{"boolean"},
 							Format:      "",
 						},
@@ -853,12 +871,12 @@ func schema_pkg_apis_trainer_v1alpha1_ModelInitializer(ref common.ReferenceCallb
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
 			SchemaProps: spec.SchemaProps{
-				Description: "DatasetInitializer represents the desired configuration to initialize pre-trained model. The DatasetInitializer spec will override the runtime Job template which contains this label: `trainer.kubeflow.org/trainjob-ancestor-step: dataset-initializer`",
+				Description: "ModelInitializer represents the desired configuration to initialize pre-trained model. The ModelInitializer spec will override the runtime Job template which contains this label: `trainer.kubeflow.org/trainjob-ancestor-step: dataset-initializer`",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
 					"storageUri": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Storage uri for the model provider.",
+							Description: "storageUri is the URI for the model provider.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -873,7 +891,7 @@ func schema_pkg_apis_trainer_v1alpha1_ModelInitializer(ref common.ReferenceCallb
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "List of environment variables to set in the model initializer container. These values will be merged with the TrainingRuntime's model initializer environments.",
+							Description: "env is the list of environment variables to set in the model initializer container. These values will be merged with the TrainingRuntime's model initializer environments.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -887,7 +905,7 @@ func schema_pkg_apis_trainer_v1alpha1_ModelInitializer(ref common.ReferenceCallb
 					},
 					"secretRef": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Reference to the secret with credentials to download model. Secret must be created in the TrainJob's namespace.",
+							Description: "secretRef is the reference to the secret with credentials to download model. Secret must be created in the TrainJob's namespace.",
 							Ref:         ref("k8s.io/api/core/v1.LocalObjectReference"),
 						},
 					},
@@ -908,15 +926,21 @@ func schema_pkg_apis_trainer_v1alpha1_PodGroupPolicy(ref common.ReferenceCallbac
 				Properties: map[string]spec.Schema{
 					"coscheduling": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Coscheduling plugin from the Kubernetes scheduler-plugins for gang-scheduling.",
+							Description: "coscheduling plugin from the Kubernetes scheduler-plugins for gang-scheduling.",
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.CoschedulingPodGroupPolicySource"),
 						},
 					},
+					"volcano": {
+						SchemaProps: spec.SchemaProps{
+							Description: "volcano plugin for gang-scheduling.",
+							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.VolcanoPodGroupPolicySource"),
+						},
+					},
 				},
 			},
 		},
 		Dependencies: []string{
-			"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.CoschedulingPodGroupPolicySource"},
+			"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.CoschedulingPodGroupPolicySource", "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.VolcanoPodGroupPolicySource"},
 	}
 }
 
@@ -929,23 +953,29 @@ func schema_pkg_apis_trainer_v1alpha1_PodGroupPolicySource(ref common.ReferenceC
 				Properties: map[string]spec.Schema{
 					"coscheduling": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Coscheduling plugin from the Kubernetes scheduler-plugins for gang-scheduling.",
+							Description: "coscheduling plugin from the Kubernetes scheduler-plugins for gang-scheduling.",
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.CoschedulingPodGroupPolicySource"),
 						},
 					},
+					"volcano": {
+						SchemaProps: spec.SchemaProps{
+							Description: "volcano plugin for gang-scheduling.",
+							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.VolcanoPodGroupPolicySource"),
+						},
+					},
 				},
 			},
 		},
 		Dependencies: []string{
-			"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.CoschedulingPodGroupPolicySource"},
+			"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.CoschedulingPodGroupPolicySource", "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.VolcanoPodGroupPolicySource"},
 	}
 }
 
-func schema_pkg_apis_trainer_v1alpha1_PodSpecOverride(ref common.ReferenceCallback) common.OpenAPIDefinition {
+func schema_pkg_apis_trainer_v1alpha1_PodTemplateOverride(ref common.ReferenceCallback) common.OpenAPIDefinition {
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
 			SchemaProps: spec.SchemaProps{
-				Description: "PodSpecOverride represents the custom overrides that will be applied for the TrainJob's resources.",
+				Description: "PodTemplateOverride represents a custom PodTemplateSpec override that will be applied to the TrainJob's training runtime.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
 					"targetJobs": {
@@ -955,28 +985,76 @@ func schema_pkg_apis_trainer_v1alpha1_PodSpecOverride(ref common.ReferenceCallba
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "TrainJobs is the training job replicas in the training runtime template to apply the overrides.",
+							Description: "targetJobs is the list of replicated jobs in the training runtime template to apply the overrides.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
 									SchemaProps: spec.SchemaProps{
 										Default: map[string]interface{}{},
-										Ref:     ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodSpecOverrideTargetJob"),
+										Ref:     ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodTemplateOverrideTargetJob"),
 									},
 								},
 							},
 						},
 					},
+					"metadata": {
+						SchemaProps: spec.SchemaProps{
+							Description: "metadata overrides the Pod template metadata. These values will be merged with the TrainingRuntime's Pod template metadata.",
+							Ref:         ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
+						},
+					},
+					"spec": {
+						SchemaProps: spec.SchemaProps{
+							Description: "spec overrides the Pod template spec. These values will be merged with the TrainingRuntime's Pod template spec.",
+							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodTemplateSpecOverride"),
+						},
+					},
+				},
+				Required: []string{"targetJobs"},
+			},
+		},
+		Dependencies: []string{
+			"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodTemplateOverrideTargetJob", "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodTemplateSpecOverride", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"},
+	}
+}
+
+func schema_pkg_apis_trainer_v1alpha1_PodTemplateOverrideTargetJob(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Type: []string{"object"},
+				Properties: map[string]spec.Schema{
+					"name": {
+						SchemaProps: spec.SchemaProps{
+							Description: "name is the target training job name for which the PodTemplateSpec is overridden.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+				},
+				Required: []string{"name"},
+			},
+		},
+	}
+}
+
+func schema_pkg_apis_trainer_v1alpha1_PodTemplateSpecOverride(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "PodTemplateSpecOverride represents the spec overrides for Pod template.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
 					"serviceAccountName": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Override for the service account.",
+							Description: "serviceAccountName overrides the service account.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
 					},
 					"nodeSelector": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Override for the node selector to place Pod on the specific node.",
+							Description: "nodeSelector overrides the node selector to place Pod on the specific node.",
 							Type:        []string{"object"},
 							AdditionalProperties: &spec.SchemaOrBool{
 								Allows: true,
@@ -990,6 +1068,12 @@ func schema_pkg_apis_trainer_v1alpha1_PodSpecOverride(ref common.ReferenceCallba
 							},
 						},
 					},
+					"affinity": {
+						SchemaProps: spec.SchemaProps{
+							Description: "affinity overrides for the Pod's affinity.",
+							Ref:         ref("k8s.io/api/core/v1.Affinity"),
+						},
+					},
 					"tolerations": {
 						VendorExtensible: spec.VendorExtensible{
 							Extensions: spec.Extensions{
@@ -997,7 +1081,7 @@ func schema_pkg_apis_trainer_v1alpha1_PodSpecOverride(ref common.ReferenceCallba
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Override for the Pod's tolerations.",
+							Description: "tolerations overrides the Pod's tolerations.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -1019,7 +1103,7 @@ func schema_pkg_apis_trainer_v1alpha1_PodSpecOverride(ref common.ReferenceCallba
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Overrides for the Pod volume configurations.",
+							Description: "volumes overrides the Pod's volumes.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -1041,7 +1125,7 @@ func schema_pkg_apis_trainer_v1alpha1_PodSpecOverride(ref common.ReferenceCallba
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Overrides for the init container in the target job templates.",
+							Description: "initContainers overrides the init container in the target job templates.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -1063,7 +1147,7 @@ func schema_pkg_apis_trainer_v1alpha1_PodSpecOverride(ref common.ReferenceCallba
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Overrides for the containers in the target job templates.",
+							Description: "containers overrides for the containers in the target job templates.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -1085,7 +1169,7 @@ func schema_pkg_apis_trainer_v1alpha1_PodSpecOverride(ref common.ReferenceCallba
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "SchedulingGates overrides the scheduling gates of the Pods in the target job templates. More info: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-scheduling-readiness/",
+							Description: "schedulingGates overrides the scheduling gates of the Pods in the target job templates. More info: https://kubernetes.io/docs/concepts/scheduling-eviction/pod-scheduling-readiness/",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -1097,33 +1181,33 @@ func schema_pkg_apis_trainer_v1alpha1_PodSpecOverride(ref common.ReferenceCallba
 							},
 						},
 					},
-				},
-				Required: []string{"targetJobs"},
-			},
-		},
-		Dependencies: []string{
-			"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.ContainerOverride", "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodSpecOverrideTargetJob", "k8s.io/api/core/v1.PodSchedulingGate", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.Volume"},
-	}
-}
-
-func schema_pkg_apis_trainer_v1alpha1_PodSpecOverrideTargetJob(ref common.ReferenceCallback) common.OpenAPIDefinition {
-	return common.OpenAPIDefinition{
-		Schema: spec.Schema{
-			SchemaProps: spec.SchemaProps{
-				Type: []string{"object"},
-				Properties: map[string]spec.Schema{
-					"name": {
+					"imagePullSecrets": {
+						VendorExtensible: spec.VendorExtensible{
+							Extensions: spec.Extensions{
+								"x-kubernetes-list-map-keys": []interface{}{
+									"name",
+								},
+								"x-kubernetes-list-type": "map",
+							},
+						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Name is the target training job name for which the PodSpec is overridden.",
-							Default:     "",
-							Type:        []string{"string"},
-							Format:      "",
+							Description: "imagePullSecrets overrides the image pull secrets for the Pods in the target job templates.",
+							Type:        []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: map[string]interface{}{},
+										Ref:     ref("k8s.io/api/core/v1.LocalObjectReference"),
+									},
+								},
+							},
 						},
 					},
 				},
-				Required: []string{"name"},
 			},
 		},
+		Dependencies: []string{
+			"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.ContainerOverride", "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodSchedulingGate", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.Volume"},
 	}
 }
 
@@ -1136,22 +1220,21 @@ func schema_pkg_apis_trainer_v1alpha1_RuntimeRef(ref common.ReferenceCallback) c
 				Properties: map[string]spec.Schema{
 					"name": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Name of the runtime being referenced. When namespaced-scoped TrainingRuntime is used, the TrainJob must have the same namespace as the deployed runtime.",
-							Default:     "",
+							Description: "name of the runtime being referenced. When namespaced-scoped TrainingRuntime is used, the TrainJob must have the same namespace as the deployed runtime.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
 					},
 					"apiGroup": {
 						SchemaProps: spec.SchemaProps{
-							Description: "APIGroup of the runtime being referenced. Defaults to `trainer.kubeflow.org`.",
+							Description: "apiGroup of the runtime being referenced. Defaults to `trainer.kubeflow.org`.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
 					},
 					"kind": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Kind of the runtime being referenced. Defaults to ClusterTrainingRuntime.",
+							Description: "kind of the runtime being referenced. Defaults to ClusterTrainingRuntime.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -1172,21 +1255,21 @@ func schema_pkg_apis_trainer_v1alpha1_TorchElasticPolicy(ref common.ReferenceCal
 				Properties: map[string]spec.Schema{
 					"maxRestarts": {
 						SchemaProps: spec.SchemaProps{
-							Description: "How many times the training job can be restarted. This value is inserted into the `--max-restarts` argument of the `torchrun` CLI and the `.spec.failurePolicy.maxRestarts` parameter of the training Job.",
+							Description: "maxRestarts defines how many times the training job can be restarted. This value is inserted into the `--max-restarts` argument of the `torchrun` CLI and the `.spec.failurePolicy.maxRestarts` parameter of the training Job.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
 					},
 					"minNodes": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Lower limit for the number of nodes to which training job can scale down.",
+							Description: "minNodes is the lower limit for the number of nodes to which training job can scale down.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
 					},
 					"maxNodes": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Upper limit for the number of nodes to which training job can scale up.",
+							Description: "maxNodes is the upper limit for the number of nodes to which training job can scale up.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
@@ -1198,7 +1281,7 @@ func schema_pkg_apis_trainer_v1alpha1_TorchElasticPolicy(ref common.ReferenceCal
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Specification which are used to calculate the desired number of nodes. See the individual metric source types for more information about how each type of metric must respond. The HPA will be created to perform auto-scaling.",
+							Description: "metrics which are used to calculate the desired number of nodes. See the individual metric source types for more information about how each type of metric must respond. The HPA will be created to perform auto-scaling.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -1227,13 +1310,13 @@ func schema_pkg_apis_trainer_v1alpha1_TorchMLPolicySource(ref common.ReferenceCa
 				Properties: map[string]spec.Schema{
 					"numProcPerNode": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Number of processes per node. This value is inserted into the `--nproc-per-node` argument of the `torchrun` CLI. Supported values: `auto`, `cpu`, `gpu`, or int value. Defaults to `auto`.",
+							Description: "numProcPerNode is the number of processes per node. This value is inserted into the `--nproc-per-node` argument of the `torchrun` CLI. Supported values: `auto`, `cpu`, `gpu`, or int value. Defaults to `auto`.",
 							Ref:         ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"),
 						},
 					},
 					"elasticPolicy": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Elastic policy for the PyTorch training.",
+							Description: "elasticPolicy defines the Elastic policy for the PyTorch training.",
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.TorchElasticPolicy"),
 						},
 					},
@@ -1268,21 +1351,21 @@ func schema_pkg_apis_trainer_v1alpha1_TrainJob(ref common.ReferenceCallback) com
 					},
 					"metadata": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Standard object's metadata.",
+							Description: "metadata of the TrainJob.",
 							Default:     map[string]interface{}{},
 							Ref:         ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
 						},
 					},
 					"spec": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Specification of the desired TrainJob.",
+							Description: "spec of the TrainJob.",
 							Default:     map[string]interface{}{},
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.TrainJobSpec"),
 						},
 					},
 					"status": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Current status of TrainJob.",
+							Description: "status of TrainJob.",
 							Default:     map[string]interface{}{},
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.TrainJobStatus"),
 						},
@@ -1355,26 +1438,26 @@ func schema_pkg_apis_trainer_v1alpha1_TrainJobSpec(ref common.ReferenceCallback)
 				Properties: map[string]spec.Schema{
 					"runtimeRef": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Reference to the training runtime. The field is immutable.",
+							Description: "runtimeRef is the reference to the training runtime. The field is immutable.",
 							Default:     map[string]interface{}{},
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.RuntimeRef"),
 						},
 					},
 					"initializer": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Configuration of the initializer.",
+							Description: "initializer defines the configuration of the initializer.",
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.Initializer"),
 						},
 					},
 					"trainer": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Configuration of the trainer.",
+							Description: "trainer defines the configuration of the trainer.",
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.Trainer"),
 						},
 					},
 					"labels": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Labels to apply for the derivative JobSet and Jobs. They will be merged with the TrainingRuntime values.",
+							Description: "labels to apply for the derivative JobSet and Jobs. They will be merged with the TrainingRuntime values.",
 							Type:        []string{"object"},
 							AdditionalProperties: &spec.SchemaOrBool{
 								Allows: true,
@@ -1390,7 +1473,7 @@ func schema_pkg_apis_trainer_v1alpha1_TrainJobSpec(ref common.ReferenceCallback)
 					},
 					"annotations": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Annotations to apply for the derivative JobSet and Jobs. They will be merged with the TrainingRuntime values.",
+							Description: "annotations to apply for the derivative JobSet and Jobs. They will be merged with the TrainingRuntime values.",
 							Type:        []string{"object"},
 							AdditionalProperties: &spec.SchemaOrBool{
 								Allows: true,
@@ -1404,20 +1487,20 @@ func schema_pkg_apis_trainer_v1alpha1_TrainJobSpec(ref common.ReferenceCallback)
 							},
 						},
 					},
-					"podSpecOverrides": {
+					"podTemplateOverrides": {
 						VendorExtensible: spec.VendorExtensible{
 							Extensions: spec.Extensions{
 								"x-kubernetes-list-type": "atomic",
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Custom overrides for the training runtime.",
+							Description: "podTemplateOverrides define the PodTemplateOverrides for the training runtime. When multiple overrides apply to the same targetJob, later entries in the slice override earlier field values.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
 									SchemaProps: spec.SchemaProps{
 										Default: map[string]interface{}{},
-										Ref:     ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodSpecOverride"),
+										Ref:     ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodTemplateOverride"),
 									},
 								},
 							},
@@ -1425,14 +1508,14 @@ func schema_pkg_apis_trainer_v1alpha1_TrainJobSpec(ref common.ReferenceCallback)
 					},
 					"suspend": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Whether the controller should suspend the running TrainJob. Defaults to false.",
+							Description: "suspend defines whether to suspend the running TrainJob. Defaults to false.",
 							Type:        []string{"boolean"},
 							Format:      "",
 						},
 					},
 					"managedBy": {
 						SchemaProps: spec.SchemaProps{
-							Description: "ManagedBy is used to indicate the controller or entity that manages a TrainJob. The value must be either an empty, `trainer.kubeflow.org/trainjob-controller` or `kueue.x-k8s.io/multikueue`. The built-in TrainJob controller reconciles TrainJob which don't have this field at all or the field value is the reserved string `trainer.kubeflow.org/trainjob-controller`, but delegates reconciling TrainJobs with a 'kueue.x-k8s.io/multikueue' to the Kueue. The field is immutable. Defaults to `trainer.kubeflow.org/trainjob-controller`",
+							Description: "managedBy is used to indicate the controller or entity that manages a TrainJob. The value must be either an empty, `trainer.kubeflow.org/trainjob-controller` or `kueue.x-k8s.io/multikueue`. The built-in TrainJob controller reconciles TrainJob which don't have this field at all or the field value is the reserved string `trainer.kubeflow.org/trainjob-controller`, but delegates reconciling TrainJobs with a 'kueue.x-k8s.io/multikueue' to the Kueue. The field is immutable. Defaults to `trainer.kubeflow.org/trainjob-controller`",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -1442,7 +1525,7 @@ func schema_pkg_apis_trainer_v1alpha1_TrainJobSpec(ref common.ReferenceCallback)
 			},
 		},
 		Dependencies: []string{
-			"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.Initializer", "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodSpecOverride", "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.RuntimeRef", "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.Trainer"},
+			"github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.Initializer", "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodTemplateOverride", "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.RuntimeRef", "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.Trainer"},
 	}
 }
 
@@ -1459,13 +1542,11 @@ func schema_pkg_apis_trainer_v1alpha1_TrainJobStatus(ref common.ReferenceCallbac
 								"x-kubernetes-list-map-keys": []interface{}{
 									"type",
 								},
-								"x-kubernetes-list-type":       "map",
-								"x-kubernetes-patch-merge-key": "type",
-								"x-kubernetes-patch-strategy":  "merge",
+								"x-kubernetes-list-type": "map",
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Conditions for the TrainJob.",
+							Description: "conditions for the TrainJob.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -1487,7 +1568,7 @@ func schema_pkg_apis_trainer_v1alpha1_TrainJobStatus(ref common.ReferenceCallbac
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "JobsStatus tracks the child Jobs in TrainJob.",
+							Description: "jobsStatus tracks the child Jobs in TrainJob.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -1516,7 +1597,7 @@ func schema_pkg_apis_trainer_v1alpha1_Trainer(ref common.ReferenceCallback) comm
 				Properties: map[string]spec.Schema{
 					"image": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Docker image for the training container.",
+							Description: "image is the container image for the training container.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -1528,7 +1609,7 @@ func schema_pkg_apis_trainer_v1alpha1_Trainer(ref common.ReferenceCallback) comm
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Entrypoint commands for the training container.",
+							Description: "command for the entrypoint of the training container.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -1548,7 +1629,7 @@ func schema_pkg_apis_trainer_v1alpha1_Trainer(ref common.ReferenceCallback) comm
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Arguments to the entrypoint for the training container.",
+							Description: "args for the entrypoint for the training container.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -1571,7 +1652,7 @@ func schema_pkg_apis_trainer_v1alpha1_Trainer(ref common.ReferenceCallback) comm
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "List of environment variables to set in the training container. These values will be merged with the TrainingRuntime's trainer environments.",
+							Description: "env is the list of environment variables to set in the training container. These values will be merged with the TrainingRuntime's trainer environments.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -1585,20 +1666,20 @@ func schema_pkg_apis_trainer_v1alpha1_Trainer(ref common.ReferenceCallback) comm
 					},
 					"numNodes": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Number of training nodes.",
+							Description: "numNodes is the number of training nodes.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
 					},
 					"resourcesPerNode": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Compute resources for each training node.",
+							Description: "resourcesPerNode defines the compute resources for each training node.",
 							Ref:         ref("k8s.io/api/core/v1.ResourceRequirements"),
 						},
 					},
 					"numProcPerNode": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Number of processes/workers/slots on every training node. For the Torch runtime: `auto`, `cpu`, `gpu`, or int value can be set. For the MPI runtime only int value can be set.",
+							Description: "numProcPerNode is the number of processes/workers/slots on every training node. For the Torch runtime: `auto`, `cpu`, `gpu`, or int value can be set. For the MPI runtime only int value can be set.",
 							Ref:         ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"),
 						},
 					},
@@ -1633,14 +1714,14 @@ func schema_pkg_apis_trainer_v1alpha1_TrainingRuntime(ref common.ReferenceCallba
 					},
 					"metadata": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Standard object's metadata.",
+							Description: "metadata of the TrainingRuntime.",
 							Default:     map[string]interface{}{},
 							Ref:         ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
 						},
 					},
 					"spec": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Specification of the desired TrainingRuntime.",
+							Description: "spec of the TrainingRuntime.",
 							Default:     map[string]interface{}{},
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.TrainingRuntimeSpec"),
 						},
@@ -1713,25 +1794,24 @@ func schema_pkg_apis_trainer_v1alpha1_TrainingRuntimeSpec(ref common.ReferenceCa
 				Properties: map[string]spec.Schema{
 					"mlPolicy": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Configuration for the model training with ML-specific parameters.",
+							Description: "mlPolicy provides the ML-specific parameters for the model training.",
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.MLPolicy"),
 						},
 					},
 					"podGroupPolicy": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Configuration for the PodGroup to enable gang-scheduling via supported plugins.",
+							Description: "podGroupPolicy defines the configuration for the PodGroup to enable gang-scheduling via supported plugins.",
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.PodGroupPolicy"),
 						},
 					},
 					"template": {
 						SchemaProps: spec.SchemaProps{
-							Description: "JobSet template which will be used by TrainJob.",
+							Description: "template for the JobSet which will be used by TrainJob.",
 							Default:     map[string]interface{}{},
 							Ref:         ref("github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1.JobSetTemplateSpec"),
 						},
 					},
 				},
-				Required: []string{"template"},
 			},
 		},
 		Dependencies: []string{
@@ -1739,6 +1819,27 @@ func schema_pkg_apis_trainer_v1alpha1_TrainingRuntimeSpec(ref common.ReferenceCa
 	}
 }
 
+func schema_pkg_apis_trainer_v1alpha1_VolcanoPodGroupPolicySource(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "VolcanoPodGroupPolicySource represents configuration for the Volcano gang-scheduler.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"networkTopology": {
+						SchemaProps: spec.SchemaProps{
+							Description: "networkTopology defines the NetworkTopology config, this field works in conjunction with network topology feature and hyperNode CRD.",
+							Ref:         ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.NetworkTopologySpec"),
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"volcano.sh/apis/pkg/apis/scheduling/v1beta1.NetworkTopologySpec"},
+	}
+}
+
 func schema_k8sio_api_autoscaling_v2_ContainerResourceMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition {
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
@@ -1956,7 +2057,7 @@ func schema_k8sio_api_autoscaling_v2_HPAScalingRules(ref common.ReferenceCallbac
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
 			SchemaProps: spec.SchemaProps{
-				Description: "HPAScalingRules configures the scaling behavior for one direction. These Rules are applied after calculating DesiredReplicas from metrics for the HPA. They can limit the scaling velocity by specifying scaling policies. They can prevent flapping by specifying the stabilization window, so that the number of replicas is not set instantly, instead, the safest value from the stabilization window is chosen.",
+				Description: "HPAScalingRules configures the scaling behavior for one direction via scaling Policy Rules and a configurable metric tolerance.\n\nScaling Policy Rules are applied after calculating DesiredReplicas from metrics for the HPA. They can limit the scaling velocity by specifying scaling policies. They can prevent flapping by specifying the stabilization window, so that the number of replicas is not set instantly, instead, the safest value from the stabilization window is chosen.\n\nThe tolerance is applied to the metric values and prevents scaling too eagerly for small metric variations. (Note that setting a tolerance requires enabling the alpha HPAConfigurableTolerance feature gate.)",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
 					"stabilizationWindowSeconds": {
@@ -1980,7 +2081,7 @@ func schema_k8sio_api_autoscaling_v2_HPAScalingRules(ref common.ReferenceCallbac
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "policies is a list of potential scaling polices which can be used during scaling. At least one policy must be specified, otherwise the HPAScalingRules will be discarded as invalid",
+							Description: "policies is a list of potential scaling polices which can be used during scaling. If not set, use the default values: - For scale up: allow doubling the number of pods, or an absolute change of 4 pods in a 15s window. - For scale down: allow all pods to be removed in a 15s window.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -1992,11 +2093,17 @@ func schema_k8sio_api_autoscaling_v2_HPAScalingRules(ref common.ReferenceCallbac
 							},
 						},
 					},
+					"tolerance": {
+						SchemaProps: spec.SchemaProps{
+							Description: "tolerance is the tolerance on the ratio between the current and desired metric value under which no updates are made to the desired number of replicas (e.g. 0.01 for 1%). Must be greater than or equal to zero. If not set, the default cluster-wide tolerance is applied (by default 10%).\n\nFor example, if autoscaling is configured with a memory consumption target of 100Mi, and scale-down and scale-up tolerances of 5% and 1% respectively, scaling will be triggered when the actual consumption falls below 95Mi or exceeds 101Mi.\n\nThis is an alpha field and requires enabling the HPAConfigurableTolerance feature gate.",
+							Ref:         ref("k8s.io/apimachinery/pkg/api/resource.Quantity"),
+						},
+					},
 				},
 			},
 		},
 		Dependencies: []string{
-			"k8s.io/api/autoscaling/v2.HPAScalingPolicy"},
+			"k8s.io/api/autoscaling/v2.HPAScalingPolicy", "k8s.io/apimachinery/pkg/api/resource.Quantity"},
 	}
 }
 
@@ -3157,27 +3264,27 @@ func schema_k8sio_api_batch_v1_JobSpec(ref common.ReferenceCallback) common.Open
 					},
 					"successPolicy": {
 						SchemaProps: spec.SchemaProps{
-							Description: "successPolicy specifies the policy when the Job can be declared as succeeded. If empty, the default behavior applies - the Job is declared as succeeded only when the number of succeeded pods equals to the completions. When the field is specified, it must be immutable and works only for the Indexed Jobs. Once the Job meets the SuccessPolicy, the lingering pods are terminated.\n\nThis field is beta-level. To use this field, you must enable the `JobSuccessPolicy` feature gate (enabled by default).",
+							Description: "successPolicy specifies the policy when the Job can be declared as succeeded. If empty, the default behavior applies - the Job is declared as succeeded only when the number of succeeded pods equals to the completions. When the field is specified, it must be immutable and works only for the Indexed Jobs. Once the Job meets the SuccessPolicy, the lingering pods are terminated.",
 							Ref:         ref("k8s.io/api/batch/v1.SuccessPolicy"),
 						},
 					},
 					"backoffLimit": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Specifies the number of retries before marking this job failed. Defaults to 6",
+							Description: "Specifies the number of retries before marking this job failed. Defaults to 6, unless backoffLimitPerIndex (only Indexed Job) is specified. When backoffLimitPerIndex is specified, backoffLimit defaults to 2147483647.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
 					},
 					"backoffLimitPerIndex": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Specifies the limit for the number of retries within an index before marking this index as failed. When enabled the number of failures per index is kept in the pod's batch.kubernetes.io/job-index-failure-count annotation. It can only be set when Job's completionMode=Indexed, and the Pod's restart policy is Never. The field is immutable. This field is beta-level. It can be used when the `JobBackoffLimitPerIndex` feature gate is enabled (enabled by default).",
+							Description: "Specifies the limit for the number of retries within an index before marking this index as failed. When enabled the number of failures per index is kept in the pod's batch.kubernetes.io/job-index-failure-count annotation. It can only be set when Job's completionMode=Indexed, and the Pod's restart policy is Never. The field is immutable.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
 					},
 					"maxFailedIndexes": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Specifies the maximal number of failed indexes before marking the Job as failed, when backoffLimitPerIndex is set. Once the number of failed indexes exceeds this number the entire Job is marked as Failed and its execution is terminated. When left as null the job continues execution of all of its indexes and is marked with the `Complete` Job condition. It can only be specified when backoffLimitPerIndex is set. It can be null or up to completions. It is required and must be less than or equal to 10^4 when is completions greater than 10^5. This field is beta-level. It can be used when the `JobBackoffLimitPerIndex` feature gate is enabled (enabled by default).",
+							Description: "Specifies the maximal number of failed indexes before marking the Job as failed, when backoffLimitPerIndex is set. Once the number of failed indexes exceeds this number the entire Job is marked as Failed and its execution is terminated. When left as null the job continues execution of all of its indexes and is marked with the `Complete` Job condition. It can only be specified when backoffLimitPerIndex is set. It can be null or up to completions. It is required and must be less than or equal to 10^4 when is completions greater than 10^5.",
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
@@ -3226,7 +3333,7 @@ func schema_k8sio_api_batch_v1_JobSpec(ref common.ReferenceCallback) common.Open
 					},
 					"podReplacementPolicy": {
 						SchemaProps: spec.SchemaProps{
-							Description: "podReplacementPolicy specifies when to create replacement Pods. Possible values are: - TerminatingOrFailed means that we recreate pods\n  when they are terminating (has a metadata.deletionTimestamp) or failed.\n- Failed means to wait until a previously created Pod is fully terminated (has phase\n  Failed or Succeeded) before creating a replacement Pod.\n\nWhen using podFailurePolicy, Failed is the the only allowed value. TerminatingOrFailed and Failed are allowed values when podFailurePolicy is not in use. This is an beta field. To use this, enable the JobPodReplacementPolicy feature toggle. This is on by default.\n\nPossible enum values:\n - `\"Failed\"` means to wait until a previously created Pod is fully terminated (has phase Failed or Succeeded) before creating a replacement Pod.\n - `\"TerminatingOrFailed\"` means that we recreate pods when they are terminating (has a metadata.deletionTimestamp) or failed.",
+							Description: "podReplacementPolicy specifies when to create replacement Pods. Possible values are: - TerminatingOrFailed means that we recreate pods\n  when they are terminating (has a metadata.deletionTimestamp) or failed.\n- Failed means to wait until a previously created Pod is fully terminated (has phase\n  Failed or Succeeded) before creating a replacement Pod.\n\nWhen using podFailurePolicy, Failed is the the only allowed value. TerminatingOrFailed and Failed are allowed values when podFailurePolicy is not in use.\n\nPossible enum values:\n - `\"Failed\"` means to wait until a previously created Pod is fully terminated (has phase Failed or Succeeded) before creating a replacement Pod.\n - `\"TerminatingOrFailed\"` means that we recreate pods when they are terminating (has a metadata.deletionTimestamp) or failed.",
 							Type:        []string{"string"},
 							Format:      "",
 							Enum:        []interface{}{"Failed", "TerminatingOrFailed"},
@@ -3325,7 +3432,7 @@ func schema_k8sio_api_batch_v1_JobStatus(ref common.ReferenceCallback) common.Op
 					},
 					"failedIndexes": {
 						SchemaProps: spec.SchemaProps{
-							Description: "FailedIndexes holds the failed indexes when spec.backoffLimitPerIndex is set. The indexes are represented in the text format analogous as for the `completedIndexes` field, ie. they are kept as decimal integers separated by commas. The numbers are listed in increasing order. Three or more consecutive numbers are compressed and represented by the first and last element of the series, separated by a hyphen. For example, if the failed indexes are 1, 3, 4, 5 and 7, they are represented as \"1,3-5,7\". The set of failed indexes cannot overlap with the set of completed indexes.\n\nThis field is beta-level. It can be used when the `JobBackoffLimitPerIndex` feature gate is enabled (enabled by default).",
+							Description: "FailedIndexes holds the failed indexes when spec.backoffLimitPerIndex is set. The indexes are represented in the text format analogous as for the `completedIndexes` field, ie. they are kept as decimal integers separated by commas. The numbers are listed in increasing order. Three or more consecutive numbers are compressed and represented by the first and last element of the series, separated by a hyphen. For example, if the failed indexes are 1, 3, 4, 5 and 7, they are represented as \"1,3-5,7\". The set of failed indexes cannot overlap with the set of completed indexes.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -3504,7 +3611,7 @@ func schema_k8sio_api_batch_v1_PodFailurePolicyRule(ref common.ReferenceCallback
 				Properties: map[string]spec.Schema{
 					"action": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Specifies the action taken on a pod failure when the requirements are satisfied. Possible values are:\n\n- FailJob: indicates that the pod's job is marked as Failed and all\n  running pods are terminated.\n- FailIndex: indicates that the pod's index is marked as Failed and will\n  not be restarted.\n  This value is beta-level. It can be used when the\n  `JobBackoffLimitPerIndex` feature gate is enabled (enabled by default).\n- Ignore: indicates that the counter towards the .backoffLimit is not\n  incremented and a replacement pod is created.\n- Count: indicates that the pod is handled in the default way - the\n  counter towards the .backoffLimit is incremented.\nAdditional values are considered to be added in the future. Clients should react to an unknown action by skipping the rule.\n\nPossible enum values:\n - `\"Count\"` This is an action which might be taken on a pod failure - the pod failure is handled in the default way - the counter towards .backoffLimit, represented by the job's .status.failed field, is incremented.\n - `\"FailIndex\"` This is an action which might be taken on a pod failure - mark the Job's index as failed to avoid restarts within this index. This action can only be used when backoffLimitPerIndex is set. This value is beta-level.\n - `\"FailJob\"` This is an action which might be taken on a pod failure - mark the pod's job as Failed and terminate all running pods.\n - `\"Ignore\"` This is an action which might be taken on a pod failure - the counter towards .backoffLimit, represented by the job's .status.failed field, is not incremented and a replacement pod is created.",
+							Description: "Specifies the action taken on a pod failure when the requirements are satisfied. Possible values are:\n\n- FailJob: indicates that the pod's job is marked as Failed and all\n  running pods are terminated.\n- FailIndex: indicates that the pod's index is marked as Failed and will\n  not be restarted.\n- Ignore: indicates that the counter towards the .backoffLimit is not\n  incremented and a replacement pod is created.\n- Count: indicates that the pod is handled in the default way - the\n  counter towards the .backoffLimit is incremented.\nAdditional values are considered to be added in the future. Clients should react to an unknown action by skipping the rule.\n\nPossible enum values:\n - `\"Count\"` This is an action which might be taken on a pod failure - the pod failure is handled in the default way - the counter towards .backoffLimit, represented by the job's .status.failed field, is incremented.\n - `\"FailIndex\"` This is an action which might be taken on a pod failure - mark the Job's index as failed to avoid restarts within this index. This action can only be used when backoffLimitPerIndex is set.\n - `\"FailJob\"` This is an action which might be taken on a pod failure - mark the pod's job as Failed and terminate all running pods.\n - `\"Ignore\"` This is an action which might be taken on a pod failure - the counter towards .backoffLimit, represented by the job's .status.failed field, is not incremented and a replacement pod is created.",
 							Default:     "",
 							Type:        []string{"string"},
 							Format:      "",
@@ -3559,7 +3666,7 @@ func schema_k8sio_api_batch_v1_SuccessPolicy(ref common.ReferenceCallback) commo
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "rules represents the list of alternative rules for the declaring the Jobs as successful before `.status.succeeded >= .spec.completions`. Once any of the rules are met, the \"SucceededCriteriaMet\" condition is added, and the lingering pods are removed. The terminal state for such a Job has the \"Complete\" condition. Additionally, these rules are evaluated in order; Once the Job meets one of the rules, other rules are ignored. At most 20 elements are allowed.",
+							Description: "rules represents the list of alternative rules for the declaring the Jobs as successful before `.status.succeeded >= .spec.completions`. Once any of the rules are met, the \"SuccessCriteriaMet\" condition is added, and the lingering pods are removed. The terminal state for such a Job has the \"Complete\" condition. Additionally, these rules are evaluated in order; Once the Job meets one of the rules, other rules are ignored. At most 20 elements are allowed.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -5143,7 +5250,7 @@ func schema_k8sio_api_core_v1_Container(ref common.ReferenceCallback) common.Ope
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.",
+							Description: "List of sources to populate environment variables in the container. The keys defined within a source may consist of any printable ASCII characters except '='. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -5207,11 +5314,30 @@ func schema_k8sio_api_core_v1_Container(ref common.ReferenceCallback) common.Ope
 					},
 					"restartPolicy": {
 						SchemaProps: spec.SchemaProps{
-							Description: "RestartPolicy defines the restart behavior of individual containers in a pod. This field may only be set for init containers, and the only allowed value is \"Always\". For non-init containers or when this field is not specified, the restart behavior is defined by the Pod's restart policy and the container type. Setting the RestartPolicy as \"Always\" for the init container will have the following effect: this init container will be continually restarted on exit until all regular containers have terminated. Once all regular containers have completed, all init containers with restartPolicy \"Always\" will be shut down. This lifecycle differs from normal init containers and is often referred to as a \"sidecar\" container. Although this init container still starts in the init container sequence, it does not wait for the container to complete before proceeding to the next init container. Instead, the next init container starts immediately after this init container is started, or after any startupProbe has successfully completed.",
+							Description: "RestartPolicy defines the restart behavior of individual containers in a pod. This overrides the pod-level restart policy. When this field is not specified, the restart behavior is defined by the Pod's restart policy and the container type. Additionally, setting the RestartPolicy as \"Always\" for the init container will have the following effect: this init container will be continually restarted on exit until all regular containers have terminated. Once all regular containers have completed, all init containers with restartPolicy \"Always\" will be shut down. This lifecycle differs from normal init containers and is often referred to as a \"sidecar\" container. Although this init container still starts in the init container sequence, it does not wait for the container to complete before proceeding to the next init container. Instead, the next init container starts immediately after this init container is started, or after any startupProbe has successfully completed.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
 					},
+					"restartPolicyRules": {
+						VendorExtensible: spec.VendorExtensible{
+							Extensions: spec.Extensions{
+								"x-kubernetes-list-type": "atomic",
+							},
+						},
+						SchemaProps: spec.SchemaProps{
+							Description: "Represents a list of rules to be checked to determine if the container should be restarted on exit. The rules are evaluated in order. Once a rule matches a container exit condition, the remaining rules are ignored. If no rule matches the container exit condition, the Container-level restart policy determines the whether the container is restarted or not. Constraints on the rules: - At most 20 rules are allowed. - Rules can have the same action. - Identical rules are not forbidden in validations. When rules are specified, container MUST set RestartPolicy explicitly even it if matches the Pod's RestartPolicy.",
+							Type:        []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: map[string]interface{}{},
+										Ref:     ref("k8s.io/api/core/v1.ContainerRestartRule"),
+									},
+								},
+							},
+						},
+					},
 					"volumeMounts": {
 						VendorExtensible: spec.VendorExtensible{
 							Extensions: spec.Extensions{
@@ -5339,7 +5465,45 @@ func schema_k8sio_api_core_v1_Container(ref common.ReferenceCallback) common.Ope
 			},
 		},
 		Dependencies: []string{
-			"k8s.io/api/core/v1.ContainerPort", "k8s.io/api/core/v1.ContainerResizePolicy", "k8s.io/api/core/v1.EnvFromSource", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.VolumeDevice", "k8s.io/api/core/v1.VolumeMount"},
+			"k8s.io/api/core/v1.ContainerPort", "k8s.io/api/core/v1.ContainerResizePolicy", "k8s.io/api/core/v1.ContainerRestartRule", "k8s.io/api/core/v1.EnvFromSource", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.VolumeDevice", "k8s.io/api/core/v1.VolumeMount"},
+	}
+}
+
+func schema_k8sio_api_core_v1_ContainerExtendedResourceRequest(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "ContainerExtendedResourceRequest has the mapping of container name, extended resource name to the device request name.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"containerName": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The name of the container requesting resources.",
+							Default:     "",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"resourceName": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The name of the extended resource in that container which gets backed by DRA.",
+							Default:     "",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"requestName": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The name of the request in the special ResourceClaim which corresponds to the extended resource.",
+							Default:     "",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+				},
+				Required: []string{"containerName", "resourceName", "requestName"},
+			},
+		},
 	}
 }
 
@@ -5465,6 +5629,76 @@ func schema_k8sio_api_core_v1_ContainerResizePolicy(ref common.ReferenceCallback
 	}
 }
 
+func schema_k8sio_api_core_v1_ContainerRestartRule(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "ContainerRestartRule describes how a container exit is handled.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"action": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Specifies the action taken on a container exit if the requirements are satisfied. The only possible value is \"Restart\" to restart the container.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"exitCodes": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Represents the exit codes to check on container exits.",
+							Ref:         ref("k8s.io/api/core/v1.ContainerRestartRuleOnExitCodes"),
+						},
+					},
+				},
+				Required: []string{"action"},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/api/core/v1.ContainerRestartRuleOnExitCodes"},
+	}
+}
+
+func schema_k8sio_api_core_v1_ContainerRestartRuleOnExitCodes(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "ContainerRestartRuleOnExitCodes describes the condition for handling an exited container based on its exit codes.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"operator": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Represents the relationship between the container exit code(s) and the specified values. Possible values are: - In: the requirement is satisfied if the container exit code is in the\n  set of specified values.\n- NotIn: the requirement is satisfied if the container exit code is\n  not in the set of specified values.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"values": {
+						VendorExtensible: spec.VendorExtensible{
+							Extensions: spec.Extensions{
+								"x-kubernetes-list-type": "set",
+							},
+						},
+						SchemaProps: spec.SchemaProps{
+							Description: "Specifies the set of values to check for container exit codes. At most 255 elements are allowed.",
+							Type:        []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: 0,
+										Type:    []string{"integer"},
+										Format:  "int32",
+									},
+								},
+							},
+						},
+					},
+				},
+				Required: []string{"operator"},
+			},
+		},
+	}
+}
+
 func schema_k8sio_api_core_v1_ContainerState(ref common.ReferenceCallback) common.OpenAPIDefinition {
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
@@ -5759,6 +5993,14 @@ func schema_k8sio_api_core_v1_ContainerStatus(ref common.ReferenceCallback) comm
 							},
 						},
 					},
+					"stopSignal": {
+						SchemaProps: spec.SchemaProps{
+							Description: "StopSignal reports the effective stop signal for this container\n\nPossible enum values:\n - `\"SIGABRT\"`\n - `\"SIGALRM\"`\n - `\"SIGBUS\"`\n - `\"SIGCHLD\"`\n - `\"SIGCLD\"`\n - `\"SIGCONT\"`\n - `\"SIGFPE\"`\n - `\"SIGHUP\"`\n - `\"SIGILL\"`\n - `\"SIGINT\"`\n - `\"SIGIO\"`\n - `\"SIGIOT\"`\n - `\"SIGKILL\"`\n - `\"SIGPIPE\"`\n - `\"SIGPOLL\"`\n - `\"SIGPROF\"`\n - `\"SIGPWR\"`\n - `\"SIGQUIT\"`\n - `\"SIGRTMAX\"`\n - `\"SIGRTMAX-1\"`\n - `\"SIGRTMAX-10\"`\n - `\"SIGRTMAX-11\"`\n - `\"SIGRTMAX-12\"`\n - `\"SIGRTMAX-13\"`\n - `\"SIGRTMAX-14\"`\n - `\"SIGRTMAX-2\"`\n - `\"SIGRTMAX-3\"`\n - `\"SIGRTMAX-4\"`\n - `\"SIGRTMAX-5\"`\n - `\"SIGRTMAX-6\"`\n - `\"SIGRTMAX-7\"`\n - `\"SIGRTMAX-8\"`\n - `\"SIGRTMAX-9\"`\n - `\"SIGRTMIN\"`\n - `\"SIGRTMIN+1\"`\n - `\"SIGRTMIN+10\"`\n - `\"SIGRTMIN+11\"`\n - `\"SIGRTMIN+12\"`\n - `\"SIGRTMIN+13\"`\n - `\"SIGRTMIN+14\"`\n - `\"SIGRTMIN+15\"`\n - `\"SIGRTMIN+2\"`\n - `\"SIGRTMIN+3\"`\n - `\"SIGRTMIN+4\"`\n - `\"SIGRTMIN+5\"`\n - `\"SIGRTMIN+6\"`\n - `\"SIGRTMIN+7\"`\n - `\"SIGRTMIN+8\"`\n - `\"SIGRTMIN+9\"`\n - `\"SIGSEGV\"`\n - `\"SIGSTKFLT\"`\n - `\"SIGSTOP\"`\n - `\"SIGSYS\"`\n - `\"SIGTERM\"`\n - `\"SIGTRAP\"`\n - `\"SIGTSTP\"`\n - `\"SIGTTIN\"`\n - `\"SIGTTOU\"`\n - `\"SIGURG\"`\n - `\"SIGUSR1\"`\n - `\"SIGUSR2\"`\n - `\"SIGVTALRM\"`\n - `\"SIGWINCH\"`\n - `\"SIGXCPU\"`\n - `\"SIGXFSZ\"`",
+							Type:        []string{"string"},
+							Format:      "",
+							Enum:        []interface{}{"SIGABRT", "SIGALRM", "SIGBUS", "SIGCHLD", "SIGCLD", "SIGCONT", "SIGFPE", "SIGHUP", "SIGILL", "SIGINT", "SIGIO", "SIGIOT", "SIGKILL", "SIGPIPE", "SIGPOLL", "SIGPROF", "SIGPWR", "SIGQUIT", "SIGRTMAX", "SIGRTMAX-1", "SIGRTMAX-10", "SIGRTMAX-11", "SIGRTMAX-12", "SIGRTMAX-13", "SIGRTMAX-14", "SIGRTMAX-2", "SIGRTMAX-3", "SIGRTMAX-4", "SIGRTMAX-5", "SIGRTMAX-6", "SIGRTMAX-7", "SIGRTMAX-8", "SIGRTMAX-9", "SIGRTMIN", "SIGRTMIN+1", "SIGRTMIN+10", "SIGRTMIN+11", "SIGRTMIN+12", "SIGRTMIN+13", "SIGRTMIN+14", "SIGRTMIN+15", "SIGRTMIN+2", "SIGRTMIN+3", "SIGRTMIN+4", "SIGRTMIN+5", "SIGRTMIN+6", "SIGRTMIN+7", "SIGRTMIN+8", "SIGRTMIN+9", "SIGSEGV", "SIGSTKFLT", "SIGSTOP", "SIGSYS", "SIGTERM", "SIGTRAP", "SIGTSTP", "SIGTTIN", "SIGTTOU", "SIGURG", "SIGUSR1", "SIGUSR2", "SIGVTALRM", "SIGWINCH", "SIGXCPU", "SIGXFSZ"},
+						},
+					},
 				},
 				Required: []string{"name", "ready", "restartCount", "image", "imageID"},
 			},
@@ -5961,7 +6203,7 @@ func schema_k8sio_api_core_v1_EndpointAddress(ref common.ReferenceCallback) comm
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
 			SchemaProps: spec.SchemaProps{
-				Description: "EndpointAddress is a tuple that describes single IP address.",
+				Description: "EndpointAddress is a tuple that describes single IP address. Deprecated: This API is deprecated in v1.33+.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
 					"ip": {
@@ -6010,7 +6252,7 @@ func schema_k8sio_api_core_v1_EndpointPort(ref common.ReferenceCallback) common.
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
 			SchemaProps: spec.SchemaProps{
-				Description: "EndpointPort is a tuple that describes a single port.",
+				Description: "EndpointPort is a tuple that describes a single port. Deprecated: This API is deprecated in v1.33+.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
 					"name": {
@@ -6059,7 +6301,7 @@ func schema_k8sio_api_core_v1_EndpointSubset(ref common.ReferenceCallback) commo
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
 			SchemaProps: spec.SchemaProps{
-				Description: "EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:\n\n\t{\n\t  Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n\t  Ports:     [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n\t}\n\nThe resulting set of endpoints can be viewed as:\n\n\ta: [ 10.10.1.1:8675, 10.10.2.2:8675 ],\n\tb: [ 10.10.1.1:309, 10.10.2.2:309 ]",
+				Description: "EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:\n\n\t{\n\t  Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n\t  Ports:     [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n\t}\n\nThe resulting set of endpoints can be viewed as:\n\n\ta: [ 10.10.1.1:8675, 10.10.2.2:8675 ],\n\tb: [ 10.10.1.1:309, 10.10.2.2:309 ]\n\nDeprecated: This API is deprecated in v1.33+.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
 					"addresses": {
@@ -6131,7 +6373,7 @@ func schema_k8sio_api_core_v1_Endpoints(ref common.ReferenceCallback) common.Ope
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
 			SchemaProps: spec.SchemaProps{
-				Description: "Endpoints is a collection of endpoints that implement the actual service. Example:\n\n\t Name: \"mysvc\",\n\t Subsets: [\n\t   {\n\t     Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n\t     Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n\t   },\n\t   {\n\t     Addresses: [{\"ip\": \"10.10.3.3\"}],\n\t     Ports: [{\"name\": \"a\", \"port\": 93}, {\"name\": \"b\", \"port\": 76}]\n\t   },\n\t]",
+				Description: "Endpoints is a collection of endpoints that implement the actual service. Example:\n\n\t Name: \"mysvc\",\n\t Subsets: [\n\t   {\n\t     Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n\t     Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n\t   },\n\t   {\n\t     Addresses: [{\"ip\": \"10.10.3.3\"}],\n\t     Ports: [{\"name\": \"a\", \"port\": 93}, {\"name\": \"b\", \"port\": 76}]\n\t   },\n\t]\n\nEndpoints is a legacy API and does not contain information about all Service features. Use discoveryv1.EndpointSlice for complete information about Service endpoints.\n\nDeprecated: This API is deprecated in v1.33+. Use discoveryv1.EndpointSlice.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
 					"kind": {
@@ -6186,7 +6428,7 @@ func schema_k8sio_api_core_v1_EndpointsList(ref common.ReferenceCallback) common
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
 			SchemaProps: spec.SchemaProps{
-				Description: "EndpointsList is a list of endpoints.",
+				Description: "EndpointsList is a list of endpoints. Deprecated: This API is deprecated in v1.33+.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
 					"kind": {
@@ -6237,12 +6479,12 @@ func schema_k8sio_api_core_v1_EnvFromSource(ref common.ReferenceCallback) common
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
 			SchemaProps: spec.SchemaProps{
-				Description: "EnvFromSource represents the source of a set of ConfigMaps",
+				Description: "EnvFromSource represents the source of a set of ConfigMaps or Secrets",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
 					"prefix": {
 						SchemaProps: spec.SchemaProps{
-							Description: "An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.",
+							Description: "Optional text to prepend to the name of each environment variable. May consist of any printable ASCII characters except '='.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -6276,7 +6518,7 @@ func schema_k8sio_api_core_v1_EnvVar(ref common.ReferenceCallback) common.OpenAP
 				Properties: map[string]spec.Schema{
 					"name": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Name of the environment variable. Must be a C_IDENTIFIER.",
+							Description: "Name of the environment variable. May consist of any printable ASCII characters except '='.",
 							Default:     "",
 							Type:        []string{"string"},
 							Format:      "",
@@ -6335,11 +6577,17 @@ func schema_k8sio_api_core_v1_EnvVarSource(ref common.ReferenceCallback) common.
 							Ref:         ref("k8s.io/api/core/v1.SecretKeySelector"),
 						},
 					},
+					"fileKeyRef": {
+						SchemaProps: spec.SchemaProps{
+							Description: "FileKeyRef selects a key of the env file. Requires the EnvFiles feature gate to be enabled.",
+							Ref:         ref("k8s.io/api/core/v1.FileKeySelector"),
+						},
+					},
 				},
 			},
 		},
 		Dependencies: []string{
-			"k8s.io/api/core/v1.ConfigMapKeySelector", "k8s.io/api/core/v1.ObjectFieldSelector", "k8s.io/api/core/v1.ResourceFieldSelector", "k8s.io/api/core/v1.SecretKeySelector"},
+			"k8s.io/api/core/v1.ConfigMapKeySelector", "k8s.io/api/core/v1.FileKeySelector", "k8s.io/api/core/v1.ObjectFieldSelector", "k8s.io/api/core/v1.ResourceFieldSelector", "k8s.io/api/core/v1.SecretKeySelector"},
 	}
 }
 
@@ -6444,7 +6692,7 @@ func schema_k8sio_api_core_v1_EphemeralContainer(ref common.ReferenceCallback) c
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.",
+							Description: "List of sources to populate environment variables in the container. The keys defined within a source may consist of any printable ASCII characters except '='. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -6508,11 +6756,30 @@ func schema_k8sio_api_core_v1_EphemeralContainer(ref common.ReferenceCallback) c
 					},
 					"restartPolicy": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Restart policy for the container to manage the restart behavior of each container within a pod. This may only be set for init containers. You cannot set this field on ephemeral containers.",
+							Description: "Restart policy for the container to manage the restart behavior of each container within a pod. You cannot set this field on ephemeral containers.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
 					},
+					"restartPolicyRules": {
+						VendorExtensible: spec.VendorExtensible{
+							Extensions: spec.Extensions{
+								"x-kubernetes-list-type": "atomic",
+							},
+						},
+						SchemaProps: spec.SchemaProps{
+							Description: "Represents a list of rules to be checked to determine if the container should be restarted on exit. You cannot set this field on ephemeral containers.",
+							Type:        []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: map[string]interface{}{},
+										Ref:     ref("k8s.io/api/core/v1.ContainerRestartRule"),
+									},
+								},
+							},
+						},
+					},
 					"volumeMounts": {
 						VendorExtensible: spec.VendorExtensible{
 							Extensions: spec.Extensions{
@@ -6647,7 +6914,7 @@ func schema_k8sio_api_core_v1_EphemeralContainer(ref common.ReferenceCallback) c
 			},
 		},
 		Dependencies: []string{
-			"k8s.io/api/core/v1.ContainerPort", "k8s.io/api/core/v1.ContainerResizePolicy", "k8s.io/api/core/v1.EnvFromSource", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.VolumeDevice", "k8s.io/api/core/v1.VolumeMount"},
+			"k8s.io/api/core/v1.ContainerPort", "k8s.io/api/core/v1.ContainerResizePolicy", "k8s.io/api/core/v1.ContainerRestartRule", "k8s.io/api/core/v1.EnvFromSource", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.VolumeDevice", "k8s.io/api/core/v1.VolumeMount"},
 	}
 }
 
@@ -6752,7 +7019,7 @@ func schema_k8sio_api_core_v1_EphemeralContainerCommon(ref common.ReferenceCallb
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.",
+							Description: "List of sources to populate environment variables in the container. The keys defined within a source may consist of any printable ASCII characters except '='. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -6816,15 +7083,34 @@ func schema_k8sio_api_core_v1_EphemeralContainerCommon(ref common.ReferenceCallb
 					},
 					"restartPolicy": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Restart policy for the container to manage the restart behavior of each container within a pod. This may only be set for init containers. You cannot set this field on ephemeral containers.",
+							Description: "Restart policy for the container to manage the restart behavior of each container within a pod. You cannot set this field on ephemeral containers.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
 					},
-					"volumeMounts": {
+					"restartPolicyRules": {
 						VendorExtensible: spec.VendorExtensible{
 							Extensions: spec.Extensions{
-								"x-kubernetes-list-map-keys": []interface{}{
+								"x-kubernetes-list-type": "atomic",
+							},
+						},
+						SchemaProps: spec.SchemaProps{
+							Description: "Represents a list of rules to be checked to determine if the container should be restarted on exit. You cannot set this field on ephemeral containers.",
+							Type:        []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: map[string]interface{}{},
+										Ref:     ref("k8s.io/api/core/v1.ContainerRestartRule"),
+									},
+								},
+							},
+						},
+					},
+					"volumeMounts": {
+						VendorExtensible: spec.VendorExtensible{
+							Extensions: spec.Extensions{
+								"x-kubernetes-list-map-keys": []interface{}{
 									"mountPath",
 								},
 								"x-kubernetes-list-type":       "map",
@@ -6948,7 +7234,7 @@ func schema_k8sio_api_core_v1_EphemeralContainerCommon(ref common.ReferenceCallb
 			},
 		},
 		Dependencies: []string{
-			"k8s.io/api/core/v1.ContainerPort", "k8s.io/api/core/v1.ContainerResizePolicy", "k8s.io/api/core/v1.EnvFromSource", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.VolumeDevice", "k8s.io/api/core/v1.VolumeMount"},
+			"k8s.io/api/core/v1.ContainerPort", "k8s.io/api/core/v1.ContainerResizePolicy", "k8s.io/api/core/v1.ContainerRestartRule", "k8s.io/api/core/v1.EnvFromSource", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.VolumeDevice", "k8s.io/api/core/v1.VolumeMount"},
 	}
 }
 
@@ -7318,6 +7604,57 @@ func schema_k8sio_api_core_v1_FCVolumeSource(ref common.ReferenceCallback) commo
 	}
 }
 
+func schema_k8sio_api_core_v1_FileKeySelector(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "FileKeySelector selects a key of the env file.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"volumeName": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The name of the volume mount containing the env file.",
+							Default:     "",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"path": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The path within the volume from which to select the file. Must be relative and may not contain the '..' path or start with '..'.",
+							Default:     "",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"key": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The key within the env file. An invalid key will prevent the pod from starting. The keys defined within a source may consist of any printable ASCII characters except '='. During Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.",
+							Default:     "",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"optional": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Specify whether the file or its key must be defined. If the file or key does not exist, then the env var is not published. If optional is set to true and the specified key does not exist, the environment variable will not be set in the Pod's containers.\n\nIf optional is set to false and the specified key does not exist, an error will be returned during Pod creation.",
+							Default:     false,
+							Type:        []string{"boolean"},
+							Format:      "",
+						},
+					},
+				},
+				Required: []string{"volumeName", "path", "key"},
+			},
+			VendorExtensible: spec.VendorExtensible{
+				Extensions: spec.Extensions{
+					"x-kubernetes-map-type": "atomic",
+				},
+			},
+		},
+	}
+}
+
 func schema_k8sio_api_core_v1_FlexPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition {
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
@@ -7627,7 +7964,7 @@ func schema_k8sio_api_core_v1_GlusterfsVolumeSource(ref common.ReferenceCallback
 				Properties: map[string]spec.Schema{
 					"endpoints": {
 						SchemaProps: spec.SchemaProps{
-							Description: "endpoints is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
+							Description: "endpoints is the endpoint name that details Glusterfs topology.",
 							Default:     "",
 							Type:        []string{"string"},
 							Format:      "",
@@ -8144,6 +8481,14 @@ func schema_k8sio_api_core_v1_Lifecycle(ref common.ReferenceCallback) common.Ope
 							Ref:         ref("k8s.io/api/core/v1.LifecycleHandler"),
 						},
 					},
+					"stopSignal": {
+						SchemaProps: spec.SchemaProps{
+							Description: "StopSignal defines which signal will be sent to a container when it is being stopped. If not specified, the default is defined by the container runtime in use. StopSignal can only be set for Pods with a non-empty .spec.os.name\n\nPossible enum values:\n - `\"SIGABRT\"`\n - `\"SIGALRM\"`\n - `\"SIGBUS\"`\n - `\"SIGCHLD\"`\n - `\"SIGCLD\"`\n - `\"SIGCONT\"`\n - `\"SIGFPE\"`\n - `\"SIGHUP\"`\n - `\"SIGILL\"`\n - `\"SIGINT\"`\n - `\"SIGIO\"`\n - `\"SIGIOT\"`\n - `\"SIGKILL\"`\n - `\"SIGPIPE\"`\n - `\"SIGPOLL\"`\n - `\"SIGPROF\"`\n - `\"SIGPWR\"`\n - `\"SIGQUIT\"`\n - `\"SIGRTMAX\"`\n - `\"SIGRTMAX-1\"`\n - `\"SIGRTMAX-10\"`\n - `\"SIGRTMAX-11\"`\n - `\"SIGRTMAX-12\"`\n - `\"SIGRTMAX-13\"`\n - `\"SIGRTMAX-14\"`\n - `\"SIGRTMAX-2\"`\n - `\"SIGRTMAX-3\"`\n - `\"SIGRTMAX-4\"`\n - `\"SIGRTMAX-5\"`\n - `\"SIGRTMAX-6\"`\n - `\"SIGRTMAX-7\"`\n - `\"SIGRTMAX-8\"`\n - `\"SIGRTMAX-9\"`\n - `\"SIGRTMIN\"`\n - `\"SIGRTMIN+1\"`\n - `\"SIGRTMIN+10\"`\n - `\"SIGRTMIN+11\"`\n - `\"SIGRTMIN+12\"`\n - `\"SIGRTMIN+13\"`\n - `\"SIGRTMIN+14\"`\n - `\"SIGRTMIN+15\"`\n - `\"SIGRTMIN+2\"`\n - `\"SIGRTMIN+3\"`\n - `\"SIGRTMIN+4\"`\n - `\"SIGRTMIN+5\"`\n - `\"SIGRTMIN+6\"`\n - `\"SIGRTMIN+7\"`\n - `\"SIGRTMIN+8\"`\n - `\"SIGRTMIN+9\"`\n - `\"SIGSEGV\"`\n - `\"SIGSTKFLT\"`\n - `\"SIGSTOP\"`\n - `\"SIGSYS\"`\n - `\"SIGTERM\"`\n - `\"SIGTRAP\"`\n - `\"SIGTSTP\"`\n - `\"SIGTTIN\"`\n - `\"SIGTTOU\"`\n - `\"SIGURG\"`\n - `\"SIGUSR1\"`\n - `\"SIGUSR2\"`\n - `\"SIGVTALRM\"`\n - `\"SIGWINCH\"`\n - `\"SIGXCPU\"`\n - `\"SIGXFSZ\"`",
+							Type:        []string{"string"},
+							Format:      "",
+							Enum:        []interface{}{"SIGABRT", "SIGALRM", "SIGBUS", "SIGCHLD", "SIGCLD", "SIGCONT", "SIGFPE", "SIGHUP", "SIGILL", "SIGINT", "SIGIO", "SIGIOT", "SIGKILL", "SIGPIPE", "SIGPOLL", "SIGPROF", "SIGPWR", "SIGQUIT", "SIGRTMAX", "SIGRTMAX-1", "SIGRTMAX-10", "SIGRTMAX-11", "SIGRTMAX-12", "SIGRTMAX-13", "SIGRTMAX-14", "SIGRTMAX-2", "SIGRTMAX-3", "SIGRTMAX-4", "SIGRTMAX-5", "SIGRTMAX-6", "SIGRTMAX-7", "SIGRTMAX-8", "SIGRTMAX-9", "SIGRTMIN", "SIGRTMIN+1", "SIGRTMIN+10", "SIGRTMIN+11", "SIGRTMIN+12", "SIGRTMIN+13", "SIGRTMIN+14", "SIGRTMIN+15", "SIGRTMIN+2", "SIGRTMIN+3", "SIGRTMIN+4", "SIGRTMIN+5", "SIGRTMIN+6", "SIGRTMIN+7", "SIGRTMIN+8", "SIGRTMIN+9", "SIGSEGV", "SIGSTKFLT", "SIGSTOP", "SIGSYS", "SIGTERM", "SIGTRAP", "SIGTSTP", "SIGTTIN", "SIGTTOU", "SIGURG", "SIGUSR1", "SIGUSR2", "SIGVTALRM", "SIGWINCH", "SIGXCPU", "SIGXFSZ"},
+						},
+					},
 				},
 			},
 		},
@@ -9820,6 +10165,26 @@ func schema_k8sio_api_core_v1_NodeStatus(ref common.ReferenceCallback) common.Op
 	}
 }
 
+func schema_k8sio_api_core_v1_NodeSwapStatus(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "NodeSwapStatus represents swap memory information.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"capacity": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Total amount of swap memory in bytes.",
+							Type:        []string{"integer"},
+							Format:      "int64",
+						},
+					},
+				},
+			},
+		},
+	}
+}
+
 func schema_k8sio_api_core_v1_NodeSystemInfo(ref common.ReferenceCallback) common.OpenAPIDefinition {
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
@@ -9907,10 +10272,18 @@ func schema_k8sio_api_core_v1_NodeSystemInfo(ref common.ReferenceCallback) commo
 							Format:      "",
 						},
 					},
+					"swap": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Swap Info reported by the node.",
+							Ref:         ref("k8s.io/api/core/v1.NodeSwapStatus"),
+						},
+					},
 				},
 				Required: []string{"machineID", "systemUUID", "bootID", "kernelVersion", "osImage", "containerRuntimeVersion", "kubeletVersion", "kubeProxyVersion", "operatingSystem", "architecture"},
 			},
 		},
+		Dependencies: []string{
+			"k8s.io/api/core/v1.NodeSwapStatus"},
 	}
 }
 
@@ -10301,7 +10674,7 @@ func schema_k8sio_api_core_v1_PersistentVolumeClaimSpec(ref common.ReferenceCall
 					},
 					"volumeAttributesClassName": {
 						SchemaProps: spec.SchemaProps{
-							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 empty string once it is set. If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass will be set by the persistentvolume controller if it exists. If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource exists. More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ (Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).",
+							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 or nil value indicates that no VolumeAttributesClass will be applied to the claim. If the claim enters an Infeasible error state, this field can be reset to its previous value (including nil) to cancel the modification. If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource exists. More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -10426,14 +10799,14 @@ func schema_k8sio_api_core_v1_PersistentVolumeClaimStatus(ref common.ReferenceCa
 					},
 					"currentVolumeAttributesClassName": {
 						SchemaProps: spec.SchemaProps{
-							Description: "currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using. When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim This is a beta field and requires enabling VolumeAttributesClass feature (off by default).",
+							Description: "currentVolumeAttributesClassName is the current name of the VolumeAttributesClass the PVC is using. When unset, there is no VolumeAttributeClass applied to this PersistentVolumeClaim",
 							Type:        []string{"string"},
 							Format:      "",
 						},
 					},
 					"modifyVolumeStatus": {
 						SchemaProps: spec.SchemaProps{
-							Description: "ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. When this is unset, there is no ModifyVolume operation being attempted. This is a beta field and requires enabling VolumeAttributesClass feature (off by default).",
+							Description: "ModifyVolumeStatus represents the status object of ControllerModifyVolume operation. When this is unset, there is no ModifyVolume operation being attempted.",
 							Ref:         ref("k8s.io/api/core/v1.ModifyVolumeStatus"),
 						},
 					},
@@ -10938,7 +11311,7 @@ func schema_k8sio_api_core_v1_PersistentVolumeSpec(ref common.ReferenceCallback)
 					},
 					"volumeAttributesClassName": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Name of VolumeAttributesClass to which this persistent volume belongs. Empty value is not allowed. When this field is not set, it indicates that this volume does not belong to any VolumeAttributesClass. This field is mutable and can be changed by the CSI driver after a volume has been updated successfully to a new class. For an unbound PersistentVolume, the volumeAttributesClassName will be matched with unbound PersistentVolumeClaims during the binding process. This is a beta field and requires enabling VolumeAttributesClass feature (off by default).",
+							Description: "Name of VolumeAttributesClass to which this persistent volume belongs. Empty value is not allowed. When this field is not set, it indicates that this volume does not belong to any VolumeAttributesClass. This field is mutable and can be changed by the CSI driver after a volume has been updated successfully to a new class. For an unbound PersistentVolume, the volumeAttributesClassName will be matched with unbound PersistentVolumeClaims during the binding process.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -11180,7 +11553,7 @@ func schema_k8sio_api_core_v1_PodAffinityTerm(ref common.ReferenceCallback) comm
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							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. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set. This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
+							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. The same key is forbidden to exist in both matchLabelKeys and labelSelector. Also, matchLabelKeys cannot be set when labelSelector isn't set.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -11200,7 +11573,7 @@ func schema_k8sio_api_core_v1_PodAffinityTerm(ref common.ReferenceCallback) comm
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							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 empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set. This is a beta field and requires enabling MatchLabelKeysInPodAffinity feature gate (enabled by default).",
+							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 empty. The same key is forbidden to exist in both mismatchLabelKeys and labelSelector. Also, mismatchLabelKeys cannot be set when labelSelector isn't set.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -11255,7 +11628,7 @@ func schema_k8sio_api_core_v1_PodAntiAffinity(ref common.ReferenceCallback) comm
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.",
+							Description: "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and subtracting \"weight\" from the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -11337,6 +11710,62 @@ func schema_k8sio_api_core_v1_PodAttachOptions(ref common.ReferenceCallback) com
 	}
 }
 
+func schema_k8sio_api_core_v1_PodCertificateProjection(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "PodCertificateProjection provides a private key and X.509 certificate in the pod filesystem.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"signerName": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Kubelet's generated CSRs will be addressed to this signer.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"keyType": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The type of keypair Kubelet will generate for the pod.\n\nValid values are \"RSA3072\", \"RSA4096\", \"ECDSAP256\", \"ECDSAP384\", \"ECDSAP521\", and \"ED25519\".",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"maxExpirationSeconds": {
+						SchemaProps: spec.SchemaProps{
+							Description: "maxExpirationSeconds is the maximum lifetime permitted for the certificate.\n\nKubelet copies this value verbatim into the PodCertificateRequests it generates for this projection.\n\nIf omitted, kube-apiserver will set it to 86400(24 hours). kube-apiserver will reject values shorter than 3600 (1 hour).  The maximum allowable value is 7862400 (91 days).\n\nThe signer implementation is then free to issue a certificate with any lifetime *shorter* than MaxExpirationSeconds, but no shorter than 3600 seconds (1 hour).  This constraint is enforced by kube-apiserver. `kubernetes.io` signers will never issue certificates with a lifetime longer than 24 hours.",
+							Type:        []string{"integer"},
+							Format:      "int32",
+						},
+					},
+					"credentialBundlePath": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Write the credential bundle at this path in the projected volume.\n\nThe credential bundle is a single file that contains multiple PEM blocks. The first PEM block is a PRIVATE KEY block, containing a PKCS#8 private key.\n\nThe remaining blocks are CERTIFICATE blocks, containing the issued certificate chain from the signer (leaf and any intermediates).\n\nUsing credentialBundlePath lets your Pod's application code make a single atomic read that retrieves a consistent key and certificate chain.  If you project them to separate files, your application code will need to additionally check that the leaf certificate was issued to the key.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"keyPath": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Write the key at this path in the projected volume.\n\nMost applications should use credentialBundlePath.  When using keyPath and certificateChainPath, your application needs to check that the key and leaf certificate are consistent, because it is possible to read the files mid-rotation.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"certificateChainPath": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Write the certificate chain at this path in the projected volume.\n\nMost applications should use credentialBundlePath.  When using keyPath and certificateChainPath, your application needs to check that the key and leaf certificate are consistent, because it is possible to read the files mid-rotation.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+				},
+				Required: []string{"signerName", "keyType"},
+			},
+		},
+	}
+}
+
 func schema_k8sio_api_core_v1_PodCondition(ref common.ReferenceCallback) common.OpenAPIDefinition {
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
@@ -11352,6 +11781,13 @@ func schema_k8sio_api_core_v1_PodCondition(ref common.ReferenceCallback) common.
 							Format:      "",
 						},
 					},
+					"observedGeneration": {
+						SchemaProps: spec.SchemaProps{
+							Description: "If set, this represents the .metadata.generation that the pod condition was set based upon. This is an alpha field. Enable PodObservedGenerationTracking to be able to use this field.",
+							Type:        []string{"integer"},
+							Format:      "int64",
+						},
+					},
 					"status": {
 						SchemaProps: spec.SchemaProps{
 							Description: "Status is the status of the condition. Can be True, False, Unknown. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions",
@@ -11579,6 +12015,49 @@ func schema_k8sio_api_core_v1_PodExecOptions(ref common.ReferenceCallback) commo
 	}
 }
 
+func schema_k8sio_api_core_v1_PodExtendedResourceClaimStatus(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "PodExtendedResourceClaimStatus is stored in the PodStatus for the extended resource requests backed by DRA. It stores the generated name for the corresponding special ResourceClaim created by the scheduler.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"requestMappings": {
+						VendorExtensible: spec.VendorExtensible{
+							Extensions: spec.Extensions{
+								"x-kubernetes-list-type": "atomic",
+							},
+						},
+						SchemaProps: spec.SchemaProps{
+							Description: "RequestMappings identifies the mapping of <container, extended resource backed by DRA> to  device request in the generated ResourceClaim.",
+							Type:        []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: map[string]interface{}{},
+										Ref:     ref("k8s.io/api/core/v1.ContainerExtendedResourceRequest"),
+									},
+								},
+							},
+						},
+					},
+					"resourceClaimName": {
+						SchemaProps: spec.SchemaProps{
+							Description: "ResourceClaimName is the name of the ResourceClaim that was generated for the Pod in the namespace of the Pod.",
+							Default:     "",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+				},
+				Required: []string{"requestMappings", "resourceClaimName"},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/api/core/v1.ContainerExtendedResourceRequest"},
+	}
+}
+
 func schema_k8sio_api_core_v1_PodIP(ref common.ReferenceCallback) common.OpenAPIDefinition {
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
@@ -12155,7 +12634,7 @@ func schema_k8sio_api_core_v1_PodSpec(ref common.ReferenceCallback) common.OpenA
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/",
+							Description: "List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -12296,7 +12775,7 @@ func schema_k8sio_api_core_v1_PodSpec(ref common.ReferenceCallback) common.OpenA
 					},
 					"hostNetwork": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.",
+							Description: "Host networking requested for this pod. Use the host's network namespace. When using HostNetwork you should specify ports so the scheduler is aware. When `hostNetwork` is true, specified `hostPort` fields in port definitions must match `containerPort`, and unspecified `hostPort` fields in port definitions are defaulted to match `containerPort`. Default to false.",
 							Type:        []string{"boolean"},
 							Format:      "",
 						},
@@ -12531,7 +13010,7 @@ func schema_k8sio_api_core_v1_PodSpec(ref common.ReferenceCallback) common.OpenA
 					},
 					"os": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Specifies the OS of the containers in the pod. Some pod and container fields are restricted if this is set.\n\nIf the OS field is set to linux, the following fields must be unset: -securityContext.windowsOptions\n\nIf the OS field is set to windows, following fields must be unset: - spec.hostPID - spec.hostIPC - spec.hostUsers - spec.securityContext.appArmorProfile - spec.securityContext.seLinuxOptions - spec.securityContext.seccompProfile - spec.securityContext.fsGroup - spec.securityContext.fsGroupChangePolicy - spec.securityContext.sysctls - spec.shareProcessNamespace - spec.securityContext.runAsUser - spec.securityContext.runAsGroup - spec.securityContext.supplementalGroups - spec.securityContext.supplementalGroupsPolicy - spec.containers[*].securityContext.appArmorProfile - spec.containers[*].securityContext.seLinuxOptions - spec.containers[*].securityContext.seccompProfile - spec.containers[*].securityContext.capabilities - spec.containers[*].securityContext.readOnlyRootFilesystem - spec.containers[*].securityContext.privileged - spec.containers[*].securityContext.allowPrivilegeEscalation - spec.containers[*].securityContext.procMount - spec.containers[*].securityContext.runAsUser - spec.containers[*].securityContext.runAsGroup",
+							Description: "Specifies the OS of the containers in the pod. Some pod and container fields are restricted if this is set.\n\nIf the OS field is set to linux, the following fields must be unset: -securityContext.windowsOptions\n\nIf the OS field is set to windows, following fields must be unset: - spec.hostPID - spec.hostIPC - spec.hostUsers - spec.resources - spec.securityContext.appArmorProfile - spec.securityContext.seLinuxOptions - spec.securityContext.seccompProfile - spec.securityContext.fsGroup - spec.securityContext.fsGroupChangePolicy - spec.securityContext.sysctls - spec.shareProcessNamespace - spec.securityContext.runAsUser - spec.securityContext.runAsGroup - spec.securityContext.supplementalGroups - spec.securityContext.supplementalGroupsPolicy - spec.containers[*].securityContext.appArmorProfile - spec.containers[*].securityContext.seLinuxOptions - spec.containers[*].securityContext.seccompProfile - spec.containers[*].securityContext.capabilities - spec.containers[*].securityContext.readOnlyRootFilesystem - spec.containers[*].securityContext.privileged - spec.containers[*].securityContext.allowPrivilegeEscalation - spec.containers[*].securityContext.procMount - spec.containers[*].securityContext.runAsUser - spec.containers[*].securityContext.runAsGroup",
 							Ref:         ref("k8s.io/api/core/v1.PodOS"),
 						},
 					},
@@ -12592,10 +13071,17 @@ func schema_k8sio_api_core_v1_PodSpec(ref common.ReferenceCallback) common.OpenA
 					},
 					"resources": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Resources is the total amount of CPU and Memory resources required by all containers in the pod. It supports specifying Requests and Limits for \"cpu\" and \"memory\" resource names only. ResourceClaims are not supported.\n\nThis field enables fine-grained control over resource allocation for the entire pod, allowing resource sharing among containers in a pod.\n\nThis is an alpha field and requires enabling the PodLevelResources feature gate.",
+							Description: "Resources is the total amount of CPU and Memory resources required by all containers in the pod. It supports specifying Requests and Limits for \"cpu\", \"memory\" and \"hugepages-\" resource names only. ResourceClaims are not supported.\n\nThis field enables fine-grained control over resource allocation for the entire pod, allowing resource sharing among containers in a pod.\n\nThis is an alpha field and requires enabling the PodLevelResources feature gate.",
 							Ref:         ref("k8s.io/api/core/v1.ResourceRequirements"),
 						},
 					},
+					"hostnameOverride": {
+						SchemaProps: spec.SchemaProps{
+							Description: "HostnameOverride specifies an explicit override for the pod's hostname as perceived by the pod. This field only specifies the pod's hostname and does not affect its DNS records. When this field is set to a non-empty string: - It takes precedence over the values set in `hostname` and `subdomain`. - The Pod's hostname will be set to this value. - `setHostnameAsFQDN` must be nil or set to false. - `hostNetwork` must be set to false.\n\nThis field must be a valid DNS subdomain as defined in RFC 1123 and contain at most 64 characters. Requires the HostnameOverride feature gate to be enabled.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
 				},
 				Required: []string{"containers"},
 			},
@@ -12612,6 +13098,13 @@ func schema_k8sio_api_core_v1_PodStatus(ref common.ReferenceCallback) common.Ope
 				Description: "PodStatus represents information about the status of a pod. Status may trail the actual state of a system, especially if the node that hosts the pod cannot contact the control plane.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
+					"observedGeneration": {
+						SchemaProps: spec.SchemaProps{
+							Description: "If set, this represents the .metadata.generation that the pod status was set based upon. This is an alpha field. Enable PodObservedGenerationTracking to be able to use this field.",
+							Type:        []string{"integer"},
+							Format:      "int64",
+						},
+					},
 					"phase": {
 						SchemaProps: spec.SchemaProps{
 							Description: "The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values:\n\nPending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod.\n\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase\n\nPossible enum values:\n - `\"Failed\"` means that all containers in the pod have terminated, and at least one container has terminated in a failure (exited with a non-zero exit code or was stopped by the system).\n - `\"Pending\"` means the pod has been accepted by the system, but one or more of the containers has not been started. This includes time before being bound to a node, as well as time spent pulling images onto the host.\n - `\"Running\"` means the pod has been bound to a node and all of the containers have been started. At least one container is still running or is in the process of being restarted.\n - `\"Succeeded\"` means that all containers in the pod have voluntarily terminated with a container exit code of 0, and the system is not going to restart any of these containers.\n - `\"Unknown\"` means that for some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod. Deprecated: It isn't being set since 2015 (74da3b14b0c0f658b3bb8d2def5094686d0e9095)",
@@ -12797,7 +13290,7 @@ func schema_k8sio_api_core_v1_PodStatus(ref common.ReferenceCallback) common.Ope
 					},
 					"resize": {
 						SchemaProps: spec.SchemaProps{
-							Description: "Status of resources resize desired for pod's containers. It is empty if no resources resize is pending. Any changes to container resources will automatically set this to \"Proposed\"",
+							Description: "Status of resources resize desired for pod's containers. It is empty if no resources resize is pending. Any changes to container resources will automatically set this to \"Proposed\" Deprecated: Resize status is moved to two pod conditions PodResizePending and PodResizeInProgress. PodResizePending will track states where the spec has been resized, but the Kubelet has not yet allocated the resources. PodResizeInProgress will track in-progress resizes, and should be present whenever allocated resources != acknowledged resources.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -12826,11 +13319,17 @@ func schema_k8sio_api_core_v1_PodStatus(ref common.ReferenceCallback) common.Ope
 							},
 						},
 					},
+					"extendedResourceClaimStatus": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Status of extended resource claim backed by DRA.",
+							Ref:         ref("k8s.io/api/core/v1.PodExtendedResourceClaimStatus"),
+						},
+					},
 				},
 			},
 		},
 		Dependencies: []string{
-			"k8s.io/api/core/v1.ContainerStatus", "k8s.io/api/core/v1.HostIP", "k8s.io/api/core/v1.PodCondition", "k8s.io/api/core/v1.PodIP", "k8s.io/api/core/v1.PodResourceClaimStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"},
+			"k8s.io/api/core/v1.ContainerStatus", "k8s.io/api/core/v1.HostIP", "k8s.io/api/core/v1.PodCondition", "k8s.io/api/core/v1.PodExtendedResourceClaimStatus", "k8s.io/api/core/v1.PodIP", "k8s.io/api/core/v1.PodResourceClaimStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"},
 	}
 }
 
@@ -13758,6 +14257,7 @@ func schema_k8sio_api_core_v1_ReplicationControllerSpec(ref common.ReferenceCall
 					"replicas": {
 						SchemaProps: spec.SchemaProps{
 							Description: "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller",
+							Default:     1,
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
@@ -13765,6 +14265,7 @@ func schema_k8sio_api_core_v1_ReplicationControllerSpec(ref common.ReferenceCall
 					"minReadySeconds": {
 						SchemaProps: spec.SchemaProps{
 							Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)",
+							Default:     0,
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
@@ -14117,7 +14618,7 @@ func schema_k8sio_api_core_v1_ResourceQuotaSpec(ref common.ReferenceCallback) co
 										Default: "",
 										Type:    []string{"string"},
 										Format:  "",
-										Enum:    []interface{}{"BestEffort", "CrossNamespacePodAffinity", "NotBestEffort", "NotTerminating", "PriorityClass", "Terminating"},
+										Enum:    []interface{}{"BestEffort", "CrossNamespacePodAffinity", "NotBestEffort", "NotTerminating", "PriorityClass", "Terminating", "VolumeAttributesClass"},
 									},
 								},
 							},
@@ -14225,7 +14726,7 @@ func schema_k8sio_api_core_v1_ResourceRequirements(ref common.ReferenceCallback)
 							},
 						},
 						SchemaProps: spec.SchemaProps{
-							Description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.\n\nThis is an alpha field and requires enabling the DynamicResourceAllocation feature gate.\n\nThis field is immutable. It can only be set for containers.",
+							Description: "Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.\n\nThis field depends on the DynamicResourceAllocation feature gate.\n\nThis field is immutable. It can only be set for containers.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -14558,11 +15059,11 @@ func schema_k8sio_api_core_v1_ScopedResourceSelectorRequirement(ref common.Refer
 				Properties: map[string]spec.Schema{
 					"scopeName": {
 						SchemaProps: spec.SchemaProps{
-							Description: "The name of the scope that the selector applies to.\n\nPossible enum values:\n - `\"BestEffort\"` Match all pod objects that have best effort quality of service\n - `\"CrossNamespacePodAffinity\"` Match all pod objects that have cross-namespace pod (anti)affinity mentioned.\n - `\"NotBestEffort\"` Match all pod objects that do not have best effort quality of service\n - `\"NotTerminating\"` Match all pod objects where spec.activeDeadlineSeconds is nil\n - `\"PriorityClass\"` Match all pod objects that have priority class mentioned\n - `\"Terminating\"` Match all pod objects where spec.activeDeadlineSeconds >=0",
+							Description: "The name of the scope that the selector applies to.\n\nPossible enum values:\n - `\"BestEffort\"` Match all pod objects that have best effort quality of service\n - `\"CrossNamespacePodAffinity\"` Match all pod objects that have cross-namespace pod (anti)affinity mentioned.\n - `\"NotBestEffort\"` Match all pod objects that do not have best effort quality of service\n - `\"NotTerminating\"` Match all pod objects where spec.activeDeadlineSeconds is nil\n - `\"PriorityClass\"` Match all pod objects that have priority class mentioned\n - `\"Terminating\"` Match all pod objects where spec.activeDeadlineSeconds >=0\n - `\"VolumeAttributesClass\"` Match all pvc objects that have volume attributes class mentioned.",
 							Default:     "",
 							Type:        []string{"string"},
 							Format:      "",
-							Enum:        []interface{}{"BestEffort", "CrossNamespacePodAffinity", "NotBestEffort", "NotTerminating", "PriorityClass", "Terminating"},
+							Enum:        []interface{}{"BestEffort", "CrossNamespacePodAffinity", "NotBestEffort", "NotTerminating", "PriorityClass", "Terminating", "VolumeAttributesClass"},
 						},
 					},
 					"operator": {
@@ -15711,7 +16212,7 @@ func schema_k8sio_api_core_v1_ServiceSpec(ref common.ReferenceCallback) common.O
 					},
 					"trafficDistribution": {
 						SchemaProps: spec.SchemaProps{
-							Description: "TrafficDistribution offers a way to express preferences for how traffic is distributed to Service endpoints. Implementations can use this field as a hint, but are not required to guarantee strict adherence. If the field is not set, the implementation will apply its default routing strategy. If set to \"PreferClose\", implementations should prioritize endpoints that are topologically close (e.g., same zone). This is a beta field and requires enabling ServiceTrafficDistribution feature.",
+							Description: "TrafficDistribution offers a way to express preferences for how traffic is distributed to Service endpoints. Implementations can use this field as a hint, but are not required to guarantee strict adherence. If the field is not set, the implementation will apply its default routing strategy. If set to \"PreferClose\", implementations should prioritize endpoints that are in the same zone.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -16003,7 +16504,7 @@ func schema_k8sio_api_core_v1_Taint(ref common.ReferenceCallback) common.OpenAPI
 					},
 					"timeAdded": {
 						SchemaProps: spec.SchemaProps{
-							Description: "TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.",
+							Description: "TimeAdded represents the time at which the taint was added.",
 							Ref:         ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"),
 						},
 					},
@@ -16194,7 +16695,7 @@ func schema_k8sio_api_core_v1_TopologySpreadConstraint(ref common.ReferenceCallb
 					},
 					"nodeAffinityPolicy": {
 						SchemaProps: spec.SchemaProps{
-							Description: "NodeAffinityPolicy indicates how we will treat Pod's nodeAffinity/nodeSelector when calculating pod topology spread skew. Options are: - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations. - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.\n\nIf this value is nil, the behavior is equivalent to the Honor policy. This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.\n\nPossible enum values:\n - `\"Honor\"` means use this scheduling directive when calculating pod topology spread skew.\n - `\"Ignore\"` means ignore this scheduling directive when calculating pod topology spread skew.",
+							Description: "NodeAffinityPolicy indicates how we will treat Pod's nodeAffinity/nodeSelector when calculating pod topology spread skew. Options are: - Honor: only nodes matching nodeAffinity/nodeSelector are included in the calculations. - Ignore: nodeAffinity/nodeSelector are ignored. All nodes are included in the calculations.\n\nIf this value is nil, the behavior is equivalent to the Honor policy.\n\nPossible enum values:\n - `\"Honor\"` means use this scheduling directive when calculating pod topology spread skew.\n - `\"Ignore\"` means ignore this scheduling directive when calculating pod topology spread skew.",
 							Type:        []string{"string"},
 							Format:      "",
 							Enum:        []interface{}{"Honor", "Ignore"},
@@ -16202,7 +16703,7 @@ func schema_k8sio_api_core_v1_TopologySpreadConstraint(ref common.ReferenceCallb
 					},
 					"nodeTaintsPolicy": {
 						SchemaProps: spec.SchemaProps{
-							Description: "NodeTaintsPolicy indicates how we will treat node taints when calculating pod topology spread skew. Options are: - Honor: nodes without taints, along with tainted nodes for which the incoming pod has a toleration, are included. - Ignore: node taints are ignored. All nodes are included.\n\nIf this value is nil, the behavior is equivalent to the Ignore policy. This is a beta-level feature default enabled by the NodeInclusionPolicyInPodTopologySpread feature flag.\n\nPossible enum values:\n - `\"Honor\"` means use this scheduling directive when calculating pod topology spread skew.\n - `\"Ignore\"` means ignore this scheduling directive when calculating pod topology spread skew.",
+							Description: "NodeTaintsPolicy indicates how we will treat node taints when calculating pod topology spread skew. Options are: - Honor: nodes without taints, along with tainted nodes for which the incoming pod has a toleration, are included. - Ignore: node taints are ignored. All nodes are included.\n\nIf this value is nil, the behavior is equivalent to the Ignore policy.\n\nPossible enum values:\n - `\"Honor\"` means use this scheduling directive when calculating pod topology spread skew.\n - `\"Ignore\"` means ignore this scheduling directive when calculating pod topology spread skew.",
 							Type:        []string{"string"},
 							Format:      "",
 							Enum:        []interface{}{"Honor", "Ignore"},
@@ -16382,13 +16883,13 @@ func schema_k8sio_api_core_v1_Volume(ref common.ReferenceCallback) common.OpenAP
 					},
 					"iscsi": {
 						SchemaProps: spec.SchemaProps{
-							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",
+							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://kubernetes.io/docs/concepts/storage/volumes/#iscsi",
 							Ref:         ref("k8s.io/api/core/v1.ISCSIVolumeSource"),
 						},
 					},
 					"glusterfs": {
 						SchemaProps: spec.SchemaProps{
-							Description: "glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. Deprecated: Glusterfs is deprecated and the in-tree glusterfs type is no longer supported. More info: https://examples.k8s.io/volumes/glusterfs/README.md",
+							Description: "glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. Deprecated: Glusterfs is deprecated and the in-tree glusterfs type is no longer supported.",
 							Ref:         ref("k8s.io/api/core/v1.GlusterfsVolumeSource"),
 						},
 					},
@@ -16400,7 +16901,7 @@ func schema_k8sio_api_core_v1_Volume(ref common.ReferenceCallback) common.OpenAP
 					},
 					"rbd": {
 						SchemaProps: spec.SchemaProps{
-							Description: "rbd represents a Rados Block Device mount on the host that shares a pod's lifetime. Deprecated: RBD is deprecated and the in-tree rbd type is no longer supported. More info: https://examples.k8s.io/volumes/rbd/README.md",
+							Description: "rbd represents a Rados Block Device mount on the host that shares a pod's lifetime. Deprecated: RBD is deprecated and the in-tree rbd type is no longer supported.",
 							Ref:         ref("k8s.io/api/core/v1.RBDVolumeSource"),
 						},
 					},
@@ -16514,7 +17015,7 @@ func schema_k8sio_api_core_v1_Volume(ref common.ReferenceCallback) common.OpenAP
 					},
 					"image": {
 						SchemaProps: spec.SchemaProps{
-							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 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 pull fails.\n\nThe volume gets re-resolved if the pod gets deleted and recreated, which means that new remote content will become available on pod recreation. A failure to resolve or pull the image during pod startup will block containers from starting and may add significant latency. Failures will be retried using normal volume backoff and will be reported on the pod reason and message. The types of objects that may be mounted by this volume are defined by the container runtime implementation on a host machine and at minimum must include all valid types supported by the container image field. The OCI object gets mounted in a single directory (spec.containers[*].volumeMounts.mountPath) by merging the manifest layers in the same way as for container images. The volume will be mounted read-only (ro) and non-executable files (noexec). Sub path mounts for containers are not supported (spec.containers[*].volumeMounts.subpath). The field spec.securityContext.fsGroupChangePolicy has no effect on this volume type.",
+							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 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 pull fails.\n\nThe volume gets re-resolved if the pod gets deleted and recreated, which means that new remote content will become available on pod recreation. A failure to resolve or pull the image during pod startup will block containers from starting and may add significant latency. Failures will be retried using normal volume backoff and will be reported on the pod reason and message. The types of objects that may be mounted by this volume are defined by the container runtime implementation on a host machine and at minimum must include all valid types supported by the container image field. The OCI object gets mounted in a single directory (spec.containers[*].volumeMounts.mountPath) by merging the manifest layers in the same way as for container images. The volume will be mounted read-only (ro) and non-executable files (noexec). Sub path mounts for containers are not supported (spec.containers[*].volumeMounts.subpath) before 1.33. The field spec.securityContext.fsGroupChangePolicy has no effect on this volume type.",
 							Ref:         ref("k8s.io/api/core/v1.ImageVolumeSource"),
 						},
 					},
@@ -16725,11 +17226,17 @@ func schema_k8sio_api_core_v1_VolumeProjection(ref common.ReferenceCallback) com
 							Ref:         ref("k8s.io/api/core/v1.ClusterTrustBundleProjection"),
 						},
 					},
+					"podCertificate": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Projects an auto-rotating credential bundle (private key and certificate chain) that the pod can use either as a TLS client or server.\n\nKubelet generates a private key and uses it to send a PodCertificateRequest to the named signer.  Once the signer approves the request and issues a certificate chain, Kubelet writes the key and certificate chain to the pod filesystem.  The pod does not start until certificates have been issued for each podCertificate projected volume source in its spec.\n\nKubelet will begin trying to rotate the certificate at the time indicated by the signer using the PodCertificateRequest.Status.BeginRefreshAt timestamp.\n\nKubelet can write a single file, indicated by the credentialBundlePath field, or separate files, indicated by the keyPath and certificateChainPath fields.\n\nThe credential bundle is a single file in PEM format.  The first PEM entry is the private key (in PKCS#8 format), and the remaining PEM entries are the certificate chain issued by the signer (typically, signers will return their certificate chain in leaf-to-root order).\n\nPrefer using the credential bundle format, since your application code can read it atomically.  If you use keyPath and certificateChainPath, your application must make two separate file reads. If these coincide with a certificate rotation, it is possible that the private key and leaf certificate you read may not correspond to each other.  Your application will need to check for this condition, and re-read until they are consistent.\n\nThe named signer controls chooses the format of the certificate it issues; consult the signer implementation's documentation to learn how to use the certificates it issues.",
+							Ref:         ref("k8s.io/api/core/v1.PodCertificateProjection"),
+						},
+					},
 				},
 			},
 		},
 		Dependencies: []string{
-			"k8s.io/api/core/v1.ClusterTrustBundleProjection", "k8s.io/api/core/v1.ConfigMapProjection", "k8s.io/api/core/v1.DownwardAPIProjection", "k8s.io/api/core/v1.SecretProjection", "k8s.io/api/core/v1.ServiceAccountTokenProjection"},
+			"k8s.io/api/core/v1.ClusterTrustBundleProjection", "k8s.io/api/core/v1.ConfigMapProjection", "k8s.io/api/core/v1.DownwardAPIProjection", "k8s.io/api/core/v1.PodCertificateProjection", "k8s.io/api/core/v1.SecretProjection", "k8s.io/api/core/v1.ServiceAccountTokenProjection"},
 	}
 }
 
@@ -16827,13 +17334,13 @@ func schema_k8sio_api_core_v1_VolumeSource(ref common.ReferenceCallback) common.
 					},
 					"iscsi": {
 						SchemaProps: spec.SchemaProps{
-							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",
+							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://kubernetes.io/docs/concepts/storage/volumes/#iscsi",
 							Ref:         ref("k8s.io/api/core/v1.ISCSIVolumeSource"),
 						},
 					},
 					"glusterfs": {
 						SchemaProps: spec.SchemaProps{
-							Description: "glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. Deprecated: Glusterfs is deprecated and the in-tree glusterfs type is no longer supported. More info: https://examples.k8s.io/volumes/glusterfs/README.md",
+							Description: "glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. Deprecated: Glusterfs is deprecated and the in-tree glusterfs type is no longer supported.",
 							Ref:         ref("k8s.io/api/core/v1.GlusterfsVolumeSource"),
 						},
 					},
@@ -16845,7 +17352,7 @@ func schema_k8sio_api_core_v1_VolumeSource(ref common.ReferenceCallback) common.
 					},
 					"rbd": {
 						SchemaProps: spec.SchemaProps{
-							Description: "rbd represents a Rados Block Device mount on the host that shares a pod's lifetime. Deprecated: RBD is deprecated and the in-tree rbd type is no longer supported. More info: https://examples.k8s.io/volumes/rbd/README.md",
+							Description: "rbd represents a Rados Block Device mount on the host that shares a pod's lifetime. Deprecated: RBD is deprecated and the in-tree rbd type is no longer supported.",
 							Ref:         ref("k8s.io/api/core/v1.RBDVolumeSource"),
 						},
 					},
@@ -16959,7 +17466,7 @@ func schema_k8sio_api_core_v1_VolumeSource(ref common.ReferenceCallback) common.
 					},
 					"image": {
 						SchemaProps: spec.SchemaProps{
-							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 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 pull fails.\n\nThe volume gets re-resolved if the pod gets deleted and recreated, which means that new remote content will become available on pod recreation. A failure to resolve or pull the image during pod startup will block containers from starting and may add significant latency. Failures will be retried using normal volume backoff and will be reported on the pod reason and message. The types of objects that may be mounted by this volume are defined by the container runtime implementation on a host machine and at minimum must include all valid types supported by the container image field. The OCI object gets mounted in a single directory (spec.containers[*].volumeMounts.mountPath) by merging the manifest layers in the same way as for container images. The volume will be mounted read-only (ro) and non-executable files (noexec). Sub path mounts for containers are not supported (spec.containers[*].volumeMounts.subpath). The field spec.securityContext.fsGroupChangePolicy has no effect on this volume type.",
+							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 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 pull fails.\n\nThe volume gets re-resolved if the pod gets deleted and recreated, which means that new remote content will become available on pod recreation. A failure to resolve or pull the image during pod startup will block containers from starting and may add significant latency. Failures will be retried using normal volume backoff and will be reported on the pod reason and message. The types of objects that may be mounted by this volume are defined by the container runtime implementation on a host machine and at minimum must include all valid types supported by the container image field. The OCI object gets mounted in a single directory (spec.containers[*].volumeMounts.mountPath) by merging the manifest layers in the same way as for container images. The volume will be mounted read-only (ro) and non-executable files (noexec). Sub path mounts for containers are not supported (spec.containers[*].volumeMounts.subpath) before 1.33. The field spec.securityContext.fsGroupChangePolicy has no effect on this volume type.",
 							Ref:         ref("k8s.io/api/core/v1.ImageVolumeSource"),
 						},
 					},
@@ -19785,7 +20292,7 @@ func schema_jobset_api_jobset_v1alpha2_FailurePolicyRule(ref common.ReferenceCal
 	return common.OpenAPIDefinition{
 		Schema: spec.Schema{
 			SchemaProps: spec.SchemaProps{
-				Description: "FailurePolicyRule defines a FailurePolicyAction to be executed if a child job fails due to a reason listed in OnJobFailureReasons.",
+				Description: "FailurePolicyRule defines a FailurePolicyAction to be executed if a child job fails due to a reason listed in OnJobFailureReasons and a message pattern listed in OnJobFailureMessagePatterns. The rule must match both the job failure reason and the job failure message. The rules are evaluated in order and the first matching rule is executed.",
 				Type:        []string{"object"},
 				Properties: map[string]spec.Schema{
 					"name": {
@@ -19806,7 +20313,22 @@ func schema_jobset_api_jobset_v1alpha2_FailurePolicyRule(ref common.ReferenceCal
 					},
 					"onJobFailureReasons": {
 						SchemaProps: spec.SchemaProps{
-							Description: "The requirement on the job failure reasons. The requirement is satisfied if at least one reason matches the list. The rules are evaluated in order, and the first matching rule is executed. An empty list applies the rule to any job failure reason.",
+							Description: "The requirement on the job failure reasons. The requirement is satisfied if at least one reason matches the list. An empty list matches any job failure reason.",
+							Type:        []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: "",
+										Type:    []string{"string"},
+										Format:  "",
+									},
+								},
+							},
+						},
+					},
+					"onJobFailureMessagePatterns": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The requirement on the job failure message. The requirement is satisfied if at least one pattern (regex) matches the job failure message. An empty list matches any job failure message. The syntax of the regular expressions accepted is the same general syntax used by Perl, Python, and other languages. More precisely, it is the syntax accepted by RE2 and described at https://golang.org/s/re2syntax, except for \\C. For an overview of the syntax, see https://pkg.go.dev/regexp/syntax.",
 							Type:        []string{"array"},
 							Items: &spec.SchemaOrArray{
 								Schema: &spec.Schema{
@@ -20061,6 +20583,7 @@ func schema_jobset_api_jobset_v1alpha2_JobSetStatus(ref common.ReferenceCallback
 					"restarts": {
 						SchemaProps: spec.SchemaProps{
 							Description: "Restarts tracks the number of times the JobSet has restarted (i.e. recreated in case of RecreateAll policy).",
+							Default:     0,
 							Type:        []string{"integer"},
 							Format:      "int32",
 						},
@@ -20074,7 +20597,7 @@ func schema_jobset_api_jobset_v1alpha2_JobSetStatus(ref common.ReferenceCallback
 					},
 					"terminalState": {
 						SchemaProps: spec.SchemaProps{
-							Description: "TerminalState the state of the JobSet when it finishes execution. It can be either Complete or Failed. Otherwise, it is empty by default.",
+							Description: "TerminalState the state of the JobSet when it finishes execution. It can be either Completed or Failed. Otherwise, it is empty by default.",
 							Type:        []string{"string"},
 							Format:      "",
 						},
@@ -20156,6 +20679,13 @@ func schema_jobset_api_jobset_v1alpha2_ReplicatedJob(ref common.ReferenceCallbac
 							Format:      "",
 						},
 					},
+					"groupName": {
+						SchemaProps: spec.SchemaProps{
+							Description: "GroupName defines the name of the group this ReplicatedJob belongs to. Defaults to \"default\"",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
 					"template": {
 						SchemaProps: spec.SchemaProps{
 							Description: "Template defines the template of the Job that will be created.",
@@ -20324,3 +20854,815 @@ func schema_jobset_api_jobset_v1alpha2_SuccessPolicy(ref common.ReferenceCallbac
 		},
 	}
 }
+
+func schema_pkg_apis_scheduling_v1beta1_Affinity(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "Affinity is a group of affinity scheduling rules.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"nodeGroupAffinity": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Describes nodegroup affinity scheduling rules for the queue(e.g. putting pods of the queue in the nodes of the nodegroup)",
+							Ref:         ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.NodeGroupAffinity"),
+						},
+					},
+					"nodeGroupAntiAffinity": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Describes nodegroup anti-affinity scheduling rules for the queue(e.g. avoid putting pods of the queue in the nodes of the nodegroup).",
+							Ref:         ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.NodeGroupAntiAffinity"),
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"volcano.sh/apis/pkg/apis/scheduling/v1beta1.NodeGroupAffinity", "volcano.sh/apis/pkg/apis/scheduling/v1beta1.NodeGroupAntiAffinity"},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_Cluster(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "CluterSpec represents the template of Cluster",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"name": {
+						SchemaProps: spec.SchemaProps{
+							Type:   []string{"string"},
+							Format: "",
+						},
+					},
+					"weight": {
+						SchemaProps: spec.SchemaProps{
+							Type:   []string{"integer"},
+							Format: "int32",
+						},
+					},
+					"capacity": {
+						SchemaProps: spec.SchemaProps{
+							Type: []string{"object"},
+							AdditionalProperties: &spec.SchemaOrBool{
+								Allows: true,
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"),
+									},
+								},
+							},
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/api/resource.Quantity"},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_Guarantee(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "Guarantee represents configuration of queue resource reservation",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"resource": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The amount of cluster resource reserved for queue. Just set either `percentage` or `resource`",
+							Type:        []string{"object"},
+							AdditionalProperties: &spec.SchemaOrBool{
+								Allows: true,
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"),
+									},
+								},
+							},
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/api/resource.Quantity"},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_NetworkTopologySpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Type: []string{"object"},
+				Properties: map[string]spec.Schema{
+					"mode": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Mode specifies the mode of the network topology constrain.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"highestTierAllowed": {
+						SchemaProps: spec.SchemaProps{
+							Description: "HighestTierAllowed specifies the highest tier that a job allowed to cross when scheduling.",
+							Type:        []string{"integer"},
+							Format:      "int32",
+						},
+					},
+				},
+			},
+		},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_NodeGroupAffinity(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Type: []string{"object"},
+				Properties: map[string]spec.Schema{
+					"requiredDuringSchedulingIgnoredDuringExecution": {
+						SchemaProps: spec.SchemaProps{
+							Type: []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: "",
+										Type:    []string{"string"},
+										Format:  "",
+									},
+								},
+							},
+						},
+					},
+					"preferredDuringSchedulingIgnoredDuringExecution": {
+						SchemaProps: spec.SchemaProps{
+							Type: []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: "",
+										Type:    []string{"string"},
+										Format:  "",
+									},
+								},
+							},
+						},
+					},
+				},
+			},
+		},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_NodeGroupAntiAffinity(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Type: []string{"object"},
+				Properties: map[string]spec.Schema{
+					"requiredDuringSchedulingIgnoredDuringExecution": {
+						SchemaProps: spec.SchemaProps{
+							Type: []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: "",
+										Type:    []string{"string"},
+										Format:  "",
+									},
+								},
+							},
+						},
+					},
+					"preferredDuringSchedulingIgnoredDuringExecution": {
+						SchemaProps: spec.SchemaProps{
+							Type: []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: "",
+										Type:    []string{"string"},
+										Format:  "",
+									},
+								},
+							},
+						},
+					},
+				},
+			},
+		},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_PodGroup(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "PodGroup is a collection of Pod; used for batch workload.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"kind": {
+						SchemaProps: spec.SchemaProps{
+							Description: "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. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"apiVersion": {
+						SchemaProps: spec.SchemaProps{
+							Description: "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. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"metadata": {
+						SchemaProps: spec.SchemaProps{
+							Default: map[string]interface{}{},
+							Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
+						},
+					},
+					"spec": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Specification of the desired behavior of the pod group. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status",
+							Default:     map[string]interface{}{},
+							Ref:         ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.PodGroupSpec"),
+						},
+					},
+					"status": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Status represents the current information about a pod group. This data may not be up to date.",
+							Default:     map[string]interface{}{},
+							Ref:         ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.PodGroupStatus"),
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "volcano.sh/apis/pkg/apis/scheduling/v1beta1.PodGroupSpec", "volcano.sh/apis/pkg/apis/scheduling/v1beta1.PodGroupStatus"},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_PodGroupCondition(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "PodGroupCondition contains details for the current state of this pod group.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"type": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Type is the type of the condition",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"status": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Status is the status of the condition.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"transitionID": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The ID of condition transition.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"lastTransitionTime": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Last time the phase transitioned from another to current phase.",
+							Ref:         ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"),
+						},
+					},
+					"reason": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Unique, one-word, CamelCase reason for the phase's last transition.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"message": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Human-readable message indicating details about last transition.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/apis/meta/v1.Time"},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_PodGroupList(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "PodGroupList is a collection of pod groups.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"kind": {
+						SchemaProps: spec.SchemaProps{
+							Description: "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. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"apiVersion": {
+						SchemaProps: spec.SchemaProps{
+							Description: "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. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"metadata": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata",
+							Default:     map[string]interface{}{},
+							Ref:         ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"),
+						},
+					},
+					"items": {
+						SchemaProps: spec.SchemaProps{
+							Description: "items is the list of PodGroup",
+							Type:        []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: map[string]interface{}{},
+										Ref:     ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.PodGroup"),
+									},
+								},
+							},
+						},
+					},
+				},
+				Required: []string{"items"},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "volcano.sh/apis/pkg/apis/scheduling/v1beta1.PodGroup"},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_PodGroupSpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "PodGroupSpec represents the template of a pod group.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"minMember": {
+						SchemaProps: spec.SchemaProps{
+							Description: "MinMember defines the minimal number of members/tasks to run the pod group; if there's not enough resources to start all tasks, the scheduler will not start anyone.",
+							Type:        []string{"integer"},
+							Format:      "int32",
+						},
+					},
+					"minTaskMember": {
+						SchemaProps: spec.SchemaProps{
+							Description: "MinTaskMember defines the minimal number of pods to run each task in the pod group; if there's not enough resources to start each task, the scheduler will not start anyone.",
+							Type:        []string{"object"},
+							AdditionalProperties: &spec.SchemaOrBool{
+								Allows: true,
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: 0,
+										Type:    []string{"integer"},
+										Format:  "int32",
+									},
+								},
+							},
+						},
+					},
+					"queue": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Queue defines the queue to allocate resource for PodGroup; if queue does not exist, the PodGroup will not be scheduled. Defaults to `default` Queue with the lowest weight.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"priorityClassName": {
+						SchemaProps: spec.SchemaProps{
+							Description: "If specified, indicates the PodGroup's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the PodGroup priority will be default or zero if there is no default.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"minResources": {
+						SchemaProps: spec.SchemaProps{
+							Description: "MinResources defines the minimal resource of members/tasks to run the pod group; if there's not enough resources to start all tasks, the scheduler will not start anyone.",
+							Type:        []string{"object"},
+							AdditionalProperties: &spec.SchemaOrBool{
+								Allows: true,
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"),
+									},
+								},
+							},
+						},
+					},
+					"networkTopology": {
+						SchemaProps: spec.SchemaProps{
+							Description: "NetworkTopology defines the NetworkTopology config, this field works in conjunction with network topology feature and hyperNode CRD.",
+							Ref:         ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.NetworkTopologySpec"),
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/api/resource.Quantity", "volcano.sh/apis/pkg/apis/scheduling/v1beta1.NetworkTopologySpec"},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_PodGroupStatus(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "PodGroupStatus represents the current state of a pod group.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"phase": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Current phase of PodGroup.",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"conditions": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The conditions of PodGroup.",
+							Type:        []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: map[string]interface{}{},
+										Ref:     ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.PodGroupCondition"),
+									},
+								},
+							},
+						},
+					},
+					"running": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The number of actively running pods.",
+							Type:        []string{"integer"},
+							Format:      "int32",
+						},
+					},
+					"succeeded": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The number of pods which reached phase Succeeded.",
+							Type:        []string{"integer"},
+							Format:      "int32",
+						},
+					},
+					"failed": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The number of pods which reached phase Failed.",
+							Type:        []string{"integer"},
+							Format:      "int32",
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"volcano.sh/apis/pkg/apis/scheduling/v1beta1.PodGroupCondition"},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_Queue(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "Queue is a queue of PodGroup.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"kind": {
+						SchemaProps: spec.SchemaProps{
+							Description: "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. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"apiVersion": {
+						SchemaProps: spec.SchemaProps{
+							Description: "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. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"metadata": {
+						SchemaProps: spec.SchemaProps{
+							Default: map[string]interface{}{},
+							Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
+						},
+					},
+					"spec": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Specification of the desired behavior of the queue. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status",
+							Default:     map[string]interface{}{},
+							Ref:         ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.QueueSpec"),
+						},
+					},
+					"status": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The status of queue.",
+							Default:     map[string]interface{}{},
+							Ref:         ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.QueueStatus"),
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "volcano.sh/apis/pkg/apis/scheduling/v1beta1.QueueSpec", "volcano.sh/apis/pkg/apis/scheduling/v1beta1.QueueStatus"},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_QueueList(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "QueueList is a collection of queues.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"kind": {
+						SchemaProps: spec.SchemaProps{
+							Description: "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. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"apiVersion": {
+						SchemaProps: spec.SchemaProps{
+							Description: "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. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"metadata": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata",
+							Default:     map[string]interface{}{},
+							Ref:         ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"),
+						},
+					},
+					"items": {
+						SchemaProps: spec.SchemaProps{
+							Description: "items is the list of PodGroup",
+							Type:        []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: map[string]interface{}{},
+										Ref:     ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.Queue"),
+									},
+								},
+							},
+						},
+					},
+				},
+				Required: []string{"items"},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "volcano.sh/apis/pkg/apis/scheduling/v1beta1.Queue"},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_QueueSpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "QueueSpec represents the template of Queue.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"weight": {
+						SchemaProps: spec.SchemaProps{
+							Type:   []string{"integer"},
+							Format: "int32",
+						},
+					},
+					"capability": {
+						SchemaProps: spec.SchemaProps{
+							Type: []string{"object"},
+							AdditionalProperties: &spec.SchemaOrBool{
+								Allows: true,
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"),
+									},
+								},
+							},
+						},
+					},
+					"reclaimable": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Reclaimable indicate whether the queue can be reclaimed by other queue",
+							Type:        []string{"boolean"},
+							Format:      "",
+						},
+					},
+					"extendClusters": {
+						SchemaProps: spec.SchemaProps{
+							Description: "extendCluster indicate the jobs in this Queue will be dispatched to these clusters.",
+							Type:        []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: map[string]interface{}{},
+										Ref:     ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.Cluster"),
+									},
+								},
+							},
+						},
+					},
+					"guarantee": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Guarantee indicate configuration about resource reservation",
+							Default:     map[string]interface{}{},
+							Ref:         ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.Guarantee"),
+						},
+					},
+					"affinity": {
+						SchemaProps: spec.SchemaProps{
+							Description: "If specified, the pod owned by the queue will be scheduled with constraint",
+							Ref:         ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.Affinity"),
+						},
+					},
+					"type": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Type define the type of queue",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"parent": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Parent define the parent of queue",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"deserved": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The amount of resources configured by the user. This part of resource can be shared with other queues and reclaimed back.",
+							Type:        []string{"object"},
+							AdditionalProperties: &spec.SchemaOrBool{
+								Allows: true,
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"),
+									},
+								},
+							},
+						},
+					},
+					"priority": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Priority define the priority of queue. Higher values are prioritized for scheduling and considered later during reclamation.",
+							Type:        []string{"integer"},
+							Format:      "int32",
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/api/resource.Quantity", "volcano.sh/apis/pkg/apis/scheduling/v1beta1.Affinity", "volcano.sh/apis/pkg/apis/scheduling/v1beta1.Cluster", "volcano.sh/apis/pkg/apis/scheduling/v1beta1.Guarantee"},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_QueueStatus(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "QueueStatus represents the status of Queue.",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"state": {
+						SchemaProps: spec.SchemaProps{
+							Description: "State is state of queue",
+							Type:        []string{"string"},
+							Format:      "",
+						},
+					},
+					"unknown": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The number of 'Unknown' PodGroup in this queue.",
+							Type:        []string{"integer"},
+							Format:      "int32",
+						},
+					},
+					"pending": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The number of 'Pending' PodGroup in this queue.",
+							Type:        []string{"integer"},
+							Format:      "int32",
+						},
+					},
+					"running": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The number of 'Running' PodGroup in this queue.",
+							Type:        []string{"integer"},
+							Format:      "int32",
+						},
+					},
+					"inqueue": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The number of `Inqueue` PodGroup in this queue.",
+							Type:        []string{"integer"},
+							Format:      "int32",
+						},
+					},
+					"completed": {
+						SchemaProps: spec.SchemaProps{
+							Description: "The number of `Completed` PodGroup in this queue.",
+							Type:        []string{"integer"},
+							Format:      "int32",
+						},
+					},
+					"reservation": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Reservation is the profile of resource reservation for queue",
+							Default:     map[string]interface{}{},
+							Ref:         ref("volcano.sh/apis/pkg/apis/scheduling/v1beta1.Reservation"),
+						},
+					},
+					"allocated": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Allocated is allocated resources in queue",
+							Type:        []string{"object"},
+							AdditionalProperties: &spec.SchemaOrBool{
+								Allows: true,
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"),
+									},
+								},
+							},
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/api/resource.Quantity", "volcano.sh/apis/pkg/apis/scheduling/v1beta1.Reservation"},
+	}
+}
+
+func schema_pkg_apis_scheduling_v1beta1_Reservation(ref common.ReferenceCallback) common.OpenAPIDefinition {
+	return common.OpenAPIDefinition{
+		Schema: spec.Schema{
+			SchemaProps: spec.SchemaProps{
+				Description: "Reservation represents current condition about resource reservation",
+				Type:        []string{"object"},
+				Properties: map[string]spec.Schema{
+					"nodes": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Nodes are Locked nodes for queue",
+							Type:        []string{"array"},
+							Items: &spec.SchemaOrArray{
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Default: "",
+										Type:    []string{"string"},
+										Format:  "",
+									},
+								},
+							},
+						},
+					},
+					"resource": {
+						SchemaProps: spec.SchemaProps{
+							Description: "Resource is a list of total idle resource in locked nodes.",
+							Type:        []string{"object"},
+							AdditionalProperties: &spec.SchemaOrBool{
+								Allows: true,
+								Schema: &spec.Schema{
+									SchemaProps: spec.SchemaProps{
+										Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"),
+									},
+								},
+							},
+						},
+					},
+				},
+			},
+		},
+		Dependencies: []string{
+			"k8s.io/apimachinery/pkg/api/resource.Quantity"},
+	}
+}
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/apply/apply.go b/vendor/github.com/kubeflow/trainer/v2/pkg/apply/apply.go
index 4f4655fcb..933dba354 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/apply/apply.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/apply/apply.go
@@ -34,12 +34,6 @@ var (
 	errorRequestedFieldPathNotFound = errors.New("requested field path not found")
 )
 
-func UpsertEnvVar(envVars *[]corev1ac.EnvVarApplyConfiguration, envVar ...corev1ac.EnvVarApplyConfiguration) {
-	for _, e := range envVar {
-		upsert(envVars, e, byEnvVarName)
-	}
-}
-
 func UpsertEnvVars(envVars *[]corev1ac.EnvVarApplyConfiguration, upEnvVars ...corev1ac.EnvVarApplyConfiguration) {
 	for _, e := range upEnvVars {
 		upsert(envVars, e, byEnvVarName)
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/constants/constants.go b/vendor/github.com/kubeflow/trainer/v2/pkg/constants/constants.go
index b2523cdd0..19b4a1dae 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/constants/constants.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/constants/constants.go
@@ -24,6 +24,15 @@ const (
 	// trainer.kubeflow.org/trainjob-ancestor-step: trainer              - trainJob.spec.trainer
 	LabelTrainJobAncestor string = "trainer.kubeflow.org/trainjob-ancestor-step"
 
+	// LabelSupport indicates support status for a runtime, e.g. "deprecated".
+	LabelSupport string = "trainer.kubeflow.org/support"
+
+	// SupportDeprecated indicates the runtime is deprecated when used with LabelSupport.
+	SupportDeprecated string = "deprecated"
+
+	// RuntimeDeprecationPolicyURL is the URL to the runtime deprecation policy documentation.
+	RuntimeDeprecationPolicyURL string = "https://www.kubeflow.org/docs/components/trainer/operator-guides/runtime/#runtime-deprecation-policy"
+
 	// DatasetInitializer is the name of the Job, volume mount, container, and label value for the dataset initializer.
 	DatasetInitializer string = "dataset-initializer"
 
@@ -146,12 +155,42 @@ const (
 	// TorchTuneFullFinetuneMultiNodesConfigSuffix is the config suffix for the multi node distributed full finetune.
 	TorchTuneFullFinetuneMultiNodesConfigSuffix string = "_full_multinode"
 
+	// TorchTuneLoRAFinetuneSingleDevice Recipe is the recipe for the single device LoRA finetune.
+	TorchTuneLoRAFinetuneSingleDevice string = "lora_finetune_single_device"
+
+	// TorchTuneLoRAFinetuneSingleDeviceConfigSuffix is the config suffix for the single device LoRA finetune.
+	TorchTuneLoRAFinetuneSingleDeviceConfigSuffix string = "_lora_single_device"
+
+	// TorchTuneQLoRAFinetuneSingleDeviceConfigSuffix is the config suffix for the single device QLoRA finetune.
+	TorchTuneQLoRAFinetuneSingleDeviceConfigSuffix string = "_qlora_single_device"
+
+	// TorchTuneLoRAFinetuneDistributed Recipe is the recipe for the distributed LoRA finetune.
+	TorchTuneLoRAFinetuneDistributed string = "lora_finetune_distributed"
+
+	// TorchTuneLoRAFinetuneDistributedConfigSuffix is the config suffix for the distributed LoRA finetune.
+	TorchTuneLoRAFinetuneDistributedConfigSuffix string = "_lora"
+
+	// TorchTuneQLoRAFinetuneDistributedConfigSuffix is the config suffix for the distributed QLoRA finetune.
+	TorchTuneQLoRAFinetuneDistributedConfigSuffix string = "_qlora"
+
+	// TorchTuneLoraAttnModules is the config item name for the LoRA attention modules.
+	TorchTuneLoraAttnModules string = "model.lora_attn_modules"
+
+	// TorchTuneQuantizeBase is the config item name for the quantization base.
+	TorchTuneQuantizeBase string = "model.quantize_base"
+
+	// TorchTuneUseDora is the config item name for using DoRA.
+	TorchTuneUseDora string = "model.use_dora"
+
 	// TorchTuneModelOutputDir is the config item name for the model output directory.
 	TorchTuneModelOutputDir string = "output_dir"
 
 	// TorchTuneTokenizerPath is the config item name for the tokenizer path.
 	TorchTuneTokenizerPath string = "tokenizer.path"
 
+	// TorchTuneTokenizerMergeFile is the config item name for the tokenizer merge file.
+	TorchTuneTokenizerMergeFile string = "tokenizer.merges_file"
+
 	// TorchTuneCheckpointerDir is the config item name for the checkpointer directory.
 	TorchTuneCheckpointDir string = "checkpointer.checkpoint_dir"
 )
@@ -160,11 +199,14 @@ const (
 	// TORCHTUNE_MODEL_LLAMA3_2_1B is the model name for the Llama3.2 1B Instruct model.
 	TORCHTUNE_MODEL_LLAMA3_2_1B = "llama3_2/1B"
 
-	// TORCHTUNE_MODEL_LLAMA3_2_7B is the model name for the Llama3.2 7B Instruct model.
-	TORCHTUNE_MODEL_LLAMA3_2_7B = "llama3_2/7B"
+	// TORCHTUNE_MODEL_LLAMA3_2_3B is the model name for the Llama3.2 3B Instruct model.
+	TORCHTUNE_MODEL_LLAMA3_2_3B = "llama3_2/3B"
 
 	// TORCHTUNE_MODEL_LLAMA3_3_70B is the model name for the Llama3.3 70B Instruct model.
 	TORCHTUNE_MODEL_LLAMA3_3_70B = "llama3_3/70B"
+
+	// TORCHTUNE_MODEL_QWEN2_1.5B is the model name for the Qwen2.5 1.5B model.
+	TORCHTUNE_MODEL_QWEN2_5_1_5B = "qwen2_5/1.5B"
 )
 
 var (
@@ -178,11 +220,11 @@ var (
 	ResourceInUseFinalizer = fmt.Sprintf("%s/resource-in-use", trainer.GroupVersion.Group)
 
 	// TorchTuneSupportedPretrainedModels supported pretrained models for TorchTune Trainer.
-	TorchTuneSupportedPretrainedModels = sets.New(TORCHTUNE_MODEL_LLAMA3_2_1B, TORCHTUNE_MODEL_LLAMA3_2_7B, TORCHTUNE_MODEL_LLAMA3_3_70B)
+	TorchTuneSupportedPretrainedModels = sets.New(TORCHTUNE_MODEL_LLAMA3_2_1B, TORCHTUNE_MODEL_LLAMA3_2_3B, TORCHTUNE_MODEL_LLAMA3_3_70B, TORCHTUNE_MODEL_QWEN2_5_1_5B)
 
 	// TorchTuneEntrypoint is the entrypoint for the torchtune.
 	TorchTuneEntrypoint = []string{"tune", "run"}
 
 	// TorchTuneImmutableConfigs is the set of immutable configs for the TorchTune Trainer.
-	TorchTuneImmutableConfigs = sets.New(TorchTuneModelOutputDir, TorchTuneTokenizerPath, TorchTuneCheckpointDir)
+	TorchTuneImmutableConfigs = sets.New(TorchTuneModelOutputDir, TorchTuneTokenizerPath, TorchTuneCheckpointDir, TorchTuneTokenizerMergeFile)
 )
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/core/clustertrainingruntime.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/core/clustertrainingruntime.go
index 16214203e..2e3c653e7 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/core/clustertrainingruntime.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/core/clustertrainingruntime.go
@@ -21,14 +21,15 @@ import (
 	"errors"
 	"fmt"
 
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/runtime/schema"
 	"k8s.io/apimachinery/pkg/util/validation/field"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
 
 	trainer "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1"
+	"github.com/kubeflow/trainer/v2/pkg/constants"
 	"github.com/kubeflow/trainer/v2/pkg/runtime"
+	trainingruntime "github.com/kubeflow/trainer/v2/pkg/util/trainingruntime"
 )
 
 var (
@@ -71,8 +72,8 @@ func (r *ClusterTrainingRuntime) RuntimeInfo(
 	return r.TrainingRuntime.RuntimeInfo(trainJob, runtimeTemplateSpec, mlPolicy, podGroupPolicy)
 }
 
-func (r *ClusterTrainingRuntime) TerminalCondition(ctx context.Context, trainJob *trainer.TrainJob) (*metav1.Condition, error) {
-	return r.TrainingRuntime.TerminalCondition(ctx, trainJob)
+func (r *ClusterTrainingRuntime) TrainJobStatus(ctx context.Context, trainJob *trainer.TrainJob) (*trainer.TrainJobStatus, error) {
+	return r.TrainingRuntime.TrainJobStatus(ctx, trainJob)
 }
 
 func (r *ClusterTrainingRuntime) EventHandlerRegistrars() []runtime.ReconcilerBuilder {
@@ -89,6 +90,18 @@ func (r *ClusterTrainingRuntime) ValidateObjects(ctx context.Context, old, new *
 				fmt.Sprintf("%v: specified clusterTrainingRuntime must be created before the TrainJob is created", err)),
 		}
 	}
+	var warnings admission.Warnings
+	if trainingruntime.IsSupportDeprecated(clusterTrainingRuntime.Labels) {
+		warnings = append(warnings, fmt.Sprintf(
+			"Referenced ClusterTrainingRuntime \"%s\" is deprecated and will be removed in a future release of Kubeflow Trainer. See runtime deprecation policy: %s",
+			clusterTrainingRuntime.Name,
+			constants.RuntimeDeprecationPolicyURL,
+		))
+	}
 	info, _ := r.newRuntimeInfo(new, clusterTrainingRuntime.Spec.Template, clusterTrainingRuntime.Spec.MLPolicy, clusterTrainingRuntime.Spec.PodGroupPolicy)
-	return r.framework.RunCustomValidationPlugins(ctx, info, old, new)
+	fwWarnings, errs := r.framework.RunCustomValidationPlugins(ctx, info, old, new)
+	if len(fwWarnings) != 0 {
+		warnings = append(warnings, fwWarnings...)
+	}
+	return warnings, errs
 }
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/core/trainingruntime.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/core/trainingruntime.go
index 89ffac2a7..0f03d467e 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/core/trainingruntime.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/core/trainingruntime.go
@@ -138,7 +138,7 @@ func (r *TrainingRuntime) newRuntimeInfo(
 		// The JobSetTemplateSpec annotations are overridden by the TrainJob Annotations (.spec.annotations).
 		propagationAnnotations[k] = v
 	}
-	err := r.mergePodSpecOverrides(trainJob, &jobSetTemplateSpec)
+	err := r.mergePodTemplateOverrides(trainJob, &jobSetTemplateSpec)
 	if err != nil {
 		return nil, err
 	}
@@ -187,32 +187,51 @@ func (r *TrainingRuntime) newRuntimeInfo(
 	return runtime.NewInfo(opts...), nil
 }
 
-func (r *TrainingRuntime) mergePodSpecOverrides(trainJob *trainer.TrainJob, jobSetTemplateSpec *trainer.JobSetTemplateSpec) error {
-	for _, podSpecOverride := range trainJob.Spec.PodSpecOverrides {
+func (r *TrainingRuntime) mergePodTemplateOverrides(trainJob *trainer.TrainJob, jobSetTemplateSpec *trainer.JobSetTemplateSpec) error {
+	for _, podTemplateOverride := range trainJob.Spec.PodTemplateOverrides {
 		for i, job := range jobSetTemplateSpec.Spec.ReplicatedJobs {
-			if !slices.ContainsFunc(podSpecOverride.TargetJobs, func(targetJob trainer.PodSpecOverrideTargetJob) bool {
+			if !slices.ContainsFunc(podTemplateOverride.TargetJobs, func(targetJob trainer.PodTemplateOverrideTargetJob) bool {
 				return targetJob.Name == job.Name
 			}) {
 				continue
 			}
-			patch, err := json.Marshal(podSpecOverride)
+
+			podTemplatePatch := map[string]any{}
+			if podTemplateOverride.Metadata != nil {
+				metadata := map[string]any{}
+				if podTemplateOverride.Metadata.Labels != nil {
+					metadata["labels"] = podTemplateOverride.Metadata.Labels
+				}
+				if podTemplateOverride.Metadata.Annotations != nil {
+					metadata["annotations"] = podTemplateOverride.Metadata.Annotations
+				}
+				if len(metadata) > 0 {
+					podTemplatePatch["metadata"] = metadata
+				}
+			}
+
+			if podTemplateOverride.Spec != nil {
+				podTemplatePatch["spec"] = podTemplateOverride.Spec
+			}
+
+			// Apply a strategic merge patch against the full PodTemplateSpec
+			source, err := json.Marshal(job.Template.Spec.Template)
 			if err != nil {
 				return err
 			}
-			source, err := json.Marshal(job.Template.Spec.Template.Spec)
+			patch, err := json.Marshal(podTemplatePatch)
 			if err != nil {
 				return err
 			}
-			merged, err := strategicpatch.StrategicMergePatch(source, patch, corev1.PodSpec{})
+			merged, err := strategicpatch.StrategicMergePatch(source, patch, corev1.PodTemplateSpec{})
 			if err != nil {
 				return err
 			}
-			spec := corev1.PodSpec{}
-			err = json.Unmarshal(merged, &spec)
-			if err != nil {
+			mergedTemplate := corev1.PodTemplateSpec{}
+			if err := json.Unmarshal(merged, &mergedTemplate); err != nil {
 				return err
 			}
-			jobSetTemplateSpec.Spec.ReplicatedJobs[i].Template.Spec.Template.Spec = spec
+			jobSetTemplateSpec.Spec.ReplicatedJobs[i].Template.Spec.Template = mergedTemplate
 		}
 	}
 	return nil
@@ -230,7 +249,7 @@ func syncPodSets(info *runtime.Info) {
 		}
 		apply.UpsertVolumes(&jsSpec.ReplicatedJobs[psIdx].Template.Spec.Template.Spec.Volumes, ps.Volumes...)
 		for containerIdx, container := range ps.Containers {
-			apply.UpsertEnvVar(
+			apply.UpsertEnvVars(
 				&jsSpec.ReplicatedJobs[psIdx].Template.Spec.Template.Spec.Containers[containerIdx].Env,
 				container.Env...,
 			)
@@ -246,8 +265,8 @@ func syncPodSets(info *runtime.Info) {
 	}
 }
 
-func (r *TrainingRuntime) TerminalCondition(ctx context.Context, trainJob *trainer.TrainJob) (*metav1.Condition, error) {
-	return r.framework.RunTerminalConditionPlugins(ctx, trainJob)
+func (r *TrainingRuntime) TrainJobStatus(ctx context.Context, trainJob *trainer.TrainJob) (*trainer.TrainJobStatus, error) {
+	return r.framework.RunTrainJobStatusPlugin(ctx, trainJob)
 }
 
 func (r *TrainingRuntime) EventHandlerRegistrars() []runtime.ReconcilerBuilder {
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/core/framework.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/core/framework.go
index 551164e36..dc654d3ae 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/core/framework.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/core/framework.go
@@ -20,7 +20,6 @@ import (
 	"context"
 	"errors"
 
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/util/validation/field"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
@@ -29,9 +28,10 @@ import (
 	"github.com/kubeflow/trainer/v2/pkg/runtime"
 	"github.com/kubeflow/trainer/v2/pkg/runtime/framework"
 	fwkplugins "github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins"
+	index "github.com/kubeflow/trainer/v2/pkg/runtime/indexer"
 )
 
-var errorTooManyTerminalConditionPlugin = errors.New("too many TerminalCondition plugins are registered")
+var errorTooManyTrainJobStatusPlugin = errors.New("too many TrainJobStatus plugins are registered")
 
 type Framework struct {
 	registry                     fwkplugins.Registry
@@ -42,7 +42,7 @@ type Framework struct {
 	watchExtensionPlugins        []framework.WatchExtensionPlugin
 	podNetworkPlugins            []framework.PodNetworkPlugin
 	componentBuilderPlugins      []framework.ComponentBuilderPlugin
-	terminalConditionPlugins     []framework.TerminalConditionPlugin
+	trainJobStatusPlugin         framework.TrainJobStatusPlugin
 }
 
 func New(ctx context.Context, c client.Client, r fwkplugins.Registry, indexer client.FieldIndexer) (*Framework, error) {
@@ -50,6 +50,9 @@ func New(ctx context.Context, c client.Client, r fwkplugins.Registry, indexer cl
 		registry: r,
 	}
 	plugins := make(map[string]framework.Plugin, len(r))
+	if err := f.SetupRuntimeClassIndexer(ctx, indexer); err != nil {
+		return nil, err
+	}
 
 	for name, factory := range r {
 		plugin, err := factory(ctx, c, indexer)
@@ -75,8 +78,11 @@ func New(ctx context.Context, c client.Client, r fwkplugins.Registry, indexer cl
 		if p, ok := plugin.(framework.ComponentBuilderPlugin); ok {
 			f.componentBuilderPlugins = append(f.componentBuilderPlugins, p)
 		}
-		if p, ok := plugin.(framework.TerminalConditionPlugin); ok {
-			f.terminalConditionPlugins = append(f.terminalConditionPlugins, p)
+		if p, ok := plugin.(framework.TrainJobStatusPlugin); ok {
+			if f.trainJobStatusPlugin != nil {
+				return nil, errorTooManyTrainJobStatusPlugin
+			}
+			f.trainJobStatusPlugin = p
 		}
 	}
 	f.plugins = plugins
@@ -137,13 +143,9 @@ func (f *Framework) RunComponentBuilderPlugins(ctx context.Context, info *runtim
 	return objs, nil
 }
 
-func (f *Framework) RunTerminalConditionPlugins(ctx context.Context, trainJob *trainer.TrainJob) (*metav1.Condition, error) {
-	// TODO (tenzen-y): Once we provide the Configuration API, we should validate which plugin should have terminalCondition execution points.
-	if len(f.terminalConditionPlugins) > 1 {
-		return nil, errorTooManyTerminalConditionPlugin
-	}
-	if len(f.terminalConditionPlugins) != 0 {
-		return f.terminalConditionPlugins[0].TerminalCondition(ctx, trainJob)
+func (f *Framework) RunTrainJobStatusPlugin(ctx context.Context, trainJob *trainer.TrainJob) (*trainer.TrainJobStatus, error) {
+	if f.trainJobStatusPlugin != nil {
+		return f.trainJobStatusPlugin.Status(ctx, trainJob)
 	}
 	return nil, nil
 }
@@ -151,3 +153,17 @@ func (f *Framework) RunTerminalConditionPlugins(ctx context.Context, trainJob *t
 func (f *Framework) WatchExtensionPlugins() []framework.WatchExtensionPlugin {
 	return f.watchExtensionPlugins
 }
+
+func (f *Framework) SetupRuntimeClassIndexer(ctx context.Context, indexer client.FieldIndexer) error {
+	if err := indexer.IndexField(ctx, &trainer.TrainingRuntime{},
+		index.TrainingRuntimeContainerRuntimeClassKey,
+		index.IndexTrainingRuntimeContainerRuntimeClass); err != nil {
+		return index.ErrorCanNotSetupTrainingRuntimeRuntimeClassIndexer
+	}
+	if err := indexer.IndexField(ctx, &trainer.ClusterTrainingRuntime{},
+		index.ClusterTrainingRuntimeContainerRuntimeClassKey,
+		index.IndexClusterTrainingRuntimeContainerRuntimeClass); err != nil {
+		return index.ErrorCanNotSetupClusterTrainingRuntimeRuntimeClassIndexer
+	}
+	return nil
+}
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/interface.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/interface.go
index 676548ebe..703379c1f 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/interface.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/interface.go
@@ -19,7 +19,6 @@ package framework
 import (
 	"context"
 
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/util/validation/field"
 	"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
 
@@ -61,7 +60,7 @@ type ComponentBuilderPlugin interface {
 	Build(ctx context.Context, info *runtime.Info, trainJob *trainer.TrainJob) ([]any, error)
 }
 
-type TerminalConditionPlugin interface {
+type TrainJobStatusPlugin interface {
 	Plugin
-	TerminalCondition(ctx context.Context, trainJob *trainer.TrainJob) (*metav1.Condition, error)
+	Status(ctx context.Context, trainJob *trainer.TrainJob) (*trainer.TrainJobStatus, error)
 }
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/coscheduling/coscheduling.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/coscheduling/coscheduling.go
index d2a130560..abcfd4634 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/coscheduling/coscheduling.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/coscheduling/coscheduling.go
@@ -18,8 +18,6 @@ package coscheduling
 
 import (
 	"context"
-	"errors"
-	"fmt"
 	"slices"
 
 	"github.com/go-logr/logr"
@@ -47,6 +45,7 @@ import (
 	trainer "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1"
 	"github.com/kubeflow/trainer/v2/pkg/runtime"
 	"github.com/kubeflow/trainer/v2/pkg/runtime/framework"
+	index "github.com/kubeflow/trainer/v2/pkg/runtime/indexer"
 	runtimeindexer "github.com/kubeflow/trainer/v2/pkg/runtime/indexer"
 )
 
@@ -61,24 +60,13 @@ var _ framework.EnforcePodGroupPolicyPlugin = (*CoScheduling)(nil)
 var _ framework.WatchExtensionPlugin = (*CoScheduling)(nil)
 var _ framework.ComponentBuilderPlugin = (*CoScheduling)(nil)
 
-var (
-	ErrorCanNotSetupTrainingRuntimeRuntimeClassIndexer        = errors.New("setting index on runtimeClass for TrainingRuntime")
-	ErrorCanNotSetupClusterTrainingRuntimeRuntimeClassIndexer = errors.New("setting index on runtimeClass for ClusterTrainingRuntime")
-)
-
 const Name = "CoScheduling"
 
 // +kubebuilder:rbac:groups=scheduling.x-k8s.io,resources=podgroups,verbs=create;get;list;watch;update;patch
+// +kubebuilder:rbac:groups=node.k8s.io,resources=runtimeclasses,verbs=get;list;watch
+// +kubebuilder:rbac:groups="",resources=limitranges,verbs=get;list;watch
 
-func New(ctx context.Context, client client.Client, indexer client.FieldIndexer) (framework.Plugin, error) {
-	if err := indexer.IndexField(ctx, &trainer.TrainingRuntime{}, TrainingRuntimeContainerRuntimeClassKey,
-		IndexTrainingRuntimeContainerRuntimeClass); err != nil {
-		return nil, fmt.Errorf("%w: %w", ErrorCanNotSetupTrainingRuntimeRuntimeClassIndexer, err)
-	}
-	if err := indexer.IndexField(ctx, &trainer.ClusterTrainingRuntime{}, ClusterTrainingRuntimeContainerRuntimeClassKey,
-		IndexClusterTrainingRuntimeContainerRuntimeClass); err != nil {
-		return nil, fmt.Errorf("%w: %w", ErrorCanNotSetupClusterTrainingRuntimeRuntimeClassIndexer, err)
-	}
+func New(_ context.Context, client client.Client, _ client.FieldIndexer) (framework.Plugin, error) {
 	return &CoScheduling{
 		client:     client,
 		restMapper: client.RESTMapper(),
@@ -91,7 +79,7 @@ func (c *CoScheduling) Name() string {
 }
 
 func (c *CoScheduling) EnforcePodGroupPolicy(info *runtime.Info, trainJob *trainer.TrainJob) error {
-	if info == nil || info.RuntimePolicy.PodGroupPolicy == nil || trainJob == nil {
+	if info == nil || info.RuntimePolicy.PodGroupPolicy == nil || info.RuntimePolicy.PodGroupPolicy.Coscheduling == nil || trainJob == nil {
 		return nil
 	}
 
@@ -185,11 +173,11 @@ func (h *PodGroupRuntimeClassHandler) Generic(context.Context, event.TypedGeneri
 
 func (h *PodGroupRuntimeClassHandler) queueSuspendedTrainJobs(ctx context.Context, runtimeClass *nodev1.RuntimeClass, q workqueue.TypedRateLimitingInterface[reconcile.Request]) error {
 	var trainingRuntimes trainer.TrainingRuntimeList
-	if err := h.client.List(ctx, &trainingRuntimes, client.MatchingFields{TrainingRuntimeContainerRuntimeClassKey: runtimeClass.Name}); err != nil {
+	if err := h.client.List(ctx, &trainingRuntimes, client.MatchingFields{index.TrainingRuntimeContainerRuntimeClassKey: runtimeClass.Name}); err != nil {
 		return err
 	}
 	var clusterTrainingRuntimes trainer.ClusterTrainingRuntimeList
-	if err := h.client.List(ctx, &clusterTrainingRuntimes, client.MatchingFields{ClusterTrainingRuntimeContainerRuntimeClassKey: runtimeClass.Name}); err != nil {
+	if err := h.client.List(ctx, &clusterTrainingRuntimes, client.MatchingFields{index.ClusterTrainingRuntimeContainerRuntimeClassKey: runtimeClass.Name}); err != nil {
 		return err
 	}
 
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/coscheduling/indexer.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/coscheduling/indexer.go
deleted file mode 100644
index 846d8cd47..000000000
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/coscheduling/indexer.go
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-Copyright 2024 The Kubeflow Authors.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package coscheduling
-
-import (
-	"sigs.k8s.io/controller-runtime/pkg/client"
-
-	trainer "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1"
-)
-
-var (
-	TrainingRuntimeContainerRuntimeClassKey        = ".trainingRuntimeSpec.jobSetTemplateSpec.replicatedJobs.podTemplateSpec.runtimeClassName"
-	ClusterTrainingRuntimeContainerRuntimeClassKey = ".clusterTrainingRuntimeSpec.jobSetTemplateSpec.replicatedJobs.podTemplateSpec.runtimeClassName"
-)
-
-func IndexTrainingRuntimeContainerRuntimeClass(obj client.Object) []string {
-	runtime, ok := obj.(*trainer.TrainingRuntime)
-	if !ok {
-		return nil
-	}
-	var runtimeClasses []string
-	for _, rJob := range runtime.Spec.Template.Spec.ReplicatedJobs {
-		if rJob.Template.Spec.Template.Spec.RuntimeClassName != nil {
-			runtimeClasses = append(runtimeClasses, *rJob.Template.Spec.Template.Spec.RuntimeClassName)
-		}
-	}
-	return runtimeClasses
-}
-
-func IndexClusterTrainingRuntimeContainerRuntimeClass(obj client.Object) []string {
-	clRuntime, ok := obj.(*trainer.ClusterTrainingRuntime)
-	if !ok {
-		return nil
-	}
-	var runtimeClasses []string
-	for _, rJob := range clRuntime.Spec.Template.Spec.ReplicatedJobs {
-		if rJob.Template.Spec.Template.Spec.RuntimeClassName != nil {
-			runtimeClasses = append(runtimeClasses, *rJob.Template.Spec.Template.Spec.RuntimeClassName)
-		}
-	}
-	return runtimeClasses
-}
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/jobset/builder.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/jobset/builder.go
index e3cf615a1..d5d8e1ca8 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/jobset/builder.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/jobset/builder.go
@@ -56,7 +56,7 @@ func (b *Builder) Initializer(trainJob *trainer.TrainJob) *Builder {
 					env := &b.Spec.ReplicatedJobs[i].Template.Spec.Template.Spec.Containers[j].Env
 					// Update the dataset initializer envs.
 					if storageUri := trainJob.Spec.Initializer.Dataset.StorageUri; storageUri != nil {
-						apply.UpsertEnvVar(env, *corev1ac.EnvVar().
+						apply.UpsertEnvVars(env, *corev1ac.EnvVar().
 							WithName(jobsetplgconsts.InitializerEnvStorageUri).
 							WithValue(*storageUri))
 					}
@@ -82,7 +82,7 @@ func (b *Builder) Initializer(trainJob *trainer.TrainJob) *Builder {
 					env := &b.Spec.ReplicatedJobs[i].Template.Spec.Template.Spec.Containers[j].Env
 					// Update the model initializer envs.
 					if storageUri := trainJob.Spec.Initializer.Model.StorageUri; storageUri != nil {
-						apply.UpsertEnvVar(env, *corev1ac.EnvVar().
+						apply.UpsertEnvVars(env, *corev1ac.EnvVar().
 							WithName(jobsetplgconsts.InitializerEnvStorageUri).
 							WithValue(*storageUri))
 					}
@@ -101,21 +101,26 @@ func (b *Builder) Initializer(trainJob *trainer.TrainJob) *Builder {
 	return b
 }
 
+// isRunLauncherAsNode returns true if runLauncherAsNode is set to true in the MPI policy.
+func (b *Builder) isRunLauncherAsNode(info *runtime.Info) bool {
+	return info.RuntimePolicy.MLPolicySource != nil &&
+		info.RuntimePolicy.MLPolicySource.MPI != nil &&
+		info.RuntimePolicy.MLPolicySource.MPI.RunLauncherAsNode != nil &&
+		*info.RuntimePolicy.MLPolicySource.MPI.RunLauncherAsNode
+}
+
 // Trainer updates JobSet values for the trainer Job.
 func (b *Builder) Trainer(info *runtime.Info, trainJob *trainer.TrainJob) *Builder {
 	for i, rJob := range b.Spec.ReplicatedJobs {
+		ancestor := ""
 		jobMetadata := rJob.Template.ObjectMetaApplyConfiguration
-		if jobMetadata == nil || jobMetadata.Labels == nil {
-			continue
+		if jobMetadata != nil && jobMetadata.Labels != nil {
+			ancestor = jobMetadata.Labels[constants.LabelTrainJobAncestor]
 		}
-		if ancestor, ok := jobMetadata.Labels[constants.LabelTrainJobAncestor]; ok && ancestor == constants.AncestorTrainer {
+		if ancestor == constants.AncestorTrainer {
 			// TODO: Support multiple replicas ('.template.spec.replicatedJobs[*].replicas') for replicated Jobs.
 			// REF: https://github.com/kubeflow/trainer/issues/2318
 			b.Spec.ReplicatedJobs[i].Replicas = ptr.To[int32](1)
-			// Update the Parallelism and Completions values for the Trainer Job.
-			b.Spec.ReplicatedJobs[i].Template.Spec.Parallelism = info.FindPodSetByAncestor(constants.AncestorTrainer).Count
-			b.Spec.ReplicatedJobs[i].Template.Spec.Completions = info.FindPodSetByAncestor(constants.AncestorTrainer).Count
-
 			// Update values for the Trainer container.
 			for j, container := range rJob.Template.Spec.Template.Spec.Containers {
 				if *container.Name == constants.Node {
@@ -130,6 +135,16 @@ func (b *Builder) Trainer(info *runtime.Info, trainJob *trainer.TrainJob) *Build
 						if args := jobTrainer.Args; args != nil {
 							b.Spec.ReplicatedJobs[i].Template.Spec.Template.Spec.Containers[j].Args = args
 						}
+					}
+				}
+			}
+		}
+		if ancestor == constants.AncestorTrainer || b.isRunLauncherAsNode(info) && *rJob.Name == constants.Node {
+			// TODO (andreyvelich): For MPI we should apply container resources to the Node ReplicatedJob also.
+			// Eventually, we should find better way to propagate resources from TrainJob to JobSet.
+			for j, container := range rJob.Template.Spec.Template.Spec.Containers {
+				if *container.Name == constants.Node {
+					if jobTrainer := trainJob.Spec.Trainer; jobTrainer != nil {
 						if resourcesPerNode := jobTrainer.ResourcesPerNode; resourcesPerNode != nil &&
 							(resourcesPerNode.Limits != nil || resourcesPerNode.Requests != nil) {
 							requirements := corev1ac.ResourceRequirements()
@@ -163,6 +178,13 @@ func (b *Builder) PodLabels(labels map[string]string) *Builder {
 	return b
 }
 
+func (b *Builder) PodAnnotations(annotations map[string]string) *Builder {
+	for i := range b.Spec.ReplicatedJobs {
+		b.Spec.ReplicatedJobs[i].Template.Spec.Template.WithAnnotations(annotations)
+	}
+	return b
+}
+
 func (b *Builder) Suspend(suspend *bool) *Builder {
 	b.Spec.Suspend = suspend
 	return b
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/jobset/jobset.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/jobset/jobset.go
index 0e57bfb98..982e8d0af 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/jobset/jobset.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/jobset/jobset.go
@@ -48,8 +48,8 @@ import (
 )
 
 var (
-	runtimeRefPath      = field.NewPath("spec").Child("runtimeRef")
-	podSpecOverridePath = field.NewPath("spec").Child("podSpecOverrides")
+	runtimeRefPath          = field.NewPath("spec").Child("runtimeRef")
+	podTemplateOverridePath = field.NewPath("spec").Child("podTemplateOverrides")
 )
 
 type JobSet struct {
@@ -62,7 +62,7 @@ type JobSet struct {
 var _ framework.WatchExtensionPlugin = (*JobSet)(nil)
 var _ framework.PodNetworkPlugin = (*JobSet)(nil)
 var _ framework.ComponentBuilderPlugin = (*JobSet)(nil)
-var _ framework.TerminalConditionPlugin = (*JobSet)(nil)
+var _ framework.TrainJobStatusPlugin = (*JobSet)(nil)
 var _ framework.CustomValidationPlugin = (*JobSet)(nil)
 
 const Name = constants.JobSetKind
@@ -118,45 +118,39 @@ func (j *JobSet) Validate(ctx context.Context, info *runtime.Info, oldObj, newOb
 		}
 	}
 
-	allErrs = append(allErrs, j.checkPodSpecOverridesImmutability(ctx, oldObj, newObj)...)
+	allErrs = append(allErrs, j.checkPodTemplateOverridesImmutability(ctx, oldObj, newObj)...)
 
 	// TODO (andreyvelich): Validate Volumes, VolumeMounts, and Tolerations.
-	targetJobNames := sets.New[string]()
-	for _, podSpecOverride := range newObj.Spec.PodSpecOverrides {
-		// Validate that there are no duplicate target job names within the same PodSpecOverride
-		for _, targetJob := range podSpecOverride.TargetJobs {
-			if targetJobNames.Has(targetJob.Name) {
-				allErrs = append(allErrs, field.Duplicate(podSpecOverridePath, targetJob.Name))
-			}
-			targetJobNames.Insert(targetJob.Name)
-		}
-
-		for _, targetJob := range podSpecOverride.TargetJobs {
+	for _, podTemplateOverride := range newObj.Spec.PodTemplateOverrides {
+		for _, targetJob := range podTemplateOverride.TargetJobs {
 			containers, ok := rJobContainerNames[targetJob.Name]
 			if !ok {
-				allErrs = append(allErrs, field.Invalid(podSpecOverridePath, newObj.Spec.PodSpecOverrides, "must not have targetJob that doesn't exist in the runtime job template"))
+				allErrs = append(allErrs, field.Invalid(podTemplateOverridePath, newObj.Spec.PodTemplateOverrides, "must not have targetJob that doesn't exist in the runtime job template"))
 			}
-			for _, overrideContainer := range podSpecOverride.InitContainers {
-				if !containers.Has(overrideContainer.Name) {
-					allErrs = append(allErrs, field.Invalid(podSpecOverridePath, newObj.Spec.PodSpecOverrides, fmt.Sprintf("must not have initContainer that doesn't exist in the runtime job %s", targetJob.Name)))
+			if podTemplateOverride.Spec != nil {
+				for _, overrideContainer := range podTemplateOverride.Spec.InitContainers {
+					if !containers.Has(overrideContainer.Name) {
+						allErrs = append(allErrs, field.Invalid(podTemplateOverridePath, newObj.Spec.PodTemplateOverrides, fmt.Sprintf("must not have initContainer that doesn't exist in the runtime job %s", targetJob.Name)))
+					}
 				}
-			}
-			for _, overrideContainer := range podSpecOverride.Containers {
-				if !containers.Has(overrideContainer.Name) {
-					allErrs = append(allErrs, field.Invalid(podSpecOverridePath, newObj.Spec.PodSpecOverrides, fmt.Sprintf("must not have container that doesn't exist in the runtime job %s", targetJob.Name)))
-					// Trainer and Initializer APIs should be used to set TrainJob envs for the reserved containers.
-				} else if len(overrideContainer.Env) > 0 && (overrideContainer.Name == constants.DatasetInitializer || overrideContainer.Name == constants.ModelInitializer || overrideContainer.Name == constants.Node) {
-					allErrs = append(allErrs, field.Invalid(podSpecOverridePath, newObj.Spec.PodSpecOverrides,
-						fmt.Sprintf("must not have envs for the %s, %s, %s containers", constants.DatasetInitializer, constants.ModelInitializer, constants.Node)))
+				for _, overrideContainer := range podTemplateOverride.Spec.Containers {
+					if !containers.Has(overrideContainer.Name) {
+						allErrs = append(allErrs, field.Invalid(podTemplateOverridePath, newObj.Spec.PodTemplateOverrides, fmt.Sprintf("must not have container that doesn't exist in the runtime job %s", targetJob.Name)))
+						// Trainer and Initializer APIs should be used to set TrainJob envs for the reserved containers.
+					} else if len(overrideContainer.Env) > 0 && (overrideContainer.Name == constants.DatasetInitializer || overrideContainer.Name == constants.ModelInitializer || overrideContainer.Name == constants.Node) {
+						allErrs = append(allErrs, field.Invalid(podTemplateOverridePath, newObj.Spec.PodTemplateOverrides,
+							fmt.Sprintf("must not have envs for the %s, %s, %s containers", constants.DatasetInitializer, constants.ModelInitializer, constants.Node)))
+					}
 				}
 			}
 		}
+
 	}
 
 	return nil, allErrs
 }
 
-func (j *JobSet) checkPodSpecOverridesImmutability(ctx context.Context, oldObj, newObj *trainer.TrainJob) field.ErrorList {
+func (j *JobSet) checkPodTemplateOverridesImmutability(ctx context.Context, oldObj, newObj *trainer.TrainJob) field.ErrorList {
 	var allErrs field.ErrorList
 
 	if oldObj == nil {
@@ -165,13 +159,13 @@ func (j *JobSet) checkPodSpecOverridesImmutability(ctx context.Context, oldObj,
 	}
 
 	jobSet := &jobsetv1alpha2.JobSet{}
-	changed := !equality.Semantic.DeepEqual(oldObj.Spec.PodSpecOverrides, newObj.Spec.PodSpecOverrides)
+	changed := !equality.Semantic.DeepEqual(oldObj.Spec.PodTemplateOverrides, newObj.Spec.PodTemplateOverrides)
 	suspended := ptr.Equal(newObj.Spec.Suspend, ptr.To(true))
 	if changed {
 		if !suspended {
-			allErrs = append(allErrs, field.Forbidden(podSpecOverridePath, "PodSpecOverrides can only be modified when the TrainJob is suspended"))
+			allErrs = append(allErrs, field.Forbidden(podTemplateOverridePath, "PodTemplateOverrides can only be modified when the TrainJob is suspended"))
 		} else if err := j.client.Get(ctx, client.ObjectKeyFromObject(newObj), jobSet); client.IgnoreNotFound(err) != nil {
-			allErrs = append(allErrs, field.InternalError(podSpecOverridePath, err))
+			allErrs = append(allErrs, field.InternalError(podTemplateOverridePath, err))
 		} else {
 			// If the JobSet exists, check whether it's inactive
 			// so changes won't have side effects on the JobSet's Pods
@@ -180,8 +174,8 @@ func (j *JobSet) checkPodSpecOverridesImmutability(ctx context.Context, oldObj,
 			// from unsuspended state.
 			for _, replicatedJob := range jobSet.Status.ReplicatedJobsStatus {
 				if replicatedJob.Active > 0 {
-					allErrs = append(allErrs, field.Forbidden(podSpecOverridePath,
-						fmt.Sprintf("PodSpecOverrides cannot be modified when the JobSet's ReplicatedJob %s is still active", replicatedJob.Name)))
+					allErrs = append(allErrs, field.Forbidden(podTemplateOverridePath,
+						fmt.Sprintf("PodTemplateOverrides cannot be modified when the JobSet's ReplicatedJob %s is still active", replicatedJob.Name)))
 				}
 			}
 		}
@@ -275,6 +269,7 @@ func (j *JobSet) Build(ctx context.Context, info *runtime.Info, trainJob *traine
 		Initializer(trainJob).
 		Trainer(info, trainJob).
 		PodLabels(info.Scheduler.PodLabels).
+		PodAnnotations(info.Scheduler.PodAnnotations).
 		Suspend(trainJob.Spec.Suspend).
 		Build().
 		WithOwnerReferences(metav1ac.OwnerReference().
@@ -288,18 +283,34 @@ func (j *JobSet) Build(ctx context.Context, info *runtime.Info, trainJob *traine
 	return []any{jobSet}, nil
 }
 
-func (j *JobSet) TerminalCondition(ctx context.Context, trainJob *trainer.TrainJob) (*metav1.Condition, error) {
+func (j *JobSet) Status(ctx context.Context, trainJob *trainer.TrainJob) (*trainer.TrainJobStatus, error) {
 	jobSet := &jobsetv1alpha2.JobSet{}
 	if err := j.client.Get(ctx, client.ObjectKeyFromObject(trainJob), jobSet); err != nil {
 		return nil, err
 	}
+	status := trainJob.Status.DeepCopy()
+
 	if completed := meta.FindStatusCondition(jobSet.Status.Conditions, string(jobsetv1alpha2.JobSetCompleted)); completed != nil && completed.Status == metav1.ConditionTrue {
 		completed.Type = trainer.TrainJobComplete
-		return completed, nil
+		meta.SetStatusCondition(&status.Conditions, *completed)
 	}
 	if failed := meta.FindStatusCondition(jobSet.Status.Conditions, string(jobsetv1alpha2.JobSetFailed)); failed != nil && failed.Status == metav1.ConditionTrue {
 		failed.Type = trainer.TrainJobFailed
-		return failed, nil
+		meta.SetStatusCondition(&status.Conditions, *failed)
+	}
+
+	var statuses []trainer.JobStatus
+	for _, status := range jobSet.Status.ReplicatedJobsStatus {
+		statuses = append(statuses, trainer.JobStatus{
+			Name:      status.Name,
+			Ready:     &status.Ready,
+			Succeeded: &status.Succeeded,
+			Failed:    &status.Failed,
+			Active:    &status.Active,
+			Suspended: &status.Suspended,
+		})
 	}
-	return nil, nil
+	status.JobsStatus = statuses
+
+	return status, nil
 }
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/mpi/mpi.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/mpi/mpi.go
index ed32344da..053fd38e9 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/mpi/mpi.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/mpi/mpi.go
@@ -113,8 +113,6 @@ func (m *MPI) EnforceMLPolicy(info *runtime.Info, trainJob *trainer.TrainJob) er
 	if trainJob.Spec.Trainer != nil && trainJob.Spec.Trainer.NumNodes != nil {
 		if node := info.FindPodSetByName(constants.Node); node != nil && node.Count != nil {
 			if ptr.Deref(info.RuntimePolicy.MLPolicySource.MPI.RunLauncherAsNode, false) {
-				// TODO: We should implement more strong validations for the MPIRuntime with runLauncherAsNode.
-				// REF: https://github.com/kubeflow/trainer/issues/2550
 				// When runLauncherAsNode is enabled, 1 nodes should be allocated to launcher.
 				*node.Count = max(*trainJob.Spec.Trainer.NumNodes-1, 1)
 			} else {
@@ -125,6 +123,15 @@ func (m *MPI) EnforceMLPolicy(info *runtime.Info, trainJob *trainer.TrainJob) er
 
 	if trainJob.Spec.Trainer != nil && trainJob.Spec.Trainer.NumProcPerNode != nil {
 		info.RuntimePolicy.MLPolicySource.MPI.NumProcPerNode = ptr.To(int32(trainJob.Spec.Trainer.NumProcPerNode.IntValue()))
+		// If numProcPerNode is set to 1 in runtime, we make it equal to number of GPUs.
+	} else if *info.RuntimePolicy.MLPolicySource.MPI.NumProcPerNode == 1 {
+		resourcesPerNode := ptr.Deref(runtime.ExtractResourcePerNodeFromRuntime(info), corev1.ResourceRequirements{})
+		if jobTrainer := trainJob.Spec.Trainer; jobTrainer != nil && jobTrainer.ResourcesPerNode != nil {
+			resourcesPerNode = ptr.Deref(jobTrainer.ResourcesPerNode, corev1.ResourceRequirements{})
+		}
+		if gpuQ := runtime.GetNumGPUPerNode(&resourcesPerNode); gpuQ > 1 {
+			info.RuntimePolicy.MLPolicySource.MPI.NumProcPerNode = ptr.To(int32(gpuQ))
+		}
 	}
 
 	// Add Secret and ConfigMap volumes to the Info object
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/registry.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/registry.go
index 3944a63a6..64445abad 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/registry.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/registry.go
@@ -27,6 +27,7 @@ import (
 	"github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/mpi"
 	"github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/plainml"
 	"github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/torch"
+	"github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/volcano"
 )
 
 type Registry map[string]func(ctx context.Context, client client.Client, indexer client.FieldIndexer) (framework.Plugin, error)
@@ -34,6 +35,7 @@ type Registry map[string]func(ctx context.Context, client client.Client, indexer
 func NewRegistry() Registry {
 	return Registry{
 		coscheduling.Name: coscheduling.New,
+		volcano.Name:      volcano.New,
 		mpi.Name:          mpi.New,
 		plainml.Name:      plainml.New,
 		torch.Name:        torch.New,
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/torch/torch.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/torch/torch.go
index d096f3485..0aef2c759 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/torch/torch.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/torch/torch.go
@@ -20,7 +20,6 @@ import (
 	"context"
 	"fmt"
 	"slices"
-	"strings"
 
 	corev1 "k8s.io/api/core/v1"
 	"k8s.io/apimachinery/pkg/util/intstr"
@@ -30,7 +29,6 @@ import (
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
-	jobsetv1alpha2ac "sigs.k8s.io/jobset/client-go/applyconfiguration/jobset/v1alpha2"
 
 	trainer "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1"
 	"github.com/kubeflow/trainer/v2/pkg/apply"
@@ -88,21 +86,10 @@ func (t *Torch) Validate(_ context.Context, runtimeInfo *runtime.Info, _, newObj
 		// Check supported pretrained models for torchtune.
 		// TODO(Electronic-Waste): Add more validation for torchtune when we support more arguments.
 		if slices.Equal(newObj.Spec.Trainer.Command, constants.TorchTuneEntrypoint) {
-			runtimeRefNamePath := specPath.Child("runtimeRef").Child("name")
-			model := getModelFromRuntimeRef(newObj.Spec.RuntimeRef.Name)
-
-			if !constants.TorchTuneSupportedPretrainedModels.Has(model) {
-				allErrs = append(allErrs, field.Invalid(runtimeRefNamePath, newObj.Spec.RuntimeRef.Name, fmt.Sprintf("must have a supported pretrained model, invalid model configured: %v", model)))
-			}
-
-			numNodesRefPath := specPath.Child("trainer").Child("numNodes")
-			numNodes := *newObj.Spec.Trainer.NumNodes
-			if numNodes > 1 && model != constants.TORCHTUNE_MODEL_LLAMA3_3_70B {
-				allErrs = append(allErrs, field.Invalid(numNodesRefPath, numNodes, fmt.Sprintf("must be 1 for %v model", model)))
-			}
+			_, torchTuneErrs := validateTorchTune(runtimeInfo, newObj)
+			allErrs = append(allErrs, torchTuneErrs...)
 		}
 	}
-
 	return nil, allErrs
 }
 
@@ -123,37 +110,15 @@ func (t *Torch) EnforceMLPolicy(info *runtime.Info, trainJob *trainer.TrainJob)
 		numProcPerNode = ptr.Deref(trainJob.Spec.Trainer.NumProcPerNode, intstr.FromString("auto"))
 	}
 
+	// Determine numProcPerNode based on the resourcesPerNode.
+	resourcesPerNode := ptr.Deref(runtime.ExtractResourcePerNodeFromRuntime(info), corev1.ResourceRequirements{})
 	if jobTrainer := trainJob.Spec.Trainer; jobTrainer != nil && jobTrainer.ResourcesPerNode != nil {
-		var (
-			shouldUseCPU           func(resources corev1.ResourceList) bool
-			fallbackNumProcPerNode intstr.IntOrString
-		)
-		switch numProcPerNode.String() {
-		case "auto":
-			shouldUseCPU = func(resources corev1.ResourceList) bool {
-				for resName := range resources {
-					if strings.Contains(strings.ToLower(resName.String()), "gpu") {
-						return false
-					}
-				}
-				return true
-			}
-			fallbackNumProcPerNode = intstr.FromString("auto")
-		case "cpu":
-			shouldUseCPU = func(resources corev1.ResourceList) bool {
-				_, ok := resources[corev1.ResourceCPU]
-				return ok
-			}
-			fallbackNumProcPerNode = intstr.FromInt32(1)
-		default:
-			shouldUseCPU = func(corev1.ResourceList) bool { return false }
-			fallbackNumProcPerNode = numProcPerNode
-		}
-		nppNode, usedCPU := calculateNumProcPerNode(fallbackNumProcPerNode, jobTrainer.ResourcesPerNode.Limits, shouldUseCPU)
-		if !usedCPU {
-			nppNode, _ = calculateNumProcPerNode(fallbackNumProcPerNode, jobTrainer.ResourcesPerNode.Requests, shouldUseCPU)
-		}
-		numProcPerNode = nppNode
+		resourcesPerNode = ptr.Deref(jobTrainer.ResourcesPerNode, corev1.ResourceRequirements{})
+	}
+	gpuQ := runtime.GetNumGPUPerNode(&resourcesPerNode)
+	// If numProcPerNode is "cpu" or no GPU is set in resource, we calculate numProcPerNode based on CPU.
+	if numProcPerNode.String() == "cpu" || numProcPerNode.String() == "auto" && gpuQ == 0 {
+		numProcPerNode = intstr.FromInt(max(1, getNumCPUPerNode(&resourcesPerNode)))
 	}
 
 	// Update envs for Info object.
@@ -167,7 +132,7 @@ func (t *Torch) EnforceMLPolicy(info *runtime.Info, trainJob *trainer.TrainJob)
 		// Add PyTorch distributed "PET_" values for torchrun and torchtune.
 		// TODO (andreyvelich): We should validate that envs from different plugins don't conflict with each other.
 		// Ref: https://github.com/kubeflow/trainer/pull/2308#discussion_r1823229940
-		apply.UpsertEnvVar(&trainerContainer.Env,
+		apply.UpsertEnvVars(&trainerContainer.Env,
 			*corev1ac.EnvVar().
 				WithName(constants.TorchEnvNumNodes).
 				WithValue(fmt.Sprintf("%d", ptr.Deref(ptr.Deref(trainerPS, runtime.PodSet{}).Count, 1))),
@@ -183,7 +148,7 @@ func (t *Torch) EnforceMLPolicy(info *runtime.Info, trainJob *trainer.TrainJob)
 
 		if !slices.Equal(trainJob.Spec.Trainer.Command, constants.TorchTuneEntrypoint) {
 			// Add PET_MASTER_ADDR and PET_MASTER_PORT envs for torchrun.
-			apply.UpsertEnvVar(&trainerContainer.Env,
+			apply.UpsertEnvVars(&trainerContainer.Env,
 				*corev1ac.EnvVar().
 					WithName(constants.TorchEnvMasterAddr).
 					WithValue(fmt.Sprintf("%s-%s-0-0.%s", trainJob.Name, constants.Node, trainJob.Name)),
@@ -198,7 +163,7 @@ func (t *Torch) EnforceMLPolicy(info *runtime.Info, trainJob *trainer.TrainJob)
 			// Rendezvous backend is only enabled for multi-nodes or multi-devices training.
 			var newCommand []string
 			numNodes := ptr.Deref(ptr.Deref(trainerPS, runtime.PodSet{}).Count, 1)
-			if numNodes > 1 || !(numProcPerNode.Type == intstr.Int && numProcPerNode.IntVal == 1) {
+			if numNodes > 1 || numProcPerNode.Type == intstr.Int && numProcPerNode.IntVal > 1 || numProcPerNode.Type == intstr.String && gpuQ > 1 {
 				newCommand = append(newCommand,
 					fmt.Sprintf("%s=%s-%s-0-0.%s:%d",
 						constants.TorchTuneArgRdzvEndpoint,
@@ -208,12 +173,7 @@ func (t *Torch) EnforceMLPolicy(info *runtime.Info, trainJob *trainer.TrainJob)
 			}
 
 			// 2. Get the recipe and config from old args and append them to newCommand.
-			recipe, config := getRecipeAndConfig(
-				numNodes,
-				numProcPerNode,
-				getModelFromRuntimeRef(trainJob.Spec.RuntimeRef.Name),
-				trainJob.Spec.Trainer.Args,
-			)
+			recipe, config := getRecipeAndConfig(numNodes, numProcPerNode, gpuQ, trainJob)
 			newCommand = append(newCommand, recipe, constants.TorchTuneArgConfig, config)
 
 			// 3. Extract output directory, tokenizer path and model mount path from (Cluster)TrainingRuntime.
@@ -228,71 +188,17 @@ func (t *Torch) EnforceMLPolicy(info *runtime.Info, trainJob *trainer.TrainJob)
 	return nil
 }
 
-// calculateNumProcPerNode calculates the number of processes per node based on the provided resources.
-// It returns the calculated number of processes per node and a boolean indicating whether CPU resources were used.
-func calculateNumProcPerNode(
-	fallbackNumProcPerNode intstr.IntOrString, resources corev1.ResourceList, shouldUseCPU func(resources corev1.ResourceList) bool,
-) (intstr.IntOrString, bool) {
-	var defaultCPU int32 = 1
-	if resources != nil {
-		if shouldUseCPU(resources) {
-			cpuQ := resources[corev1.ResourceCPU]
-			return intstr.FromInt32(max(defaultCPU, int32(cpuQ.Value()))), true
-		}
-		return fallbackNumProcPerNode, false
-	}
-	return intstr.FromInt32(defaultCPU), false
-}
-
-// getRecipeAndConfig returns the recipe and config file name based on the number of nodes,
-// number of processes per node, model name, and command line arguments.
-func getRecipeAndConfig(numNodes int32, numProcPerNode intstr.IntOrString, model string, _ []string) (string, string) {
-	recipe := constants.TorchTuneFullFinetuneDistributed
-	suffix := constants.TorchTuneFullFinetuneMultiDevicesConfigSuffix
-	if numNodes == 1 && numProcPerNode.Type == intstr.Int && numProcPerNode.IntVal == 1 {
-		recipe = constants.TorchTuneFullFinetuneSingleDevice
-		suffix = constants.TorchTuneFullFinetuneSingleDeviceConfigSuffix
-	} else if numNodes > 1 {
-		suffix = constants.TorchTuneFullFinetuneMultiNodesConfigSuffix
+// getNumCPUPerNode calculates the number of CPU processes per node based on the provided resources.
+func getNumCPUPerNode(res *corev1.ResourceRequirements) int {
+	if res == nil {
+		return 0
 	}
-
-	return recipe, fmt.Sprintf("%s%s", model, suffix)
-}
-
-// extractOverridesFromRuntime extracts overrides from the TorchTune Trainer Node.
-func extractOverridesFromRuntime(info *runtime.Info) []string {
-	overrides := []string{}
-	jobSetSpec, ok := runtime.TemplateSpecApply[jobsetv1alpha2ac.JobSetSpecApplyConfiguration](info)
-	if !ok {
-		return overrides
-	}
-
-	for _, rJob := range jobSetSpec.ReplicatedJobs {
-		jobMetadata := rJob.Template.ObjectMetaApplyConfiguration
-		if jobMetadata == nil || jobMetadata.Labels == nil {
-			continue
-		}
-		if ancestor, ok := jobMetadata.Labels[constants.LabelTrainJobAncestor]; ok && ancestor == constants.AncestorTrainer {
-			for _, container := range rJob.Template.Spec.Template.Spec.Containers {
-				if container.Name != nil && *container.Name == constants.Node {
-					for _, command := range container.Command {
-						if constants.TorchTuneImmutableConfigs.Has(strings.Split(command, "=")[0]) {
-							overrides = append(overrides, command)
-						}
-					}
-				}
-			}
+	limitCpuQ, requestCpuQ := res.Limits.Cpu(), res.Requests.Cpu()
+	if requestCpuQ == nil || requestCpuQ.IsZero() {
+		if limitCpuQ != nil {
+			return int(limitCpuQ.Value())
 		}
+		return 0
 	}
-
-	return overrides
-}
-
-func getModelFromRuntimeRef(runtimeRefName string) string {
-	fields := strings.Split(runtimeRefName, "-")
-	if len(fields) != 3 {
-		return ""
-	}
-
-	return fmt.Sprintf("%s/%s", strings.ReplaceAll(fields[1], ".", "_"), strings.ToUpper(fields[2]))
+	return int(requestCpuQ.Value())
 }
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/torch/torchtune.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/torch/torchtune.go
new file mode 100644
index 000000000..87d69a295
--- /dev/null
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/torch/torchtune.go
@@ -0,0 +1,164 @@
+/*
+Copyright 2025 The Kubeflow Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package torch
+
+import (
+	"fmt"
+	"strings"
+
+	corev1 "k8s.io/api/core/v1"
+	"k8s.io/apimachinery/pkg/util/intstr"
+	"k8s.io/apimachinery/pkg/util/validation/field"
+	"k8s.io/utils/ptr"
+	"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
+	jobsetv1alpha2ac "sigs.k8s.io/jobset/client-go/applyconfiguration/jobset/v1alpha2"
+
+	trainer "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1"
+	"github.com/kubeflow/trainer/v2/pkg/constants"
+	"github.com/kubeflow/trainer/v2/pkg/runtime"
+)
+
+func validateTorchTune(runtimeInfo *runtime.Info, newObj *trainer.TrainJob) (admission.Warnings, field.ErrorList) {
+	var allErrs field.ErrorList
+	specPath := field.NewPath("spec")
+
+	runtimeRefNamePath := specPath.Child("runtimeRef").Child("name")
+	model := getModelFromRuntimeRef(newObj.Spec.RuntimeRef.Name)
+
+	if !constants.TorchTuneSupportedPretrainedModels.Has(model) {
+		allErrs = append(allErrs, field.Invalid(runtimeRefNamePath, newObj.Spec.RuntimeRef.Name, fmt.Sprintf("must have a supported pretrained model, invalid model configured: %v", model)))
+	}
+
+	numNodesRefPath := specPath.Child("trainer").Child("numNodes")
+	numNodes := *newObj.Spec.Trainer.NumNodes
+	if numNodes > 1 && model != constants.TORCHTUNE_MODEL_LLAMA3_3_70B {
+		allErrs = append(allErrs, field.Invalid(numNodesRefPath, numNodes, fmt.Sprintf("must be 1 for %v model", model)))
+	}
+
+	numProcPerNodeRefPath := specPath.Child("trainer").Child("numProcPerNode")
+	numProcPerNode := *newObj.Spec.Trainer.NumProcPerNode
+	resourcesPerNode := ptr.Deref(runtime.ExtractResourcePerNodeFromRuntime(runtimeInfo), corev1.ResourceRequirements{})
+	if jobTrainer := newObj.Spec.Trainer; jobTrainer != nil && jobTrainer.ResourcesPerNode != nil {
+		resourcesPerNode = ptr.Deref(jobTrainer.ResourcesPerNode, corev1.ResourceRequirements{})
+	}
+	_, config := getRecipeAndConfig(numNodes, numProcPerNode, runtime.GetNumGPUPerNode(&resourcesPerNode), newObj)
+	if strings.Contains(config, constants.TorchTuneQLoRAFinetuneDistributedConfigSuffix) {
+		if model == constants.TORCHTUNE_MODEL_QWEN2_5_1_5B {
+			allErrs = append(allErrs, field.Invalid(runtimeRefNamePath, newObj.Spec.RuntimeRef.Name, fmt.Sprintf("QLoRA is not supported for %v model", model)))
+		}
+		resourcePerNodeRefPath := specPath.Child("trainer").Child("resourcesPerNode")
+		if !strings.Contains(config, constants.TorchTuneQLoRAFinetuneSingleDeviceConfigSuffix) &&
+			(model == constants.TORCHTUNE_MODEL_LLAMA3_2_1B || model == constants.TORCHTUNE_MODEL_LLAMA3_2_3B) {
+			allErrs = append(
+				allErrs,
+				field.Invalid(numProcPerNodeRefPath, numProcPerNode, fmt.Sprintf("must be auto or 1 for %v model when using QLoRA", model)),
+				field.Invalid(resourcePerNodeRefPath, newObj.Spec.Trainer.ResourcesPerNode, fmt.Sprintf("must have gpu resource with value 1 for %v model when using QLoRA", model)),
+			)
+		}
+	}
+	return nil, allErrs
+}
+
+// getRecipeAndConfig returns the recipe and config file name based on the number of nodes,
+// number of processes per node, gpu count, resource per node, model name, and command line arguments.
+func getRecipeAndConfig(numNodes int32, numProcPerNode intstr.IntOrString, gpuQ int, trainJob *trainer.TrainJob) (string, string) {
+	recipe := constants.TorchTuneFullFinetuneDistributed
+	suffix := constants.TorchTuneFullFinetuneMultiDevicesConfigSuffix
+	if numNodes == 1 && (numProcPerNode.Type == intstr.Int && numProcPerNode.IntVal == 1 || gpuQ == 1) {
+		if isUseQLoraFinetune(trainJob.Spec.Trainer.Args) {
+			recipe = constants.TorchTuneLoRAFinetuneSingleDevice
+			suffix = constants.TorchTuneQLoRAFinetuneSingleDeviceConfigSuffix
+		} else if isLoraConfigEnabled(trainJob.Spec.Trainer.Args) {
+			recipe = constants.TorchTuneLoRAFinetuneSingleDevice
+			suffix = constants.TorchTuneLoRAFinetuneSingleDeviceConfigSuffix
+		} else {
+			recipe = constants.TorchTuneFullFinetuneSingleDevice
+			suffix = constants.TorchTuneFullFinetuneSingleDeviceConfigSuffix
+		}
+	} else if numNodes == 1 && isUseQLoraFinetune(trainJob.Spec.Trainer.Args) {
+		recipe = constants.TorchTuneLoRAFinetuneDistributed
+		suffix = constants.TorchTuneQLoRAFinetuneDistributedConfigSuffix
+	} else if numNodes == 1 && isLoraConfigEnabled(trainJob.Spec.Trainer.Args) {
+		recipe = constants.TorchTuneLoRAFinetuneDistributed
+		suffix = constants.TorchTuneLoRAFinetuneDistributedConfigSuffix
+	} else if numNodes > 1 {
+		suffix = constants.TorchTuneFullFinetuneMultiNodesConfigSuffix
+	}
+
+	return recipe, fmt.Sprintf("%s%s", getModelFromRuntimeRef(trainJob.Spec.RuntimeRef.Name), suffix)
+}
+
+// isLoraConfigEnabled checks if we enables LoraConfig.
+func isLoraConfigEnabled(args []string) bool {
+	for _, arg := range args {
+		if strings.Contains(arg, constants.TorchTuneLoraAttnModules) {
+			return true
+		}
+	}
+	return false
+}
+
+// isUseQLoraFinetune checks if QLoRA fine-tuning should be used.
+func isUseQLoraFinetune(args []string) bool {
+	hasQuantizeBase := false
+	for _, arg := range args {
+		switch {
+		case strings.Contains(arg, constants.TorchTuneUseDora):
+			// If Dora is enabled, no need to continue
+			return false
+		case strings.Contains(arg, constants.TorchTuneQuantizeBase):
+			hasQuantizeBase = true
+		}
+	}
+	return hasQuantizeBase
+}
+
+// extractOverridesFromRuntime extracts overrides from the TorchTune Trainer Node.
+func extractOverridesFromRuntime(info *runtime.Info) []string {
+	overrides := []string{}
+	jobSetSpec, ok := runtime.TemplateSpecApply[jobsetv1alpha2ac.JobSetSpecApplyConfiguration](info)
+	if !ok {
+		return overrides
+	}
+
+	for _, rJob := range jobSetSpec.ReplicatedJobs {
+		jobMetadata := rJob.Template.ObjectMetaApplyConfiguration
+		if jobMetadata == nil || jobMetadata.Labels == nil {
+			continue
+		}
+		if ancestor, ok := jobMetadata.Labels[constants.LabelTrainJobAncestor]; ok && ancestor == constants.AncestorTrainer {
+			for _, container := range rJob.Template.Spec.Template.Spec.Containers {
+				if container.Name != nil && *container.Name == constants.Node {
+					for _, command := range container.Command {
+						if constants.TorchTuneImmutableConfigs.Has(strings.Split(command, "=")[0]) {
+							overrides = append(overrides, command)
+						}
+					}
+				}
+			}
+		}
+	}
+	return overrides
+}
+
+func getModelFromRuntimeRef(runtimeRefName string) string {
+	fields := strings.Split(runtimeRefName, "-")
+	if len(fields) != 3 {
+		return ""
+	}
+	return fmt.Sprintf("%s/%s", strings.ReplaceAll(fields[1], ".", "_"), strings.ToUpper(fields[2]))
+}
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/volcano/volcano.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/volcano/volcano.go
new file mode 100644
index 000000000..376e6515a
--- /dev/null
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/volcano/volcano.go
@@ -0,0 +1,359 @@
+/*
+Copyright 2025 The Kubeflow Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package volcano
+
+import (
+	"context"
+	"fmt"
+	"slices"
+
+	"github.com/go-logr/logr"
+	corev1 "k8s.io/api/core/v1"
+	nodev1 "k8s.io/api/node/v1"
+	schedulingv1 "k8s.io/api/scheduling/v1"
+	apierrors "k8s.io/apimachinery/pkg/api/errors"
+	"k8s.io/apimachinery/pkg/api/meta"
+	apiruntime "k8s.io/apimachinery/pkg/runtime"
+	"k8s.io/apimachinery/pkg/runtime/schema"
+	"k8s.io/apimachinery/pkg/types"
+	"k8s.io/apimachinery/pkg/util/validation/field"
+	metav1ac "k8s.io/client-go/applyconfigurations/meta/v1"
+	"k8s.io/client-go/util/workqueue"
+	"k8s.io/klog/v2"
+	"k8s.io/utils/ptr"
+	ctrl "sigs.k8s.io/controller-runtime"
+	"sigs.k8s.io/controller-runtime/pkg/builder"
+	"sigs.k8s.io/controller-runtime/pkg/cache"
+	"sigs.k8s.io/controller-runtime/pkg/client"
+	"sigs.k8s.io/controller-runtime/pkg/event"
+	"sigs.k8s.io/controller-runtime/pkg/handler"
+	"sigs.k8s.io/controller-runtime/pkg/reconcile"
+	"sigs.k8s.io/controller-runtime/pkg/source"
+	"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
+	"sigs.k8s.io/jobset/client-go/applyconfiguration/jobset/v1alpha2"
+	volcanov1beta1 "volcano.sh/apis/pkg/apis/scheduling/v1beta1"
+	volcanov1beta1ac "volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1"
+
+	trainer "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1"
+	"github.com/kubeflow/trainer/v2/pkg/runtime"
+	"github.com/kubeflow/trainer/v2/pkg/runtime/framework"
+	index "github.com/kubeflow/trainer/v2/pkg/runtime/indexer"
+	runtimeindexer "github.com/kubeflow/trainer/v2/pkg/runtime/indexer"
+)
+
+type Volcano struct {
+	client     client.Client
+	restMapper meta.RESTMapper
+	scheme     *apiruntime.Scheme
+	logger     logr.Logger
+}
+
+var _ framework.EnforcePodGroupPolicyPlugin = (*Volcano)(nil)
+var _ framework.ComponentBuilderPlugin = (*Volcano)(nil)
+var _ framework.WatchExtensionPlugin = (*Volcano)(nil)
+
+const Name = "Volcano"
+
+// +kubebuilder:rbac:groups=scheduling.volcano.sh,resources=podgroups,verbs=create;get;list;watch;update;patch
+// +kubebuilder:rbac:groups=node.k8s.io,resources=runtimeclasses,verbs=get;list;watch
+// +kubebuilder:rbac:groups="",resources=limitranges,verbs=get;list;watch
+
+func New(_ context.Context, client client.Client, _ client.FieldIndexer) (framework.Plugin, error) {
+	return &Volcano{
+		client:     client,
+		restMapper: client.RESTMapper(),
+		scheme:     client.Scheme(),
+	}, nil
+}
+
+func (v *Volcano) Name() string {
+	return Name
+}
+
+func (v *Volcano) Validate(ctx context.Context, info *runtime.Info, _, newObj *trainer.TrainJob) (admission.Warnings, field.ErrorList) {
+	var allErrs field.ErrorList
+
+	if info == nil || info.RuntimePolicy.PodGroupPolicy == nil || info.RuntimePolicy.PodGroupPolicy.Volcano == nil || newObj == nil {
+		return nil, allErrs
+	}
+
+	specPath := field.NewPath("spec")
+
+	// Validate queue (must not be empty if explicitly set)
+	if queue, ok := info.Annotations[volcanov1beta1.QueueNameAnnotationKey]; ok {
+		if queue == "" {
+			allErrs = append(allErrs, field.Invalid(specPath.Child("annotations").Key(volcanov1beta1.QueueNameAnnotationKey),
+				queue, "Volcano queue name must not be empty"))
+		}
+	}
+
+	// Validate priorityClassName from the Pod template
+	jobSetSpec, ok := runtime.TemplateSpecApply[v1alpha2.JobSetSpecApplyConfiguration](info)
+	if ok && jobSetSpec != nil {
+		for _, rj := range jobSetSpec.ReplicatedJobs {
+			if rj.Template != nil && rj.Template.Spec != nil && rj.Template.Spec.Template != nil && rj.Template.Spec.Template.Spec != nil {
+				priorityClassName := rj.Template.Spec.Template.Spec.PriorityClassName
+				if priorityClassName != nil {
+					pcName := *priorityClassName
+					// Skip two special keywords which indicate the highest priorities
+					if pcName == "system-cluster-critical" || pcName == "system-node-critical" {
+						return nil, allErrs
+					}
+					// Any other name must be defined by creating a PriorityClass object with that name.
+					var pc schedulingv1.PriorityClass
+					if err := v.client.Get(ctx, types.NamespacedName{Name: pcName}, &pc); err != nil {
+						allErrs = append(allErrs, field.Invalid(specPath.Child("templateSpec").Child("priorityClassName"),
+							pcName, fmt.Sprintf("PriorityClass %q doesn't exist: %v", pcName, err)))
+					}
+				}
+			}
+		}
+	}
+
+	return nil, allErrs
+}
+
+func (v *Volcano) EnforcePodGroupPolicy(info *runtime.Info, trainJob *trainer.TrainJob) error {
+	if info == nil || info.RuntimePolicy.PodGroupPolicy == nil || trainJob == nil || info.RuntimePolicy.PodGroupPolicy.Volcano == nil {
+		return nil
+	}
+	if info.Scheduler.PodAnnotations == nil {
+		info.Scheduler.PodAnnotations = map[string]string{}
+	}
+	info.Scheduler.PodAnnotations[volcanov1beta1.KubeGroupNameAnnotationKey] = trainJob.Name
+	return nil
+}
+
+func (v *Volcano) Build(ctx context.Context, info *runtime.Info, trainJob *trainer.TrainJob) ([]any, error) {
+	if info == nil || info.RuntimePolicy.PodGroupPolicy == nil || info.RuntimePolicy.PodGroupPolicy.Volcano == nil || trainJob == nil {
+		return nil, nil
+	}
+
+	// Do not update the PodGroup if it already exists and the TrainJob is not suspended
+	oldPodGroup := &volcanov1beta1.PodGroup{}
+	if err := v.client.Get(ctx, client.ObjectKeyFromObject(trainJob), oldPodGroup); err != nil {
+		if !apierrors.IsNotFound(err) {
+			return nil, err
+		}
+		oldPodGroup = nil
+	}
+	if oldPodGroup != nil && !ptr.Deref(trainJob.Spec.Suspend, false) {
+		return nil, nil
+	}
+
+	volcanoSpec := info.RuntimePolicy.PodGroupPolicy.Volcano
+
+	// Aggregate pod resource requests
+	var totalMembers int32
+	totalResources := make(corev1.ResourceList)
+	for _, ps := range info.TemplateSpec.PodSets {
+		count := *ps.Count
+		totalMembers += count
+		for resName, quantity := range ps.SinglePodRequests {
+			quantity.Mul(int64(count))
+			current := totalResources[resName]
+			current.Add(quantity)
+			totalResources[resName] = current
+		}
+	}
+	pg := volcanov1beta1ac.PodGroup(trainJob.Name, trainJob.Namespace).
+		WithSpec(volcanov1beta1ac.PodGroupSpec().
+			WithMinMember(totalMembers).
+			WithMinResources(totalResources))
+
+	// Configure queue via annotations `scheduling.volcano.sh/queue-name`.
+	// The field is initially set in TrainingRuntime, but can be overridden by the TrainJob.
+	if queue, ok := info.Annotations[volcanov1beta1.QueueNameAnnotationKey]; ok {
+		pg.Spec.WithQueue(queue)
+	}
+
+	// Configure priorityClassName from the Pod template
+	jobSetSpec, ok := runtime.TemplateSpecApply[v1alpha2.JobSetSpecApplyConfiguration](info)
+	if ok && jobSetSpec != nil {
+		for _, rj := range jobSetSpec.ReplicatedJobs {
+			if rj.Template != nil && rj.Template.Spec != nil && rj.Template.Spec.Template != nil && rj.Template.Spec.Template.Spec != nil {
+				priorityClassName := rj.Template.Spec.Template.Spec.PriorityClassName
+				if priorityClassName != nil {
+					pg.Spec.WithPriorityClassName(*priorityClassName)
+				}
+			}
+		}
+	}
+
+	if volcanoSpec.NetworkTopology != nil {
+		pg.Spec.WithNetworkTopology(volcanov1beta1ac.NetworkTopologySpec().
+			WithMode(volcanoSpec.NetworkTopology.Mode).
+			WithHighestTierAllowed(*volcanoSpec.NetworkTopology.HighestTierAllowed))
+	}
+
+	pg.WithOwnerReferences(metav1ac.OwnerReference().
+		WithAPIVersion(trainer.GroupVersion.String()).
+		WithKind(trainer.TrainJobKind).
+		WithName(trainJob.Name).
+		WithUID(trainJob.UID).
+		WithController(true).
+		WithBlockOwnerDeletion(true))
+
+	return []any{pg}, nil
+}
+
+type PodGroupRuntimeClassHandler struct {
+	client client.Client
+}
+
+var _ handler.TypedEventHandler[*nodev1.RuntimeClass, reconcile.Request] = (*PodGroupRuntimeClassHandler)(nil)
+
+func (h *PodGroupRuntimeClassHandler) Create(ctx context.Context, e event.TypedCreateEvent[*nodev1.RuntimeClass], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+	containerRuntimeClass := e.Object
+	log := ctrl.LoggerFrom(ctx).WithValues("runtimeClass", klog.KObj(containerRuntimeClass))
+	if err := h.queueSuspendedTrainJobs(ctx, containerRuntimeClass, q); err != nil {
+		log.Error(err, "could not queue suspended TrainJob to reconcile queue")
+	}
+}
+
+func (h *PodGroupRuntimeClassHandler) Update(ctx context.Context, e event.TypedUpdateEvent[*nodev1.RuntimeClass], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+	newContainerRuntimeClass := e.ObjectNew
+	log := ctrl.LoggerFrom(ctx).WithValues("runtimeClass", klog.KObj(newContainerRuntimeClass))
+	if err := h.queueSuspendedTrainJobs(ctx, newContainerRuntimeClass, q); err != nil {
+		log.Error(err, "could not queue suspended TrainJob to reconcile queue")
+	}
+}
+
+func (h *PodGroupRuntimeClassHandler) Delete(ctx context.Context, e event.TypedDeleteEvent[*nodev1.RuntimeClass], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+	containerRuntimeClass := e.Object
+	log := ctrl.LoggerFrom(ctx).WithValues("runtimeClass", klog.KObj(containerRuntimeClass))
+	if err := h.queueSuspendedTrainJobs(ctx, containerRuntimeClass, q); err != nil {
+		log.Error(err, "could not queue suspended TrainJob to reconcile queue")
+	}
+}
+
+func (h *PodGroupRuntimeClassHandler) Generic(context.Context, event.TypedGenericEvent[*nodev1.RuntimeClass], workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+}
+
+func (h *PodGroupRuntimeClassHandler) queueSuspendedTrainJobs(ctx context.Context, runtimeClass *nodev1.RuntimeClass, q workqueue.TypedRateLimitingInterface[reconcile.Request]) error {
+	var trainingRuntimes trainer.TrainingRuntimeList
+	if err := h.client.List(ctx, &trainingRuntimes, client.MatchingFields{index.TrainingRuntimeContainerRuntimeClassKey: runtimeClass.Name}); err != nil {
+		return err
+	}
+	var clusterTrainingRuntimes trainer.ClusterTrainingRuntimeList
+	if err := h.client.List(ctx, &clusterTrainingRuntimes, client.MatchingFields{index.ClusterTrainingRuntimeContainerRuntimeClassKey: runtimeClass.Name}); err != nil {
+		return err
+	}
+
+	var trainJobs []trainer.TrainJob
+	for _, trainingRuntime := range trainingRuntimes.Items {
+		var trainJobsWithTrainingRuntime trainer.TrainJobList
+		err := h.client.List(ctx, &trainJobsWithTrainingRuntime, client.MatchingFields{runtimeindexer.TrainJobRuntimeRefKey: trainingRuntime.Name})
+		if err != nil {
+			return err
+		}
+		trainJobs = append(trainJobs, trainJobsWithTrainingRuntime.Items...)
+	}
+	for _, clusterTrainingRuntime := range clusterTrainingRuntimes.Items {
+		var trainJobsWithClTrainingRuntime trainer.TrainJobList
+		err := h.client.List(ctx, &trainJobsWithClTrainingRuntime, client.MatchingFields{runtimeindexer.TrainJobClusterRuntimeRefKey: clusterTrainingRuntime.Name})
+		if err != nil {
+			return err
+		}
+		trainJobs = append(trainJobs, trainJobsWithClTrainingRuntime.Items...)
+	}
+	trainJobs = slices.CompactFunc(trainJobs, func(a, b trainer.TrainJob) bool {
+		return a.Name == b.Name
+	})
+	for _, trainJob := range trainJobs {
+		if ptr.Deref(trainJob.Spec.Suspend, false) {
+			q.Add(reconcile.Request{NamespacedName: client.ObjectKeyFromObject(&trainJob)})
+		}
+	}
+	return nil
+}
+
+type PodGroupLimitRangeHandler struct {
+	client client.Client
+}
+
+var _ handler.TypedEventHandler[*corev1.LimitRange, reconcile.Request] = (*PodGroupLimitRangeHandler)(nil)
+
+func (h *PodGroupLimitRangeHandler) Create(ctx context.Context, e event.TypedCreateEvent[*corev1.LimitRange], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+	limitRange := e.Object
+	log := ctrl.LoggerFrom(ctx).WithValues("limitRange", klog.KObj(limitRange))
+	if err := h.queueSuspendedTrainJob(ctx, limitRange.Namespace, q); err != nil {
+		log.Error(err, "could not queue suspended TrainJob to reconcile queue")
+	}
+}
+
+func (h *PodGroupLimitRangeHandler) Update(ctx context.Context, e event.TypedUpdateEvent[*corev1.LimitRange], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+	newLimitRange := e.ObjectNew
+	log := ctrl.LoggerFrom(ctx).WithValues("limitRange", klog.KObj(newLimitRange))
+	if err := h.queueSuspendedTrainJob(ctx, newLimitRange.Namespace, q); err != nil {
+		log.Error(err, "could not queue suspended TrainJob to reconcile queue")
+	}
+}
+
+func (h *PodGroupLimitRangeHandler) Delete(ctx context.Context, e event.TypedDeleteEvent[*corev1.LimitRange], q workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+	limitRange := e.Object
+	log := ctrl.LoggerFrom(ctx).WithValues("limitRange", klog.KObj(limitRange))
+	if err := h.queueSuspendedTrainJob(ctx, limitRange.Namespace, q); err != nil {
+		log.Error(err, "could not queue suspended TrainJob to reconcile queue")
+	}
+}
+
+func (h *PodGroupLimitRangeHandler) Generic(context.Context, event.TypedGenericEvent[*corev1.LimitRange], workqueue.TypedRateLimitingInterface[reconcile.Request]) {
+}
+
+func (h *PodGroupLimitRangeHandler) queueSuspendedTrainJob(ctx context.Context, ns string, q workqueue.TypedRateLimitingInterface[reconcile.Request]) error {
+	var trainJobs trainer.TrainJobList
+	if err := h.client.List(ctx, &trainJobs, client.InNamespace(ns)); err != nil {
+		return err
+	}
+	for _, trainJob := range trainJobs.Items {
+		if ptr.Deref(trainJob.Spec.Suspend, false) {
+			q.Add(reconcile.Request{NamespacedName: client.ObjectKeyFromObject(&trainJob)})
+		}
+	}
+	return nil
+}
+
+func (v *Volcano) ReconcilerBuilders() []runtime.ReconcilerBuilder {
+	if _, err := v.restMapper.RESTMapping(
+		schema.GroupKind{Group: volcanov1beta1.SchemeGroupVersion.Group, Kind: "PodGroup"},
+		volcanov1beta1.SchemeGroupVersion.Version,
+	); err != nil {
+		v.logger.Error(err, "PodGroup CRDs must be installed in advance")
+		return nil
+	}
+	return []runtime.ReconcilerBuilder{
+		func(b *builder.Builder, cl client.Client, cache cache.Cache) *builder.Builder {
+			return b.Watches(
+				&volcanov1beta1.PodGroup{},
+				handler.EnqueueRequestForOwner(
+					v.client.Scheme(), v.client.RESTMapper(), &trainer.TrainJob{}, handler.OnlyControllerOwner(),
+				),
+			)
+		},
+		func(b *builder.Builder, cl client.Client, cache cache.Cache) *builder.Builder {
+			return b.WatchesRawSource(source.TypedKind[*corev1.LimitRange, reconcile.Request](cache, &corev1.LimitRange{}, &PodGroupLimitRangeHandler{
+				client: cl,
+			}))
+		},
+		func(b *builder.Builder, cl client.Client, cache cache.Cache) *builder.Builder {
+			return b.WatchesRawSource(source.TypedKind[*nodev1.RuntimeClass, reconcile.Request](cache, &nodev1.RuntimeClass{}, &PodGroupRuntimeClassHandler{
+				client: cl,
+			}))
+		},
+	}
+}
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/indexer/indexer.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/indexer/indexer.go
index 036b75f9a..b421708a4 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/indexer/indexer.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/indexer/indexer.go
@@ -17,6 +17,8 @@ limitations under the License.
 package indexer
 
 import (
+	"errors"
+
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
@@ -29,6 +31,41 @@ const (
 	TrainJobClusterRuntimeRefKey = ".spec.runtimeRef.kind=clusterTrainingRuntime"
 )
 
+var (
+	TrainingRuntimeContainerRuntimeClassKey                   = ".trainingRuntimeSpec.jobSetTemplateSpec.replicatedJobs.podTemplateSpec.runtimeClassName"
+	ClusterTrainingRuntimeContainerRuntimeClassKey            = ".clusterTrainingRuntimeSpec.jobSetTemplateSpec.replicatedJobs.podTemplateSpec.runtimeClassName"
+	ErrorCanNotSetupTrainingRuntimeRuntimeClassIndexer        = errors.New("setting index on runtimeClass for TrainingRuntime")
+	ErrorCanNotSetupClusterTrainingRuntimeRuntimeClassIndexer = errors.New("setting index on runtimeClass for ClusterTrainingRuntime")
+)
+
+func IndexTrainingRuntimeContainerRuntimeClass(obj client.Object) []string {
+	runtime, ok := obj.(*trainer.TrainingRuntime)
+	if !ok {
+		return nil
+	}
+	var runtimeClasses []string
+	for _, rJob := range runtime.Spec.Template.Spec.ReplicatedJobs {
+		if rJob.Template.Spec.Template.Spec.RuntimeClassName != nil {
+			runtimeClasses = append(runtimeClasses, *rJob.Template.Spec.Template.Spec.RuntimeClassName)
+		}
+	}
+	return runtimeClasses
+}
+
+func IndexClusterTrainingRuntimeContainerRuntimeClass(obj client.Object) []string {
+	clRuntime, ok := obj.(*trainer.ClusterTrainingRuntime)
+	if !ok {
+		return nil
+	}
+	var runtimeClasses []string
+	for _, rJob := range clRuntime.Spec.Template.Spec.ReplicatedJobs {
+		if rJob.Template.Spec.Template.Spec.RuntimeClassName != nil {
+			runtimeClasses = append(runtimeClasses, *rJob.Template.Spec.Template.Spec.RuntimeClassName)
+		}
+	}
+	return runtimeClasses
+}
+
 func IndexTrainJobTrainingRuntime(obj client.Object) []string {
 	trainJob, ok := obj.(*trainer.TrainJob)
 	if !ok {
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/interface.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/interface.go
index 6f49bace3..3e831b8fa 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/interface.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/interface.go
@@ -19,7 +19,6 @@ package runtime
 import (
 	"context"
 
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/util/validation/field"
 	"sigs.k8s.io/controller-runtime/pkg/builder"
 	"sigs.k8s.io/controller-runtime/pkg/cache"
@@ -38,7 +37,7 @@ type Runtime interface {
 
 	NewObjects(ctx context.Context, trainJob *trainer.TrainJob) ([]any, error)
 	RuntimeInfo(trainJob *trainer.TrainJob, runtimeTemplateSpec any, mlPolicy *trainer.MLPolicy, podGroupPolicy *trainer.PodGroupPolicy) (*Info, error)
-	TerminalCondition(ctx context.Context, trainJob *trainer.TrainJob) (*metav1.Condition, error)
+	TrainJobStatus(ctx context.Context, trainJob *trainer.TrainJob) (*trainer.TrainJobStatus, error)
 	EventHandlerRegistrars() []ReconcilerBuilder
 	ValidateObjects(ctx context.Context, old, new *trainer.TrainJob) (admission.Warnings, field.ErrorList)
 }
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/runtime.go b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/runtime.go
index 71b5c533f..ec7ed3bdd 100644
--- a/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/runtime.go
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/runtime/runtime.go
@@ -20,14 +20,17 @@ import (
 	"iter"
 	"maps"
 	"slices"
+	"strings"
 
 	corev1 "k8s.io/api/core/v1"
 	"k8s.io/apimachinery/pkg/runtime/schema"
 	corev1ac "k8s.io/client-go/applyconfigurations/core/v1"
 	resourcehelpers "k8s.io/component-helpers/resource"
 	"k8s.io/utils/ptr"
+	jobsetv1alpha2ac "sigs.k8s.io/jobset/client-go/applyconfiguration/jobset/v1alpha2"
 
 	trainer "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1"
+	"github.com/kubeflow/trainer/v2/pkg/constants"
 )
 
 var (
@@ -87,7 +90,8 @@ type Container struct {
 
 // TODO (andreyvelich): Potentially, we can add ScheduleTimeoutSeconds to the Scheduler for consistency.
 type Scheduler struct {
-	PodLabels map[string]string
+	PodLabels      map[string]string
+	PodAnnotations map[string]string
 }
 
 type InfoOptions struct {
@@ -239,3 +243,50 @@ func RuntimeRefToRuntimeRegistryKey(runtimeRef trainer.RuntimeRef) string {
 		Kind:  ptr.Deref(runtimeRef.Kind, ""),
 	}.String()
 }
+
+// ExtractResourcePerNodeFromRuntime extracts the Trainer resource per node from the Info object.
+func ExtractResourcePerNodeFromRuntime(info *Info) *corev1.ResourceRequirements {
+	if jobSetSpec, ok := TemplateSpecApply[jobsetv1alpha2ac.JobSetSpecApplyConfiguration](info); ok {
+		for _, rJob := range jobSetSpec.ReplicatedJobs {
+			if rJob.Name != nil && *rJob.Name == constants.Node || rJob.Template.Labels[constants.LabelTrainJobAncestor] == constants.AncestorTrainer {
+				for _, container := range rJob.Template.Spec.Template.Spec.Containers {
+					if container.Name != nil && *container.Name == constants.Node && container.Resources != nil {
+						res := &corev1.ResourceRequirements{
+							Limits:   corev1.ResourceList{},
+							Requests: corev1.ResourceList{},
+						}
+						if container.Resources.Limits != nil {
+							res.Limits = *container.Resources.Limits
+						}
+						if container.Resources.Requests != nil {
+							res.Requests = *container.Resources.Requests
+						}
+						return res
+					}
+				}
+			}
+		}
+	}
+	return nil
+}
+
+// GetNumGPUPerNode returns the GPU count if found in container resources.
+func GetNumGPUPerNode(res *corev1.ResourceRequirements) int {
+	if res == nil {
+		return 0
+	}
+	gpuQ := numGPU(res.Requests)
+	if limitGpuQ := numGPU(res.Limits); gpuQ == 0 && limitGpuQ > 0 {
+		gpuQ = limitGpuQ
+	}
+	return gpuQ
+}
+
+func numGPU(resourcePerNode corev1.ResourceList) int {
+	for resName, resQ := range resourcePerNode {
+		if strings.Contains(strings.ToLower(resName.String()), "gpu") {
+			return int(resQ.Value())
+		}
+	}
+	return 0
+}
diff --git a/vendor/github.com/kubeflow/trainer/v2/pkg/util/trainingruntime/trainingruntime.go b/vendor/github.com/kubeflow/trainer/v2/pkg/util/trainingruntime/trainingruntime.go
new file mode 100644
index 000000000..84d5d61a6
--- /dev/null
+++ b/vendor/github.com/kubeflow/trainer/v2/pkg/util/trainingruntime/trainingruntime.go
@@ -0,0 +1,12 @@
+package trainingruntime
+
+import "github.com/kubeflow/trainer/v2/pkg/constants"
+
+// IsSupportDeprecated returns true if TrainingRuntime labels indicate support=deprecated.
+func IsSupportDeprecated(labels map[string]string) bool {
+	if labels == nil {
+		return false
+	}
+	val, ok := labels[constants.LabelSupport]
+	return ok && val == constants.SupportDeprecated
+}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 3b555377a..0844ea8db 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -193,7 +193,7 @@ github.com/json-iterator/go
 # github.com/kubeflow/mpi-operator v0.6.0
 ## explicit; go 1.23
 github.com/kubeflow/mpi-operator/pkg/apis/kubeflow/v2beta1
-# github.com/kubeflow/trainer/v2 v2.0.1
+# github.com/kubeflow/trainer/v2 v2.1.0-rc.0
 ## explicit; go 1.24.0
 github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1
 github.com/kubeflow/trainer/v2/pkg/apply
@@ -209,7 +209,9 @@ github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/jobset/constants
 github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/mpi
 github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/plainml
 github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/torch
+github.com/kubeflow/trainer/v2/pkg/runtime/framework/plugins/volcano
 github.com/kubeflow/trainer/v2/pkg/runtime/indexer
+github.com/kubeflow/trainer/v2/pkg/util/trainingruntime
 github.com/kubeflow/trainer/v2/pkg/util/trainjob
 # github.com/kubeflow/training-operator v1.9.3
 ## explicit; go 1.23
@@ -1755,3 +1757,8 @@ sigs.k8s.io/structured-merge-diff/v6/value
 ## explicit; go 1.22
 sigs.k8s.io/yaml
 sigs.k8s.io/yaml/kyaml
+# volcano.sh/apis v1.12.2
+## explicit; go 1.23.0
+volcano.sh/apis/pkg/apis/scheduling
+volcano.sh/apis/pkg/apis/scheduling/v1beta1
+volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1
diff --git a/vendor/volcano.sh/apis/LICENSE b/vendor/volcano.sh/apis/LICENSE
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/vendor/volcano.sh/apis/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/vendor/volcano.sh/apis/pkg/apis/scheduling/doc.go b/vendor/volcano.sh/apis/pkg/apis/scheduling/doc.go
new file mode 100644
index 000000000..4bad97492
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/apis/scheduling/doc.go
@@ -0,0 +1,17 @@
+/*
+Copyright 2019 The Volcano Authors.
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// +k8s:deepcopy-gen=package
+
+// Package scheduling is the internal version of the API.
+package scheduling
diff --git a/vendor/volcano.sh/apis/pkg/apis/scheduling/register.go b/vendor/volcano.sh/apis/pkg/apis/scheduling/register.go
new file mode 100644
index 000000000..5eaaa8325
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/apis/scheduling/register.go
@@ -0,0 +1,42 @@
+/*
+Copyright 2019 The Volcano Authors.
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package scheduling
+
+import (
+	"k8s.io/apimachinery/pkg/runtime"
+	"k8s.io/apimachinery/pkg/runtime/schema"
+)
+
+var (
+	SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
+	AddToScheme   = SchemeBuilder.AddToScheme
+)
+
+// GroupName is the group name used in this package.
+const GroupName = "scheduling.volcano.sh"
+
+// SchemeGroupVersion is the group version used to register these objects.
+var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal}
+
+// addKnownTypes adds the set of types defined in this package to the supplied scheme.
+func addKnownTypes(scheme *runtime.Scheme) error {
+	scheme.AddKnownTypes(SchemeGroupVersion,
+		&PodGroup{},
+		&PodGroupList{},
+		&Queue{},
+		&QueueList{},
+	)
+
+	return nil
+}
diff --git a/vendor/volcano.sh/apis/pkg/apis/scheduling/types.go b/vendor/volcano.sh/apis/pkg/apis/scheduling/types.go
new file mode 100644
index 000000000..d275d21b2
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/apis/scheduling/types.go
@@ -0,0 +1,405 @@
+/*
+Copyright 2019 The Volcano Authors.
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package scheduling
+
+import (
+	v1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// PodGroupPhase is the phase of a pod group at the current time.
+type PodGroupPhase string
+
+// QueueState is state type of queue.
+type QueueState string
+
+const (
+	// QueueStateOpen indicate `Open` state of queue
+	QueueStateOpen QueueState = "Open"
+	// QueueStateClosed indicate `Closed` state of queue
+	QueueStateClosed QueueState = "Closed"
+	// QueueStateClosing indicate `Closing` state of queue
+	QueueStateClosing QueueState = "Closing"
+	// QueueStateUnknown indicate `Unknown` state of queue
+	QueueStateUnknown QueueState = "Unknown"
+)
+
+// These are the valid phase of podGroups.
+const (
+	// PodGroupPending means the pod group has been accepted by the system, but scheduler can not allocate
+	// enough resources to it.
+	PodGroupPending PodGroupPhase = "Pending"
+
+	// PodGroupRunning means `spec.minMember` pods of PodGroup has been in running phase.
+	PodGroupRunning PodGroupPhase = "Running"
+
+	// PodGroupUnknown means part of `spec.minMember` pods are running but the other part can not
+	// be scheduled, e.g. not enough resource; scheduler will wait for related controller to recover it.
+	PodGroupUnknown PodGroupPhase = "Unknown"
+
+	// PodGroupInqueue means controllers can start to create pods,
+	// is a new state between PodGroupPending and PodGroupRunning
+	PodGroupInqueue PodGroupPhase = "Inqueue"
+
+	// PodGroupCompleted means all the pods of PodGroup are completed
+	PodGroupCompleted PodGroupPhase = "Completed"
+)
+
+type PodGroupConditionType string
+
+const (
+	// PodGroupUnschedulableType is Unschedulable event type
+	PodGroupUnschedulableType PodGroupConditionType = "Unschedulable"
+
+	// PodGroupScheduled is scheduled event type
+	PodGroupScheduled PodGroupConditionType = "Scheduled"
+)
+
+type PodGroupConditionDetail string
+
+const (
+	// PodGroupReady is that PodGroup has reached scheduling restriction
+	PodGroupReady PodGroupConditionDetail = "pod group is ready"
+	// PodGroupNotReady is that PodGroup has not yet reached the scheduling restriction
+	PodGroupNotReady PodGroupConditionDetail = "pod group is not ready"
+)
+
+// PodGroupCondition contains details for the current state of this pod group.
+type PodGroupCondition struct {
+	// Type is the type of the condition
+	Type PodGroupConditionType
+
+	// Status is the status of the condition.
+	Status v1.ConditionStatus
+
+	// The ID of condition transition.
+	TransitionID string
+
+	// Last time the phase transitioned from another to current phase.
+	// +optional
+	LastTransitionTime metav1.Time
+
+	// Unique, one-word, CamelCase reason for the phase's last transition.
+	// +optional
+	Reason string
+
+	// Human-readable message indicating details about last transition.
+	// +optional
+	Message string
+}
+
+const (
+	// PodFailedReason is probed if pod of PodGroup failed
+	PodFailedReason string = "PodFailed"
+
+	// PodDeletedReason is probed if pod of PodGroup deleted
+	PodDeletedReason string = "PodDeleted"
+
+	// NotEnoughResourcesReason is probed if there're not enough resources to schedule pods
+	NotEnoughResourcesReason string = "NotEnoughResources"
+
+	// NotEnoughPodsReason is probed if there're not enough tasks compared to `spec.minMember`
+	NotEnoughPodsReason string = "NotEnoughTasks"
+)
+
+// QueueEvent represent the phase of queue.
+type QueueEvent string
+
+const (
+	// QueueOutOfSyncEvent is triggered if PodGroup/Queue were updated
+	QueueOutOfSyncEvent QueueEvent = "OutOfSync"
+	// QueueCommandIssuedEvent is triggered if a command is raised by user
+	QueueCommandIssuedEvent QueueEvent = "CommandIssued"
+)
+
+// QueueAction is the action that queue controller will take according to the event.
+type QueueAction string
+
+const (
+	// SyncQueueAction is the action to sync queue status.
+	SyncQueueAction QueueAction = "SyncQueue"
+	// OpenQueueAction is the action to open queue
+	OpenQueueAction QueueAction = "OpenQueue"
+	// CloseQueueAction is the action to close queue
+	CloseQueueAction QueueAction = "CloseQueue"
+)
+
+// +genclient
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+
+// PodGroup is a collection of Pod; used for batch workload.
+// +kubebuilder:printcolumn:name="STATUS",type=string,JSONPath=`.status.phase`
+// +kubebuilder:printcolumn:name="minMember",type=integer,JSONPath=`.spec.minMember`
+// +kubebuilder:printcolumn:name="RUNNINGS",type=integer,JSONPath=`.status.running`
+// +kubebuilder:printcolumn:name="AGE",type=date,JSONPath=`.metadata.creationTimestamp`
+// +kubebuilder:printcolumn:name="QUEUE",type=string,priority=1,JSONPath=`.spec.queue`
+type PodGroup struct {
+	metav1.TypeMeta
+	// Standard object's metadata.
+	// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+	// +optional
+	metav1.ObjectMeta
+
+	// Specification of the desired behavior of the pod group.
+	// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+	// +optional
+	Spec PodGroupSpec
+
+	// Status represents the current information about a pod group.
+	// This data may not be up to date.
+	// +optional
+	Status PodGroupStatus
+}
+
+// PodGroupSpec represents the template of a pod group.
+type PodGroupSpec struct {
+	// MinMember defines the minimal number of members/tasks to run the pod group;
+	// if there's not enough resources to start all tasks, the scheduler
+	// will not start anyone.
+	MinMember int32
+
+	// MinTaskMember defines the minimal number of pods to run for each task in the pod group;
+	// if there's not enough resources to start each task, the scheduler
+	// will not start anyone.
+	MinTaskMember map[string]int32
+
+	// Queue defines the queue to allocate resource for PodGroup; if queue does not exist,
+	// the PodGroup will not be scheduled.
+	// +kubebuilder:default:="default"
+	Queue string
+
+	// If specified, indicates the PodGroup's priority. "system-node-critical" and
+	// "system-cluster-critical" are two special keywords which indicate the
+	// highest priorities with the former being the highest priority. Any other
+	// name must be defined by creating a PriorityClass object with that name.
+	// If not specified, the PodGroup priority will be default or zero if there is no
+	// default.
+	// +optional
+	PriorityClassName string
+
+	// MinResources defines the minimal resource of members/tasks to run the pod group;
+	// if there's not enough resources to start all tasks, the scheduler
+	// will not start anyone.
+	MinResources *v1.ResourceList
+
+	// NetworkTopology defines the NetworkTopology config, this field works in conjunction with network topology feature and hyperNode CRD.
+	// +optional
+	NetworkTopology *NetworkTopologySpec
+}
+
+// NetworkTopologyMode represents the networkTopology mode, valid values are "hard" and "soft".
+// +kubebuilder:validation:Enum=hard;soft
+type NetworkTopologyMode string
+
+const (
+	// HardNetworkTopologyMode represents a strict network topology constraint that jobs must adhere to.
+	HardNetworkTopologyMode NetworkTopologyMode = "hard"
+
+	// SoftNetworkTopologyMode represents a flexible network topology constraint that
+	// allows jobs to cross network boundaries under certain conditions.
+	SoftNetworkTopologyMode NetworkTopologyMode = "soft"
+)
+
+type NetworkTopologySpec struct {
+	// Mode specifies the mode of the network topology constrain.
+	// +kubebuilder:default=hard
+	// +optional
+	Mode NetworkTopologyMode
+
+	// HighestTierAllowed specifies the highest tier that a job allowed to cross when scheduling.
+	// +kubebuilder:default=1
+	// +optional
+	HighestTierAllowed *int
+}
+
+// PodGroupStatus represents the current state of a pod group.
+type PodGroupStatus struct {
+	// Current phase of PodGroup.
+	Phase PodGroupPhase
+
+	// The conditions of PodGroup.
+	// +optional
+	Conditions []PodGroupCondition
+
+	// The number of actively running pods.
+	// +optional
+	Running int32
+
+	// The number of pods which reached phase Succeeded.
+	// +optional
+	Succeeded int32
+
+	// The number of pods which reached phase Failed.
+	// +optional
+	Failed int32
+}
+
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+
+// PodGroupList is a collection of pod groups.
+type PodGroupList struct {
+	metav1.TypeMeta
+	// Standard list metadata
+	// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+	// +optional
+	metav1.ListMeta
+
+	// items is the list of PodGroup
+	Items []PodGroup
+}
+
+// +genclient
+// +genclient:nonNamespaced
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+
+// Queue is a queue of PodGroup.
+type Queue struct {
+	metav1.TypeMeta
+	// Standard object's metadata.
+	// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+	// +optional
+	metav1.ObjectMeta
+
+	// Specification of the desired behavior of the queue.
+	// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+	// +optional
+	Spec QueueSpec
+
+	// The status of queue.
+	// +optional
+	Status QueueStatus
+}
+
+// Guarantee represents configuration of queue resource reservation
+type Guarantee struct {
+	// The amount of cluster resource reserved for queue. Just set either `percentage` or `resource`
+	// +optional
+	Resource v1.ResourceList `json:"resource,omitempty" protobuf:"bytes,3,opt,name=resource"`
+}
+
+// Reservation represents current condition about resource reservation
+type Reservation struct {
+	// Nodes are Locked nodes for queue
+	// +optional
+	Nodes []string `json:"nodes,omitempty" protobuf:"bytes,1,opt,name=nodes"`
+	// Resource is a list of total idle resource in locked nodes.
+	// +optional
+	Resource v1.ResourceList `json:"resource,omitempty" protobuf:"bytes,2,opt,name=resource"`
+}
+
+// QueueStatus represents the status of Queue.
+type QueueStatus struct {
+	// State is status of queue
+	State QueueState
+
+	// The number of 'Unknown' PodGroup in this queue.
+	Unknown int32
+	// The number of 'Pending' PodGroup in this queue.
+	Pending int32
+	// The number of 'Running' PodGroup in this queue.
+	Running int32
+	// The number of `Inqueue` PodGroup in this queue.
+	Inqueue int32
+	// The number of `Completed` PodGroup in this queue.
+	Completed int32
+
+	// Reservation is the profile of resource reservation for queue
+	Reservation Reservation
+
+	// Allocated is allocated resources in queue
+	// +optional
+	Allocated v1.ResourceList
+}
+
+// CluterSpec represents the template of Cluster
+type Cluster struct {
+	Name     string
+	Weight   int32
+	Capacity v1.ResourceList
+}
+
+// Affinity is a group of affinity scheduling rules.
+type Affinity struct {
+	// Describes nodegroup affinity scheduling rules for the queue.
+	// +optional
+	NodeGroupAffinity *NodeGroupAffinity `json:"nodeGroupAffinity,omitempty" protobuf:"bytes,1,opt,name=nodeGroupAffinity"`
+
+	// Describes nodegroup affinity scheduling rules for the queue.
+	// +optional
+	NodeGroupAntiAffinity *NodeGroupAntiAffinity `json:"nodeGroupAntiAffinity,omitempty" protobuf:"bytes,2,opt,name=nodeGroupAntiAffinity"`
+}
+
+type NodeGroupAffinity struct {
+	// +optional
+	RequiredDuringSchedulingIgnoredDuringExecution []string `json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,1,opt,name=requiredDuringSchedulingIgnoredDuringExecution"`
+	// +optional
+	PreferredDuringSchedulingIgnoredDuringExecution []string `json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,2,rep,name=preferredDuringSchedulingIgnoredDuringExecution"`
+}
+
+type NodeGroupAntiAffinity struct {
+	// +optional
+	RequiredDuringSchedulingIgnoredDuringExecution []string `json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,1,opt,name=requiredDuringSchedulingIgnoredDuringExecution"`
+	// +optional
+	PreferredDuringSchedulingIgnoredDuringExecution []string `json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,2,rep,name=preferredDuringSchedulingIgnoredDuringExecution"`
+}
+
+// QueueSpec represents the template of Queue.
+type QueueSpec struct {
+	Weight     int32
+	Capability v1.ResourceList
+
+	// Depreicated: replaced by status.State
+	State QueueState
+	// Reclaimable indicate whether the queue can be reclaimed by other queue
+	Reclaimable *bool
+
+	// extendCluster indicate the jobs in this Queue will be dispatched to these clusters.
+	ExtendClusters []Cluster
+
+	// Guarantee indicate configuration about resource reservation
+	Guarantee Guarantee `json:"guarantee,omitempty" protobuf:"bytes,4,opt,name=guarantee"`
+
+	// If specified, the queue's scheduling constraints
+	// +optional
+	Affinity *Affinity `json:"affinity,omitempty" protobuf:"bytes,6,opt,name=affinity"`
+
+	// Type define the type of queue
+	Type string `json:"type,omitempty" protobuf:"bytes,7,opt,name=type"`
+
+	// Parent define the parent of queue
+	// +optional
+	Parent string `json:"parent,omitempty" protobuf:"bytes,8,opt,name=parent"`
+
+	// The amount of resources configured by the user. This part of resource can be shared with other queues and reclaimed back.
+	// +optional
+	Deserved v1.ResourceList `json:"deserved,omitempty" protobuf:"bytes,9,opt,name=deserved"`
+
+	// Priority define the priority of queue. Higher values are prioritized for scheduling and considered later during reclamation.
+	// +optional
+	Priority int32 `json:"priority,omitempty" protobuf:"bytes,10,opt,name=priority"`
+}
+
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+
+// QueueList is a collection of queues.
+type QueueList struct {
+	metav1.TypeMeta
+	// Standard list metadata
+	// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+	// +optional
+	metav1.ListMeta
+
+	// items is the list of PodGroup
+	Items []Queue
+}
diff --git a/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/conversion.go b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/conversion.go
new file mode 100644
index 000000000..e903517bd
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/conversion.go
@@ -0,0 +1,34 @@
+/*
+Copyright 2020 The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1beta1
+
+import (
+	unsafe "unsafe"
+
+	v1 "k8s.io/api/core/v1"
+	conversion "k8s.io/apimachinery/pkg/conversion"
+	scheduling "volcano.sh/apis/pkg/apis/scheduling"
+)
+
+func Convert_scheduling_QueueSpec_To_v1beta1_QueueSpec(in *scheduling.QueueSpec, out *QueueSpec, s conversion.Scope) error {
+	out.Weight = in.Weight
+	out.Capability = *(*v1.ResourceList)(unsafe.Pointer(&in.Capability))
+	out.Reclaimable = (*bool)(unsafe.Pointer(in.Reclaimable))
+	out.Parent = in.Parent
+
+	return nil
+}
diff --git a/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/doc.go b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/doc.go
new file mode 100644
index 000000000..620c13774
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/doc.go
@@ -0,0 +1,24 @@
+/*
+Copyright 2019 The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Package v1beta1 contains API Schema definitions for the scheduling v1beta1 API group
+// +kubebuilder:object:generate=true
+// +groupName=scheduling.volcano.sh
+// +k8s:deepcopy-gen=package
+// +k8s:openapi-gen=true
+// +k8s:conversion-gen=volcano.sh/apis/pkg/apis/scheduling
+
+package v1beta1
diff --git a/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/labels.go b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/labels.go
new file mode 100644
index 000000000..02ffe6ba3
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/labels.go
@@ -0,0 +1,73 @@
+/*
+Copyright 2019 The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1beta1
+
+// AnnotationPrefix is the key prefix to pick annotations from upper resource to podgroup
+const AnnotationPrefix = "volcano.sh/"
+
+// JobWaitingTime is the key of sla plugin to set maximum waiting time
+// that a job could stay Pending in service level agreement
+const JobWaitingTime = "volcano.sh/sla-waiting-time"
+
+const KubeHierarchyAnnotationKey = "volcano.sh/hierarchy"
+
+const KubeHierarchyWeightAnnotationKey = "volcano.sh/hierarchy-weights"
+
+// KubeGroupNameAnnotationKey is the annotation key of Pod to identify
+// which PodGroup it belongs to.
+const KubeGroupNameAnnotationKey = "scheduling.k8s.io/group-name"
+
+// VolcanoGroupNameAnnotationKey is the annotation key of Pod to identify
+// which PodGroup it belongs to.
+const VolcanoGroupNameAnnotationKey = GroupName + "/group-name"
+
+// VolcanoGroupMinMemberAnnotationKey is the annotation key of Pod controllers (e.g. Deployment) to identify
+// the minimum member of PodGroup.
+const VolcanoGroupMinMemberAnnotationKey = GroupName + "/group-min-member"
+
+// VolcanoGroupMinResourcesAnnotationKey is the annotation key of PodGroup's PodGroup.Spec.MinResources
+// which PodGroup it belongs to.
+const VolcanoGroupMinResourcesAnnotationKey = GroupName + "/group-min-resources"
+
+// QueueNameAnnotationKey is the annotation key of Pod to identify
+// which queue it belongs to.
+const QueueNameAnnotationKey = GroupName + "/queue-name"
+
+// PodPreemptable is the key of preemptable
+const PodPreemptable = "volcano.sh/preemptable"
+
+// CooldownTime is the key of cooldown-time, value's format "600s","10m"
+// Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
+const CooldownTime = "volcano.sh/cooldown-time"
+
+// RevocableZone is the key of revocable-zone
+const RevocableZone = "volcano.sh/revocable-zone"
+
+// JDBMinAvailable is the key of min available pod number
+const JDBMinAvailable = "volcano.sh/jdb-min-available"
+
+// JDBMaxUnavailable is the key of max unavailable pod number
+const JDBMaxUnavailable = "volcano.sh/jdb-max-unavailable"
+
+// NumaPolicyKey is the key of pod numa-topology policy
+const NumaPolicyKey = "volcano.sh/numa-topology-policy"
+
+// TopologyDecisionAnnotation is the key of topology decision about pod request resource
+const TopologyDecisionAnnotation = "volcano.sh/topology-decision"
+
+// PodQosLevel is the key of pod qos level
+const PodQosLevel = "volcano.sh/qos-level"
diff --git a/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/register.go b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/register.go
new file mode 100644
index 000000000..43b6a435e
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/register.go
@@ -0,0 +1,58 @@
+/*
+Copyright 2019 The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1beta1
+
+import (
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/runtime"
+	"k8s.io/apimachinery/pkg/runtime/schema"
+)
+
+var (
+	SchemeBuilder      = runtime.NewSchemeBuilder(addKnownTypes)
+	localSchemeBuilder = &SchemeBuilder
+	AddToScheme        = SchemeBuilder.AddToScheme
+)
+
+const (
+	// GroupName is the group name used in this package.
+	GroupName = "scheduling.volcano.sh"
+
+	// GroupVersion is the version of scheduling group
+	GroupVersion = "v1beta1"
+)
+
+// SchemeGroupVersion is the group version used to register these objects.
+var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: GroupVersion}
+
+// Resource takes an unqualified resource and returns a Group-qualified GroupResource.
+func Resource(resource string) schema.GroupResource {
+	return SchemeGroupVersion.WithResource(resource).GroupResource()
+}
+
+// addKnownTypes adds the set of types defined in this package to the supplied scheme.
+func addKnownTypes(scheme *runtime.Scheme) error {
+	scheme.AddKnownTypes(SchemeGroupVersion,
+		&PodGroup{},
+		&PodGroupList{},
+		&Queue{},
+		&QueueList{},
+	)
+
+	metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
+	return nil
+}
diff --git a/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/types.go b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/types.go
new file mode 100644
index 000000000..5d9146a0e
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/types.go
@@ -0,0 +1,428 @@
+/*
+Copyright 2019 The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1beta1
+
+import (
+	v1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// QueueState is state type of queue.
+type QueueState string
+
+const (
+	// QueueStateOpen indicate `Open` state of queue
+	QueueStateOpen QueueState = "Open"
+	// QueueStateClosed indicate `Closed` state of queue
+	QueueStateClosed QueueState = "Closed"
+	// QueueStateClosing indicate `Closing` state of queue
+	QueueStateClosing QueueState = "Closing"
+	// QueueStateUnknown indicate `Unknown` state of queue
+	QueueStateUnknown QueueState = "Unknown"
+)
+
+// PodGroupPhase is the phase of a pod group at the current time.
+type PodGroupPhase string
+
+// These are the valid phase of podGroups.
+const (
+	// PodGroupPending means the pod group has been accepted by the system, but scheduler can not allocate
+	// enough resources to it.
+	PodGroupPending PodGroupPhase = "Pending"
+
+	// PodGroupRunning means `spec.minMember` pods of PodGroup has been in running phase.
+	PodGroupRunning PodGroupPhase = "Running"
+
+	// PodGroupUnknown means part of `spec.minMember` pods are running but the other part can not
+	// be scheduled, e.g. not enough resource; scheduler will wait for related controller to recover it.
+	PodGroupUnknown PodGroupPhase = "Unknown"
+
+	// PodGroupInqueue means controllers can start to create pods,
+	// is a new state between PodGroupPending and PodGroupRunning
+	PodGroupInqueue PodGroupPhase = "Inqueue"
+
+	// PodGroupCompleted means all the pods of PodGroup are completed
+	PodGroupCompleted PodGroupPhase = "Completed"
+)
+
+type PodGroupConditionType string
+
+const (
+	// PodGroupUnschedulableType is Unschedulable event type
+	PodGroupUnschedulableType PodGroupConditionType = "Unschedulable"
+
+	// PodGroupScheduled is scheduled event type
+	PodGroupScheduled PodGroupConditionType = "Scheduled"
+)
+
+type PodGroupConditionDetail string
+
+const (
+	// PodGroupReady is that PodGroup has reached scheduling restriction
+	PodGroupReady PodGroupConditionDetail = "pod group is ready"
+	// PodGroupNotReady is that PodGroup has not yet reached the scheduling restriction
+	PodGroupNotReady PodGroupConditionDetail = "pod group is not ready"
+)
+
+// PodGroupCondition contains details for the current state of this pod group.
+type PodGroupCondition struct {
+	// Type is the type of the condition
+	Type PodGroupConditionType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type"`
+
+	// Status is the status of the condition.
+	Status v1.ConditionStatus `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"`
+
+	// The ID of condition transition.
+	TransitionID string `json:"transitionID,omitempty" protobuf:"bytes,3,opt,name=transitionID"`
+
+	// Last time the phase transitioned from another to current phase.
+	// +optional
+	LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,4,opt,name=lastTransitionTime"`
+
+	// Unique, one-word, CamelCase reason for the phase's last transition.
+	// +optional
+	Reason string `json:"reason,omitempty" protobuf:"bytes,5,opt,name=reason"`
+
+	// Human-readable message indicating details about last transition.
+	// +optional
+	Message string `json:"message,omitempty" protobuf:"bytes,6,opt,name=message"`
+}
+
+const (
+	// PodFailedReason is probed if pod of PodGroup failed
+	PodFailedReason string = "PodFailed"
+
+	// PodDeletedReason is probed if pod of PodGroup deleted
+	PodDeletedReason string = "PodDeleted"
+
+	// NotEnoughResourcesReason is probed if there're not enough resources to schedule pods
+	NotEnoughResourcesReason string = "NotEnoughResources"
+
+	// NotEnoughPodsReason is probed if there're not enough tasks compared to `spec.minMember`
+	NotEnoughPodsReason string = "NotEnoughTasks"
+
+	// NotEnoughPodsOfTaskReason is probed if there're not enough pods of task compared to `spec.minTaskMember`
+	NotEnoughPodsOfTaskReason string = "NotEnoughPodsOfTask"
+)
+
+// QueueEvent represent the phase of queue.
+type QueueEvent string
+
+const (
+	// QueueOutOfSyncEvent is triggered if PodGroup/Queue were updated
+	QueueOutOfSyncEvent QueueEvent = "OutOfSync"
+	// QueueCommandIssuedEvent is triggered if a command is raised by user
+	QueueCommandIssuedEvent QueueEvent = "CommandIssued"
+)
+
+// QueueAction is the action that queue controller will take according to the event.
+type QueueAction string
+
+const (
+	// SyncQueueAction is the action to sync queue status.
+	SyncQueueAction QueueAction = "SyncQueue"
+	// OpenQueueAction is the action to open queue
+	OpenQueueAction QueueAction = "OpenQueue"
+	// CloseQueueAction is the action to close queue
+	CloseQueueAction QueueAction = "CloseQueue"
+)
+
+// +genclient
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+// +kubebuilder:object:root=true
+// +kubebuilder:resource:path=podgroups,shortName=pg;podgroup-v1beta1
+// +kubebuilder:printcolumn:name="STATUS",type=string,JSONPath=`.status.phase`
+// +kubebuilder:printcolumn:name="minMember",type=integer,JSONPath=`.spec.minMember`
+// +kubebuilder:printcolumn:name="RUNNINGS",type=integer,JSONPath=`.status.running`
+// +kubebuilder:printcolumn:name="AGE",type=date,JSONPath=`.metadata.creationTimestamp`
+// +kubebuilder:printcolumn:name="QUEUE",type=string,priority=1,JSONPath=`.spec.queue`
+
+// PodGroup is a collection of Pod; used for batch workload.
+type PodGroup struct {
+	metav1.TypeMeta `json:",inline"`
+
+	// +optional
+	metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
+
+	// Specification of the desired behavior of the pod group.
+	// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+	// +optional
+	Spec PodGroupSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
+
+	// Status represents the current information about a pod group.
+	// This data may not be up to date.
+	// +optional
+	Status PodGroupStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
+}
+
+// PodGroupSpec represents the template of a pod group.
+type PodGroupSpec struct {
+	// MinMember defines the minimal number of members/tasks to run the pod group;
+	// if there's not enough resources to start all tasks, the scheduler
+	// will not start anyone.
+	MinMember int32 `json:"minMember,omitempty" protobuf:"bytes,1,opt,name=minMember"`
+
+	// MinTaskMember defines the minimal number of pods to run each task in the pod group;
+	// if there's not enough resources to start each task, the scheduler
+	// will not start anyone.
+	MinTaskMember map[string]int32 `json:"minTaskMember,omitempty" protobuf:"bytes,1,opt,name=minTaskMember"`
+
+	// Queue defines the queue to allocate resource for PodGroup; if queue does not exist,
+	// the PodGroup will not be scheduled. Defaults to `default` Queue with the lowest weight.
+	// +optional
+	// +kubebuilder:default:="default"
+	Queue string `json:"queue,omitempty" protobuf:"bytes,2,opt,name=queue"`
+
+	// If specified, indicates the PodGroup's priority. "system-node-critical" and
+	// "system-cluster-critical" are two special keywords which indicate the
+	// highest priorities with the former being the highest priority. Any other
+	// name must be defined by creating a PriorityClass object with that name.
+	// If not specified, the PodGroup priority will be default or zero if there is no
+	// default.
+	// +optional
+	PriorityClassName string `json:"priorityClassName,omitempty" protobuf:"bytes,3,opt,name=priorityClassName"`
+
+	// MinResources defines the minimal resource of members/tasks to run the pod group;
+	// if there's not enough resources to start all tasks, the scheduler
+	// will not start anyone.
+	MinResources *v1.ResourceList `json:"minResources,omitempty" protobuf:"bytes,4,opt,name=minResources"`
+
+	// NetworkTopology defines the NetworkTopology config, this field works in conjunction with network topology feature and hyperNode CRD.
+	// +optional
+	NetworkTopology *NetworkTopologySpec `json:"networkTopology,omitempty" protobuf:"bytes,5,opt,name=networkTopology"`
+}
+
+type NetworkTopologyMode string
+
+const (
+	// HardNetworkTopologyMode represents a strict network topology constraint that jobs must adhere to.
+	HardNetworkTopologyMode NetworkTopologyMode = "hard"
+
+	// SoftNetworkTopologyMode represents a flexible network topology constraint that allows jobs
+	// to cross network boundaries under certain conditions.
+	SoftNetworkTopologyMode NetworkTopologyMode = "soft"
+)
+
+type NetworkTopologySpec struct {
+	// Mode specifies the mode of the network topology constrain.
+	// +kubebuilder:validation:Enum=hard;soft
+	// +kubebuilder:default=hard
+	// +optional
+	Mode NetworkTopologyMode `json:"mode,omitempty" protobuf:"bytes,1,opt,name=mode"`
+
+	// HighestTierAllowed specifies the highest tier that a job allowed to cross when scheduling.
+	// +kubebuilder:default=1
+	// +optional
+	HighestTierAllowed *int `json:"highestTierAllowed,omitempty" protobuf:"bytes,2,opt,name=highestTierAllowed"`
+}
+
+// PodGroupStatus represents the current state of a pod group.
+type PodGroupStatus struct {
+	// Current phase of PodGroup.
+	Phase PodGroupPhase `json:"phase,omitempty" protobuf:"bytes,1,opt,name=phase"`
+
+	// The conditions of PodGroup.
+	// +optional
+	Conditions []PodGroupCondition `json:"conditions,omitempty" protobuf:"bytes,2,opt,name=conditions"`
+
+	// The number of actively running pods.
+	// +optional
+	Running int32 `json:"running,omitempty" protobuf:"bytes,3,opt,name=running"`
+
+	// The number of pods which reached phase Succeeded.
+	// +optional
+	Succeeded int32 `json:"succeeded,omitempty" protobuf:"bytes,4,opt,name=succeeded"`
+
+	// The number of pods which reached phase Failed.
+	// +optional
+	Failed int32 `json:"failed,omitempty" protobuf:"bytes,5,opt,name=failed"`
+}
+
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+// +kubebuilder:object:root=true
+
+// PodGroupList is a collection of pod groups.
+type PodGroupList struct {
+	metav1.TypeMeta `json:",inline"`
+	// Standard list metadata
+	// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+	// +optional
+	metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
+
+	// items is the list of PodGroup
+	Items []PodGroup `json:"items" protobuf:"bytes,2,rep,name=items"`
+}
+
+const (
+	// DefaultQueue constant stores the name of the queue as "default"
+	DefaultQueue = "default"
+)
+
+// +genclient
+// +genclient:nonNamespaced
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+// +kubebuilder:object:root=true
+// +kubebuilder:resource:path=queues,scope=Cluster,shortName=q;queue-v1beta1
+// +kubebuilder:subresource:status
+// +kubebuilder:printcolumn:name="PARENT",type=string,JSONPath=`.spec.parent`
+
+// Queue is a queue of PodGroup.
+type Queue struct {
+	metav1.TypeMeta `json:",inline"`
+
+	// +optional
+	metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
+
+	// Specification of the desired behavior of the queue.
+	// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
+	// +optional
+	Spec QueueSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
+
+	// The status of queue.
+	// +optional
+	Status QueueStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
+}
+
+// Guarantee represents configuration of queue resource reservation
+type Guarantee struct {
+	// The amount of cluster resource reserved for queue. Just set either `percentage` or `resource`
+	// +optional
+	Resource v1.ResourceList `json:"resource,omitempty" protobuf:"bytes,3,opt,name=resource"`
+}
+
+// Reservation represents current condition about resource reservation
+type Reservation struct {
+	// Nodes are Locked nodes for queue
+	// +optional
+	Nodes []string `json:"nodes,omitempty" protobuf:"bytes,1,opt,name=nodes"`
+	// Resource is a list of total idle resource in locked nodes.
+	// +optional
+	Resource v1.ResourceList `json:"resource,omitempty" protobuf:"bytes,2,opt,name=resource"`
+}
+
+// QueueStatus represents the status of Queue.
+type QueueStatus struct {
+	// State is state of queue
+	State QueueState `json:"state,omitempty" protobuf:"bytes,1,opt,name=state"`
+
+	// The number of 'Unknown' PodGroup in this queue.
+	Unknown int32 `json:"unknown,omitempty" protobuf:"bytes,2,opt,name=unknown"`
+	// The number of 'Pending' PodGroup in this queue.
+	Pending int32 `json:"pending,omitempty" protobuf:"bytes,3,opt,name=pending"`
+	// The number of 'Running' PodGroup in this queue.
+	Running int32 `json:"running,omitempty" protobuf:"bytes,4,opt,name=running"`
+	// The number of `Inqueue` PodGroup in this queue.
+	Inqueue int32 `json:"inqueue,omitempty" protobuf:"bytes,5,opt,name=inqueue"`
+	// The number of `Completed` PodGroup in this queue.
+	Completed int32 `json:"completed,omitempty" protobuf:"bytes,6,opt,name=completed"`
+
+	// Reservation is the profile of resource reservation for queue
+	Reservation Reservation `json:"reservation,omitempty" protobuf:"bytes,7,opt,name=reservation"`
+
+	// Allocated is allocated resources in queue
+	// +optional
+	Allocated v1.ResourceList `json:"allocated" protobuf:"bytes,8,opt,name=allocated"`
+}
+
+// CluterSpec represents the template of Cluster
+type Cluster struct {
+	// +optional
+	Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"`
+	// +optional
+	Weight int32 `json:"weight,omitempty" protobuf:"bytes,2,opt,name=weight"`
+	// +optional
+	Capacity v1.ResourceList `json:"capacity,omitempty" protobuf:"bytes,3,opt,name=capacity"`
+}
+
+// Affinity is a group of affinity scheduling rules.
+type Affinity struct {
+	// Describes nodegroup affinity scheduling rules for the queue(e.g. putting pods of the queue in the nodes of the nodegroup)
+	// +optional
+	NodeGroupAffinity *NodeGroupAffinity `json:"nodeGroupAffinity,omitempty" protobuf:"bytes,1,opt,name=nodeGroupAffinity"`
+
+	// Describes nodegroup anti-affinity scheduling rules for the queue(e.g. avoid putting pods of the queue in the nodes of the nodegroup).
+	// +optional
+	NodeGroupAntiAffinity *NodeGroupAntiAffinity `json:"nodeGroupAntiAffinity,omitempty" protobuf:"bytes,2,opt,name=nodeGroupAntiAffinity"`
+}
+
+type NodeGroupAffinity struct {
+	// +optional
+	RequiredDuringSchedulingIgnoredDuringExecution []string `json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,1,opt,name=requiredDuringSchedulingIgnoredDuringExecution"`
+	// +optional
+	PreferredDuringSchedulingIgnoredDuringExecution []string `json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,2,rep,name=preferredDuringSchedulingIgnoredDuringExecution"`
+}
+
+type NodeGroupAntiAffinity struct {
+	// +optional
+	RequiredDuringSchedulingIgnoredDuringExecution []string `json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,1,opt,name=requiredDuringSchedulingIgnoredDuringExecution"`
+	// +optional
+	PreferredDuringSchedulingIgnoredDuringExecution []string `json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,2,rep,name=preferredDuringSchedulingIgnoredDuringExecution"`
+}
+
+// QueueSpec represents the template of Queue.
+type QueueSpec struct {
+	// +optional
+	// +kubebuilder:default:=1
+	// +kubebuilder:validation:Minimum=1
+	// +kubebuilder:validation:Maximum=65535
+	Weight int32 `json:"weight,omitempty" protobuf:"bytes,1,opt,name=weight"`
+
+	// +optional
+	Capability v1.ResourceList `json:"capability,omitempty" protobuf:"bytes,2,opt,name=capability"`
+
+	// Reclaimable indicate whether the queue can be reclaimed by other queue
+	Reclaimable *bool `json:"reclaimable,omitempty" protobuf:"bytes,3,opt,name=reclaimable"`
+
+	// extendCluster indicate the jobs in this Queue will be dispatched to these clusters.
+	ExtendClusters []Cluster `json:"extendClusters,omitempty" protobuf:"bytes,4,opt,name=extendClusters"`
+
+	// Guarantee indicate configuration about resource reservation
+	Guarantee Guarantee `json:"guarantee,omitempty" protobuf:"bytes,5,opt,name=guarantee"`
+
+	// If specified, the pod owned by the queue will be scheduled with constraint
+	// +optional
+	Affinity *Affinity `json:"affinity,omitempty" protobuf:"bytes,6,opt,name=affinity"`
+
+	// Type define the type of queue
+	Type string `json:"type,omitempty" protobuf:"bytes,7,opt,name=type"`
+	// Parent define the parent of queue
+	// +optional
+	Parent string `json:"parent,omitempty" protobuf:"bytes,8,opt,name=parent"`
+
+	// The amount of resources configured by the user. This part of resource can be shared with other queues and reclaimed back.
+	// +optional
+	Deserved v1.ResourceList `json:"deserved,omitempty" protobuf:"bytes,9,opt,name=deserved"`
+
+	// Priority define the priority of queue. Higher values are prioritized for scheduling and considered later during reclamation.
+	// +optional
+	Priority int32 `json:"priority,omitempty" protobuf:"bytes,10,opt,name=priority"`
+}
+
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+// +kubebuilder:object:root=true
+
+// QueueList is a collection of queues.
+type QueueList struct {
+	metav1.TypeMeta `json:",inline"`
+	// Standard list metadata
+	// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
+	// +optional
+	metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
+
+	// items is the list of PodGroup
+	Items []Queue `json:"items" protobuf:"bytes,2,rep,name=items"`
+}
diff --git a/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/zz_generated.conversion.go b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/zz_generated.conversion.go
new file mode 100644
index 000000000..b4260c6a3
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/zz_generated.conversion.go
@@ -0,0 +1,646 @@
+//go:build !ignore_autogenerated
+// +build !ignore_autogenerated
+
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by conversion-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	unsafe "unsafe"
+
+	v1 "k8s.io/api/core/v1"
+	conversion "k8s.io/apimachinery/pkg/conversion"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+	scheduling "volcano.sh/apis/pkg/apis/scheduling"
+)
+
+func init() {
+	localSchemeBuilder.Register(RegisterConversions)
+}
+
+// RegisterConversions adds conversion functions to the given scheme.
+// Public to allow building arbitrary schemes.
+func RegisterConversions(s *runtime.Scheme) error {
+	if err := s.AddGeneratedConversionFunc((*Affinity)(nil), (*scheduling.Affinity)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_Affinity_To_scheduling_Affinity(a.(*Affinity), b.(*scheduling.Affinity), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.Affinity)(nil), (*Affinity)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_Affinity_To_v1beta1_Affinity(a.(*scheduling.Affinity), b.(*Affinity), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*Cluster)(nil), (*scheduling.Cluster)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_Cluster_To_scheduling_Cluster(a.(*Cluster), b.(*scheduling.Cluster), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.Cluster)(nil), (*Cluster)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_Cluster_To_v1beta1_Cluster(a.(*scheduling.Cluster), b.(*Cluster), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*Guarantee)(nil), (*scheduling.Guarantee)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_Guarantee_To_scheduling_Guarantee(a.(*Guarantee), b.(*scheduling.Guarantee), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.Guarantee)(nil), (*Guarantee)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_Guarantee_To_v1beta1_Guarantee(a.(*scheduling.Guarantee), b.(*Guarantee), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*NetworkTopologySpec)(nil), (*scheduling.NetworkTopologySpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_NetworkTopologySpec_To_scheduling_NetworkTopologySpec(a.(*NetworkTopologySpec), b.(*scheduling.NetworkTopologySpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.NetworkTopologySpec)(nil), (*NetworkTopologySpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_NetworkTopologySpec_To_v1beta1_NetworkTopologySpec(a.(*scheduling.NetworkTopologySpec), b.(*NetworkTopologySpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*NodeGroupAffinity)(nil), (*scheduling.NodeGroupAffinity)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_NodeGroupAffinity_To_scheduling_NodeGroupAffinity(a.(*NodeGroupAffinity), b.(*scheduling.NodeGroupAffinity), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.NodeGroupAffinity)(nil), (*NodeGroupAffinity)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_NodeGroupAffinity_To_v1beta1_NodeGroupAffinity(a.(*scheduling.NodeGroupAffinity), b.(*NodeGroupAffinity), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*NodeGroupAntiAffinity)(nil), (*scheduling.NodeGroupAntiAffinity)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_NodeGroupAntiAffinity_To_scheduling_NodeGroupAntiAffinity(a.(*NodeGroupAntiAffinity), b.(*scheduling.NodeGroupAntiAffinity), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.NodeGroupAntiAffinity)(nil), (*NodeGroupAntiAffinity)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_NodeGroupAntiAffinity_To_v1beta1_NodeGroupAntiAffinity(a.(*scheduling.NodeGroupAntiAffinity), b.(*NodeGroupAntiAffinity), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*PodGroup)(nil), (*scheduling.PodGroup)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_PodGroup_To_scheduling_PodGroup(a.(*PodGroup), b.(*scheduling.PodGroup), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.PodGroup)(nil), (*PodGroup)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_PodGroup_To_v1beta1_PodGroup(a.(*scheduling.PodGroup), b.(*PodGroup), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*PodGroupCondition)(nil), (*scheduling.PodGroupCondition)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_PodGroupCondition_To_scheduling_PodGroupCondition(a.(*PodGroupCondition), b.(*scheduling.PodGroupCondition), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.PodGroupCondition)(nil), (*PodGroupCondition)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_PodGroupCondition_To_v1beta1_PodGroupCondition(a.(*scheduling.PodGroupCondition), b.(*PodGroupCondition), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*PodGroupList)(nil), (*scheduling.PodGroupList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_PodGroupList_To_scheduling_PodGroupList(a.(*PodGroupList), b.(*scheduling.PodGroupList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.PodGroupList)(nil), (*PodGroupList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_PodGroupList_To_v1beta1_PodGroupList(a.(*scheduling.PodGroupList), b.(*PodGroupList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*PodGroupSpec)(nil), (*scheduling.PodGroupSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_PodGroupSpec_To_scheduling_PodGroupSpec(a.(*PodGroupSpec), b.(*scheduling.PodGroupSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.PodGroupSpec)(nil), (*PodGroupSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_PodGroupSpec_To_v1beta1_PodGroupSpec(a.(*scheduling.PodGroupSpec), b.(*PodGroupSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*PodGroupStatus)(nil), (*scheduling.PodGroupStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_PodGroupStatus_To_scheduling_PodGroupStatus(a.(*PodGroupStatus), b.(*scheduling.PodGroupStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.PodGroupStatus)(nil), (*PodGroupStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_PodGroupStatus_To_v1beta1_PodGroupStatus(a.(*scheduling.PodGroupStatus), b.(*PodGroupStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*Queue)(nil), (*scheduling.Queue)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_Queue_To_scheduling_Queue(a.(*Queue), b.(*scheduling.Queue), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.Queue)(nil), (*Queue)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_Queue_To_v1beta1_Queue(a.(*scheduling.Queue), b.(*Queue), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*QueueList)(nil), (*scheduling.QueueList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_QueueList_To_scheduling_QueueList(a.(*QueueList), b.(*scheduling.QueueList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.QueueList)(nil), (*QueueList)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_QueueList_To_v1beta1_QueueList(a.(*scheduling.QueueList), b.(*QueueList), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*QueueSpec)(nil), (*scheduling.QueueSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_QueueSpec_To_scheduling_QueueSpec(a.(*QueueSpec), b.(*scheduling.QueueSpec), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*QueueStatus)(nil), (*scheduling.QueueStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_QueueStatus_To_scheduling_QueueStatus(a.(*QueueStatus), b.(*scheduling.QueueStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.QueueStatus)(nil), (*QueueStatus)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_QueueStatus_To_v1beta1_QueueStatus(a.(*scheduling.QueueStatus), b.(*QueueStatus), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*Reservation)(nil), (*scheduling.Reservation)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_v1beta1_Reservation_To_scheduling_Reservation(a.(*Reservation), b.(*scheduling.Reservation), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddGeneratedConversionFunc((*scheduling.Reservation)(nil), (*Reservation)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_Reservation_To_v1beta1_Reservation(a.(*scheduling.Reservation), b.(*Reservation), scope)
+	}); err != nil {
+		return err
+	}
+	if err := s.AddConversionFunc((*scheduling.QueueSpec)(nil), (*QueueSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
+		return Convert_scheduling_QueueSpec_To_v1beta1_QueueSpec(a.(*scheduling.QueueSpec), b.(*QueueSpec), scope)
+	}); err != nil {
+		return err
+	}
+	return nil
+}
+
+func autoConvert_v1beta1_Affinity_To_scheduling_Affinity(in *Affinity, out *scheduling.Affinity, s conversion.Scope) error {
+	out.NodeGroupAffinity = (*scheduling.NodeGroupAffinity)(unsafe.Pointer(in.NodeGroupAffinity))
+	out.NodeGroupAntiAffinity = (*scheduling.NodeGroupAntiAffinity)(unsafe.Pointer(in.NodeGroupAntiAffinity))
+	return nil
+}
+
+// Convert_v1beta1_Affinity_To_scheduling_Affinity is an autogenerated conversion function.
+func Convert_v1beta1_Affinity_To_scheduling_Affinity(in *Affinity, out *scheduling.Affinity, s conversion.Scope) error {
+	return autoConvert_v1beta1_Affinity_To_scheduling_Affinity(in, out, s)
+}
+
+func autoConvert_scheduling_Affinity_To_v1beta1_Affinity(in *scheduling.Affinity, out *Affinity, s conversion.Scope) error {
+	out.NodeGroupAffinity = (*NodeGroupAffinity)(unsafe.Pointer(in.NodeGroupAffinity))
+	out.NodeGroupAntiAffinity = (*NodeGroupAntiAffinity)(unsafe.Pointer(in.NodeGroupAntiAffinity))
+	return nil
+}
+
+// Convert_scheduling_Affinity_To_v1beta1_Affinity is an autogenerated conversion function.
+func Convert_scheduling_Affinity_To_v1beta1_Affinity(in *scheduling.Affinity, out *Affinity, s conversion.Scope) error {
+	return autoConvert_scheduling_Affinity_To_v1beta1_Affinity(in, out, s)
+}
+
+func autoConvert_v1beta1_Cluster_To_scheduling_Cluster(in *Cluster, out *scheduling.Cluster, s conversion.Scope) error {
+	out.Name = in.Name
+	out.Weight = in.Weight
+	out.Capacity = *(*v1.ResourceList)(unsafe.Pointer(&in.Capacity))
+	return nil
+}
+
+// Convert_v1beta1_Cluster_To_scheduling_Cluster is an autogenerated conversion function.
+func Convert_v1beta1_Cluster_To_scheduling_Cluster(in *Cluster, out *scheduling.Cluster, s conversion.Scope) error {
+	return autoConvert_v1beta1_Cluster_To_scheduling_Cluster(in, out, s)
+}
+
+func autoConvert_scheduling_Cluster_To_v1beta1_Cluster(in *scheduling.Cluster, out *Cluster, s conversion.Scope) error {
+	out.Name = in.Name
+	out.Weight = in.Weight
+	out.Capacity = *(*v1.ResourceList)(unsafe.Pointer(&in.Capacity))
+	return nil
+}
+
+// Convert_scheduling_Cluster_To_v1beta1_Cluster is an autogenerated conversion function.
+func Convert_scheduling_Cluster_To_v1beta1_Cluster(in *scheduling.Cluster, out *Cluster, s conversion.Scope) error {
+	return autoConvert_scheduling_Cluster_To_v1beta1_Cluster(in, out, s)
+}
+
+func autoConvert_v1beta1_Guarantee_To_scheduling_Guarantee(in *Guarantee, out *scheduling.Guarantee, s conversion.Scope) error {
+	out.Resource = *(*v1.ResourceList)(unsafe.Pointer(&in.Resource))
+	return nil
+}
+
+// Convert_v1beta1_Guarantee_To_scheduling_Guarantee is an autogenerated conversion function.
+func Convert_v1beta1_Guarantee_To_scheduling_Guarantee(in *Guarantee, out *scheduling.Guarantee, s conversion.Scope) error {
+	return autoConvert_v1beta1_Guarantee_To_scheduling_Guarantee(in, out, s)
+}
+
+func autoConvert_scheduling_Guarantee_To_v1beta1_Guarantee(in *scheduling.Guarantee, out *Guarantee, s conversion.Scope) error {
+	out.Resource = *(*v1.ResourceList)(unsafe.Pointer(&in.Resource))
+	return nil
+}
+
+// Convert_scheduling_Guarantee_To_v1beta1_Guarantee is an autogenerated conversion function.
+func Convert_scheduling_Guarantee_To_v1beta1_Guarantee(in *scheduling.Guarantee, out *Guarantee, s conversion.Scope) error {
+	return autoConvert_scheduling_Guarantee_To_v1beta1_Guarantee(in, out, s)
+}
+
+func autoConvert_v1beta1_NetworkTopologySpec_To_scheduling_NetworkTopologySpec(in *NetworkTopologySpec, out *scheduling.NetworkTopologySpec, s conversion.Scope) error {
+	out.Mode = scheduling.NetworkTopologyMode(in.Mode)
+	out.HighestTierAllowed = (*int)(unsafe.Pointer(in.HighestTierAllowed))
+	return nil
+}
+
+// Convert_v1beta1_NetworkTopologySpec_To_scheduling_NetworkTopologySpec is an autogenerated conversion function.
+func Convert_v1beta1_NetworkTopologySpec_To_scheduling_NetworkTopologySpec(in *NetworkTopologySpec, out *scheduling.NetworkTopologySpec, s conversion.Scope) error {
+	return autoConvert_v1beta1_NetworkTopologySpec_To_scheduling_NetworkTopologySpec(in, out, s)
+}
+
+func autoConvert_scheduling_NetworkTopologySpec_To_v1beta1_NetworkTopologySpec(in *scheduling.NetworkTopologySpec, out *NetworkTopologySpec, s conversion.Scope) error {
+	out.Mode = NetworkTopologyMode(in.Mode)
+	out.HighestTierAllowed = (*int)(unsafe.Pointer(in.HighestTierAllowed))
+	return nil
+}
+
+// Convert_scheduling_NetworkTopologySpec_To_v1beta1_NetworkTopologySpec is an autogenerated conversion function.
+func Convert_scheduling_NetworkTopologySpec_To_v1beta1_NetworkTopologySpec(in *scheduling.NetworkTopologySpec, out *NetworkTopologySpec, s conversion.Scope) error {
+	return autoConvert_scheduling_NetworkTopologySpec_To_v1beta1_NetworkTopologySpec(in, out, s)
+}
+
+func autoConvert_v1beta1_NodeGroupAffinity_To_scheduling_NodeGroupAffinity(in *NodeGroupAffinity, out *scheduling.NodeGroupAffinity, s conversion.Scope) error {
+	out.RequiredDuringSchedulingIgnoredDuringExecution = *(*[]string)(unsafe.Pointer(&in.RequiredDuringSchedulingIgnoredDuringExecution))
+	out.PreferredDuringSchedulingIgnoredDuringExecution = *(*[]string)(unsafe.Pointer(&in.PreferredDuringSchedulingIgnoredDuringExecution))
+	return nil
+}
+
+// Convert_v1beta1_NodeGroupAffinity_To_scheduling_NodeGroupAffinity is an autogenerated conversion function.
+func Convert_v1beta1_NodeGroupAffinity_To_scheduling_NodeGroupAffinity(in *NodeGroupAffinity, out *scheduling.NodeGroupAffinity, s conversion.Scope) error {
+	return autoConvert_v1beta1_NodeGroupAffinity_To_scheduling_NodeGroupAffinity(in, out, s)
+}
+
+func autoConvert_scheduling_NodeGroupAffinity_To_v1beta1_NodeGroupAffinity(in *scheduling.NodeGroupAffinity, out *NodeGroupAffinity, s conversion.Scope) error {
+	out.RequiredDuringSchedulingIgnoredDuringExecution = *(*[]string)(unsafe.Pointer(&in.RequiredDuringSchedulingIgnoredDuringExecution))
+	out.PreferredDuringSchedulingIgnoredDuringExecution = *(*[]string)(unsafe.Pointer(&in.PreferredDuringSchedulingIgnoredDuringExecution))
+	return nil
+}
+
+// Convert_scheduling_NodeGroupAffinity_To_v1beta1_NodeGroupAffinity is an autogenerated conversion function.
+func Convert_scheduling_NodeGroupAffinity_To_v1beta1_NodeGroupAffinity(in *scheduling.NodeGroupAffinity, out *NodeGroupAffinity, s conversion.Scope) error {
+	return autoConvert_scheduling_NodeGroupAffinity_To_v1beta1_NodeGroupAffinity(in, out, s)
+}
+
+func autoConvert_v1beta1_NodeGroupAntiAffinity_To_scheduling_NodeGroupAntiAffinity(in *NodeGroupAntiAffinity, out *scheduling.NodeGroupAntiAffinity, s conversion.Scope) error {
+	out.RequiredDuringSchedulingIgnoredDuringExecution = *(*[]string)(unsafe.Pointer(&in.RequiredDuringSchedulingIgnoredDuringExecution))
+	out.PreferredDuringSchedulingIgnoredDuringExecution = *(*[]string)(unsafe.Pointer(&in.PreferredDuringSchedulingIgnoredDuringExecution))
+	return nil
+}
+
+// Convert_v1beta1_NodeGroupAntiAffinity_To_scheduling_NodeGroupAntiAffinity is an autogenerated conversion function.
+func Convert_v1beta1_NodeGroupAntiAffinity_To_scheduling_NodeGroupAntiAffinity(in *NodeGroupAntiAffinity, out *scheduling.NodeGroupAntiAffinity, s conversion.Scope) error {
+	return autoConvert_v1beta1_NodeGroupAntiAffinity_To_scheduling_NodeGroupAntiAffinity(in, out, s)
+}
+
+func autoConvert_scheduling_NodeGroupAntiAffinity_To_v1beta1_NodeGroupAntiAffinity(in *scheduling.NodeGroupAntiAffinity, out *NodeGroupAntiAffinity, s conversion.Scope) error {
+	out.RequiredDuringSchedulingIgnoredDuringExecution = *(*[]string)(unsafe.Pointer(&in.RequiredDuringSchedulingIgnoredDuringExecution))
+	out.PreferredDuringSchedulingIgnoredDuringExecution = *(*[]string)(unsafe.Pointer(&in.PreferredDuringSchedulingIgnoredDuringExecution))
+	return nil
+}
+
+// Convert_scheduling_NodeGroupAntiAffinity_To_v1beta1_NodeGroupAntiAffinity is an autogenerated conversion function.
+func Convert_scheduling_NodeGroupAntiAffinity_To_v1beta1_NodeGroupAntiAffinity(in *scheduling.NodeGroupAntiAffinity, out *NodeGroupAntiAffinity, s conversion.Scope) error {
+	return autoConvert_scheduling_NodeGroupAntiAffinity_To_v1beta1_NodeGroupAntiAffinity(in, out, s)
+}
+
+func autoConvert_v1beta1_PodGroup_To_scheduling_PodGroup(in *PodGroup, out *scheduling.PodGroup, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta1_PodGroupSpec_To_scheduling_PodGroupSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta1_PodGroupStatus_To_scheduling_PodGroupStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta1_PodGroup_To_scheduling_PodGroup is an autogenerated conversion function.
+func Convert_v1beta1_PodGroup_To_scheduling_PodGroup(in *PodGroup, out *scheduling.PodGroup, s conversion.Scope) error {
+	return autoConvert_v1beta1_PodGroup_To_scheduling_PodGroup(in, out, s)
+}
+
+func autoConvert_scheduling_PodGroup_To_v1beta1_PodGroup(in *scheduling.PodGroup, out *PodGroup, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_scheduling_PodGroupSpec_To_v1beta1_PodGroupSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_scheduling_PodGroupStatus_To_v1beta1_PodGroupStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_scheduling_PodGroup_To_v1beta1_PodGroup is an autogenerated conversion function.
+func Convert_scheduling_PodGroup_To_v1beta1_PodGroup(in *scheduling.PodGroup, out *PodGroup, s conversion.Scope) error {
+	return autoConvert_scheduling_PodGroup_To_v1beta1_PodGroup(in, out, s)
+}
+
+func autoConvert_v1beta1_PodGroupCondition_To_scheduling_PodGroupCondition(in *PodGroupCondition, out *scheduling.PodGroupCondition, s conversion.Scope) error {
+	out.Type = scheduling.PodGroupConditionType(in.Type)
+	out.Status = v1.ConditionStatus(in.Status)
+	out.TransitionID = in.TransitionID
+	out.LastTransitionTime = in.LastTransitionTime
+	out.Reason = in.Reason
+	out.Message = in.Message
+	return nil
+}
+
+// Convert_v1beta1_PodGroupCondition_To_scheduling_PodGroupCondition is an autogenerated conversion function.
+func Convert_v1beta1_PodGroupCondition_To_scheduling_PodGroupCondition(in *PodGroupCondition, out *scheduling.PodGroupCondition, s conversion.Scope) error {
+	return autoConvert_v1beta1_PodGroupCondition_To_scheduling_PodGroupCondition(in, out, s)
+}
+
+func autoConvert_scheduling_PodGroupCondition_To_v1beta1_PodGroupCondition(in *scheduling.PodGroupCondition, out *PodGroupCondition, s conversion.Scope) error {
+	out.Type = PodGroupConditionType(in.Type)
+	out.Status = v1.ConditionStatus(in.Status)
+	out.TransitionID = in.TransitionID
+	out.LastTransitionTime = in.LastTransitionTime
+	out.Reason = in.Reason
+	out.Message = in.Message
+	return nil
+}
+
+// Convert_scheduling_PodGroupCondition_To_v1beta1_PodGroupCondition is an autogenerated conversion function.
+func Convert_scheduling_PodGroupCondition_To_v1beta1_PodGroupCondition(in *scheduling.PodGroupCondition, out *PodGroupCondition, s conversion.Scope) error {
+	return autoConvert_scheduling_PodGroupCondition_To_v1beta1_PodGroupCondition(in, out, s)
+}
+
+func autoConvert_v1beta1_PodGroupList_To_scheduling_PodGroupList(in *PodGroupList, out *scheduling.PodGroupList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]scheduling.PodGroup)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_v1beta1_PodGroupList_To_scheduling_PodGroupList is an autogenerated conversion function.
+func Convert_v1beta1_PodGroupList_To_scheduling_PodGroupList(in *PodGroupList, out *scheduling.PodGroupList, s conversion.Scope) error {
+	return autoConvert_v1beta1_PodGroupList_To_scheduling_PodGroupList(in, out, s)
+}
+
+func autoConvert_scheduling_PodGroupList_To_v1beta1_PodGroupList(in *scheduling.PodGroupList, out *PodGroupList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	out.Items = *(*[]PodGroup)(unsafe.Pointer(&in.Items))
+	return nil
+}
+
+// Convert_scheduling_PodGroupList_To_v1beta1_PodGroupList is an autogenerated conversion function.
+func Convert_scheduling_PodGroupList_To_v1beta1_PodGroupList(in *scheduling.PodGroupList, out *PodGroupList, s conversion.Scope) error {
+	return autoConvert_scheduling_PodGroupList_To_v1beta1_PodGroupList(in, out, s)
+}
+
+func autoConvert_v1beta1_PodGroupSpec_To_scheduling_PodGroupSpec(in *PodGroupSpec, out *scheduling.PodGroupSpec, s conversion.Scope) error {
+	out.MinMember = in.MinMember
+	out.MinTaskMember = *(*map[string]int32)(unsafe.Pointer(&in.MinTaskMember))
+	out.Queue = in.Queue
+	out.PriorityClassName = in.PriorityClassName
+	out.MinResources = (*v1.ResourceList)(unsafe.Pointer(in.MinResources))
+	out.NetworkTopology = (*scheduling.NetworkTopologySpec)(unsafe.Pointer(in.NetworkTopology))
+	return nil
+}
+
+// Convert_v1beta1_PodGroupSpec_To_scheduling_PodGroupSpec is an autogenerated conversion function.
+func Convert_v1beta1_PodGroupSpec_To_scheduling_PodGroupSpec(in *PodGroupSpec, out *scheduling.PodGroupSpec, s conversion.Scope) error {
+	return autoConvert_v1beta1_PodGroupSpec_To_scheduling_PodGroupSpec(in, out, s)
+}
+
+func autoConvert_scheduling_PodGroupSpec_To_v1beta1_PodGroupSpec(in *scheduling.PodGroupSpec, out *PodGroupSpec, s conversion.Scope) error {
+	out.MinMember = in.MinMember
+	out.MinTaskMember = *(*map[string]int32)(unsafe.Pointer(&in.MinTaskMember))
+	out.Queue = in.Queue
+	out.PriorityClassName = in.PriorityClassName
+	out.MinResources = (*v1.ResourceList)(unsafe.Pointer(in.MinResources))
+	out.NetworkTopology = (*NetworkTopologySpec)(unsafe.Pointer(in.NetworkTopology))
+	return nil
+}
+
+// Convert_scheduling_PodGroupSpec_To_v1beta1_PodGroupSpec is an autogenerated conversion function.
+func Convert_scheduling_PodGroupSpec_To_v1beta1_PodGroupSpec(in *scheduling.PodGroupSpec, out *PodGroupSpec, s conversion.Scope) error {
+	return autoConvert_scheduling_PodGroupSpec_To_v1beta1_PodGroupSpec(in, out, s)
+}
+
+func autoConvert_v1beta1_PodGroupStatus_To_scheduling_PodGroupStatus(in *PodGroupStatus, out *scheduling.PodGroupStatus, s conversion.Scope) error {
+	out.Phase = scheduling.PodGroupPhase(in.Phase)
+	out.Conditions = *(*[]scheduling.PodGroupCondition)(unsafe.Pointer(&in.Conditions))
+	out.Running = in.Running
+	out.Succeeded = in.Succeeded
+	out.Failed = in.Failed
+	return nil
+}
+
+// Convert_v1beta1_PodGroupStatus_To_scheduling_PodGroupStatus is an autogenerated conversion function.
+func Convert_v1beta1_PodGroupStatus_To_scheduling_PodGroupStatus(in *PodGroupStatus, out *scheduling.PodGroupStatus, s conversion.Scope) error {
+	return autoConvert_v1beta1_PodGroupStatus_To_scheduling_PodGroupStatus(in, out, s)
+}
+
+func autoConvert_scheduling_PodGroupStatus_To_v1beta1_PodGroupStatus(in *scheduling.PodGroupStatus, out *PodGroupStatus, s conversion.Scope) error {
+	out.Phase = PodGroupPhase(in.Phase)
+	out.Conditions = *(*[]PodGroupCondition)(unsafe.Pointer(&in.Conditions))
+	out.Running = in.Running
+	out.Succeeded = in.Succeeded
+	out.Failed = in.Failed
+	return nil
+}
+
+// Convert_scheduling_PodGroupStatus_To_v1beta1_PodGroupStatus is an autogenerated conversion function.
+func Convert_scheduling_PodGroupStatus_To_v1beta1_PodGroupStatus(in *scheduling.PodGroupStatus, out *PodGroupStatus, s conversion.Scope) error {
+	return autoConvert_scheduling_PodGroupStatus_To_v1beta1_PodGroupStatus(in, out, s)
+}
+
+func autoConvert_v1beta1_Queue_To_scheduling_Queue(in *Queue, out *scheduling.Queue, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_v1beta1_QueueSpec_To_scheduling_QueueSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_v1beta1_QueueStatus_To_scheduling_QueueStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_v1beta1_Queue_To_scheduling_Queue is an autogenerated conversion function.
+func Convert_v1beta1_Queue_To_scheduling_Queue(in *Queue, out *scheduling.Queue, s conversion.Scope) error {
+	return autoConvert_v1beta1_Queue_To_scheduling_Queue(in, out, s)
+}
+
+func autoConvert_scheduling_Queue_To_v1beta1_Queue(in *scheduling.Queue, out *Queue, s conversion.Scope) error {
+	out.ObjectMeta = in.ObjectMeta
+	if err := Convert_scheduling_QueueSpec_To_v1beta1_QueueSpec(&in.Spec, &out.Spec, s); err != nil {
+		return err
+	}
+	if err := Convert_scheduling_QueueStatus_To_v1beta1_QueueStatus(&in.Status, &out.Status, s); err != nil {
+		return err
+	}
+	return nil
+}
+
+// Convert_scheduling_Queue_To_v1beta1_Queue is an autogenerated conversion function.
+func Convert_scheduling_Queue_To_v1beta1_Queue(in *scheduling.Queue, out *Queue, s conversion.Scope) error {
+	return autoConvert_scheduling_Queue_To_v1beta1_Queue(in, out, s)
+}
+
+func autoConvert_v1beta1_QueueList_To_scheduling_QueueList(in *QueueList, out *scheduling.QueueList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]scheduling.Queue, len(*in))
+		for i := range *in {
+			if err := Convert_v1beta1_Queue_To_scheduling_Queue(&(*in)[i], &(*out)[i], s); err != nil {
+				return err
+			}
+		}
+	} else {
+		out.Items = nil
+	}
+	return nil
+}
+
+// Convert_v1beta1_QueueList_To_scheduling_QueueList is an autogenerated conversion function.
+func Convert_v1beta1_QueueList_To_scheduling_QueueList(in *QueueList, out *scheduling.QueueList, s conversion.Scope) error {
+	return autoConvert_v1beta1_QueueList_To_scheduling_QueueList(in, out, s)
+}
+
+func autoConvert_scheduling_QueueList_To_v1beta1_QueueList(in *scheduling.QueueList, out *QueueList, s conversion.Scope) error {
+	out.ListMeta = in.ListMeta
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]Queue, len(*in))
+		for i := range *in {
+			if err := Convert_scheduling_Queue_To_v1beta1_Queue(&(*in)[i], &(*out)[i], s); err != nil {
+				return err
+			}
+		}
+	} else {
+		out.Items = nil
+	}
+	return nil
+}
+
+// Convert_scheduling_QueueList_To_v1beta1_QueueList is an autogenerated conversion function.
+func Convert_scheduling_QueueList_To_v1beta1_QueueList(in *scheduling.QueueList, out *QueueList, s conversion.Scope) error {
+	return autoConvert_scheduling_QueueList_To_v1beta1_QueueList(in, out, s)
+}
+
+func autoConvert_v1beta1_QueueSpec_To_scheduling_QueueSpec(in *QueueSpec, out *scheduling.QueueSpec, s conversion.Scope) error {
+	out.Weight = in.Weight
+	out.Capability = *(*v1.ResourceList)(unsafe.Pointer(&in.Capability))
+	out.Reclaimable = (*bool)(unsafe.Pointer(in.Reclaimable))
+	out.ExtendClusters = *(*[]scheduling.Cluster)(unsafe.Pointer(&in.ExtendClusters))
+	if err := Convert_v1beta1_Guarantee_To_scheduling_Guarantee(&in.Guarantee, &out.Guarantee, s); err != nil {
+		return err
+	}
+	out.Affinity = (*scheduling.Affinity)(unsafe.Pointer(in.Affinity))
+	out.Type = in.Type
+	out.Parent = in.Parent
+	out.Deserved = *(*v1.ResourceList)(unsafe.Pointer(&in.Deserved))
+	out.Priority = in.Priority
+	return nil
+}
+
+// Convert_v1beta1_QueueSpec_To_scheduling_QueueSpec is an autogenerated conversion function.
+func Convert_v1beta1_QueueSpec_To_scheduling_QueueSpec(in *QueueSpec, out *scheduling.QueueSpec, s conversion.Scope) error {
+	return autoConvert_v1beta1_QueueSpec_To_scheduling_QueueSpec(in, out, s)
+}
+
+func autoConvert_scheduling_QueueSpec_To_v1beta1_QueueSpec(in *scheduling.QueueSpec, out *QueueSpec, s conversion.Scope) error {
+	out.Weight = in.Weight
+	out.Capability = *(*v1.ResourceList)(unsafe.Pointer(&in.Capability))
+	// WARNING: in.State requires manual conversion: does not exist in peer-type
+	out.Reclaimable = (*bool)(unsafe.Pointer(in.Reclaimable))
+	out.ExtendClusters = *(*[]Cluster)(unsafe.Pointer(&in.ExtendClusters))
+	if err := Convert_scheduling_Guarantee_To_v1beta1_Guarantee(&in.Guarantee, &out.Guarantee, s); err != nil {
+		return err
+	}
+	out.Affinity = (*Affinity)(unsafe.Pointer(in.Affinity))
+	out.Type = in.Type
+	out.Parent = in.Parent
+	out.Deserved = *(*v1.ResourceList)(unsafe.Pointer(&in.Deserved))
+	out.Priority = in.Priority
+	return nil
+}
+
+func autoConvert_v1beta1_QueueStatus_To_scheduling_QueueStatus(in *QueueStatus, out *scheduling.QueueStatus, s conversion.Scope) error {
+	out.State = scheduling.QueueState(in.State)
+	out.Unknown = in.Unknown
+	out.Pending = in.Pending
+	out.Running = in.Running
+	out.Inqueue = in.Inqueue
+	out.Completed = in.Completed
+	if err := Convert_v1beta1_Reservation_To_scheduling_Reservation(&in.Reservation, &out.Reservation, s); err != nil {
+		return err
+	}
+	out.Allocated = *(*v1.ResourceList)(unsafe.Pointer(&in.Allocated))
+	return nil
+}
+
+// Convert_v1beta1_QueueStatus_To_scheduling_QueueStatus is an autogenerated conversion function.
+func Convert_v1beta1_QueueStatus_To_scheduling_QueueStatus(in *QueueStatus, out *scheduling.QueueStatus, s conversion.Scope) error {
+	return autoConvert_v1beta1_QueueStatus_To_scheduling_QueueStatus(in, out, s)
+}
+
+func autoConvert_scheduling_QueueStatus_To_v1beta1_QueueStatus(in *scheduling.QueueStatus, out *QueueStatus, s conversion.Scope) error {
+	out.State = QueueState(in.State)
+	out.Unknown = in.Unknown
+	out.Pending = in.Pending
+	out.Running = in.Running
+	out.Inqueue = in.Inqueue
+	out.Completed = in.Completed
+	if err := Convert_scheduling_Reservation_To_v1beta1_Reservation(&in.Reservation, &out.Reservation, s); err != nil {
+		return err
+	}
+	out.Allocated = *(*v1.ResourceList)(unsafe.Pointer(&in.Allocated))
+	return nil
+}
+
+// Convert_scheduling_QueueStatus_To_v1beta1_QueueStatus is an autogenerated conversion function.
+func Convert_scheduling_QueueStatus_To_v1beta1_QueueStatus(in *scheduling.QueueStatus, out *QueueStatus, s conversion.Scope) error {
+	return autoConvert_scheduling_QueueStatus_To_v1beta1_QueueStatus(in, out, s)
+}
+
+func autoConvert_v1beta1_Reservation_To_scheduling_Reservation(in *Reservation, out *scheduling.Reservation, s conversion.Scope) error {
+	out.Nodes = *(*[]string)(unsafe.Pointer(&in.Nodes))
+	out.Resource = *(*v1.ResourceList)(unsafe.Pointer(&in.Resource))
+	return nil
+}
+
+// Convert_v1beta1_Reservation_To_scheduling_Reservation is an autogenerated conversion function.
+func Convert_v1beta1_Reservation_To_scheduling_Reservation(in *Reservation, out *scheduling.Reservation, s conversion.Scope) error {
+	return autoConvert_v1beta1_Reservation_To_scheduling_Reservation(in, out, s)
+}
+
+func autoConvert_scheduling_Reservation_To_v1beta1_Reservation(in *scheduling.Reservation, out *Reservation, s conversion.Scope) error {
+	out.Nodes = *(*[]string)(unsafe.Pointer(&in.Nodes))
+	out.Resource = *(*v1.ResourceList)(unsafe.Pointer(&in.Resource))
+	return nil
+}
+
+// Convert_scheduling_Reservation_To_v1beta1_Reservation is an autogenerated conversion function.
+func Convert_scheduling_Reservation_To_v1beta1_Reservation(in *scheduling.Reservation, out *Reservation, s conversion.Scope) error {
+	return autoConvert_scheduling_Reservation_To_v1beta1_Reservation(in, out, s)
+}
diff --git a/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/zz_generated.deepcopy.go b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/zz_generated.deepcopy.go
new file mode 100644
index 000000000..996c5f56b
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/apis/scheduling/v1beta1/zz_generated.deepcopy.go
@@ -0,0 +1,473 @@
+//go:build !ignore_autogenerated
+// +build !ignore_autogenerated
+
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by deepcopy-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	v1 "k8s.io/api/core/v1"
+	resource "k8s.io/apimachinery/pkg/api/resource"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+)
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Affinity) DeepCopyInto(out *Affinity) {
+	*out = *in
+	if in.NodeGroupAffinity != nil {
+		in, out := &in.NodeGroupAffinity, &out.NodeGroupAffinity
+		*out = new(NodeGroupAffinity)
+		(*in).DeepCopyInto(*out)
+	}
+	if in.NodeGroupAntiAffinity != nil {
+		in, out := &in.NodeGroupAntiAffinity, &out.NodeGroupAntiAffinity
+		*out = new(NodeGroupAntiAffinity)
+		(*in).DeepCopyInto(*out)
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Affinity.
+func (in *Affinity) DeepCopy() *Affinity {
+	if in == nil {
+		return nil
+	}
+	out := new(Affinity)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Cluster) DeepCopyInto(out *Cluster) {
+	*out = *in
+	if in.Capacity != nil {
+		in, out := &in.Capacity, &out.Capacity
+		*out = make(v1.ResourceList, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val.DeepCopy()
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Cluster.
+func (in *Cluster) DeepCopy() *Cluster {
+	if in == nil {
+		return nil
+	}
+	out := new(Cluster)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Guarantee) DeepCopyInto(out *Guarantee) {
+	*out = *in
+	if in.Resource != nil {
+		in, out := &in.Resource, &out.Resource
+		*out = make(v1.ResourceList, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val.DeepCopy()
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Guarantee.
+func (in *Guarantee) DeepCopy() *Guarantee {
+	if in == nil {
+		return nil
+	}
+	out := new(Guarantee)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *NetworkTopologySpec) DeepCopyInto(out *NetworkTopologySpec) {
+	*out = *in
+	if in.HighestTierAllowed != nil {
+		in, out := &in.HighestTierAllowed, &out.HighestTierAllowed
+		*out = new(int)
+		**out = **in
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkTopologySpec.
+func (in *NetworkTopologySpec) DeepCopy() *NetworkTopologySpec {
+	if in == nil {
+		return nil
+	}
+	out := new(NetworkTopologySpec)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *NodeGroupAffinity) DeepCopyInto(out *NodeGroupAffinity) {
+	*out = *in
+	if in.RequiredDuringSchedulingIgnoredDuringExecution != nil {
+		in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution
+		*out = make([]string, len(*in))
+		copy(*out, *in)
+	}
+	if in.PreferredDuringSchedulingIgnoredDuringExecution != nil {
+		in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution
+		*out = make([]string, len(*in))
+		copy(*out, *in)
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeGroupAffinity.
+func (in *NodeGroupAffinity) DeepCopy() *NodeGroupAffinity {
+	if in == nil {
+		return nil
+	}
+	out := new(NodeGroupAffinity)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *NodeGroupAntiAffinity) DeepCopyInto(out *NodeGroupAntiAffinity) {
+	*out = *in
+	if in.RequiredDuringSchedulingIgnoredDuringExecution != nil {
+		in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution
+		*out = make([]string, len(*in))
+		copy(*out, *in)
+	}
+	if in.PreferredDuringSchedulingIgnoredDuringExecution != nil {
+		in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution
+		*out = make([]string, len(*in))
+		copy(*out, *in)
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeGroupAntiAffinity.
+func (in *NodeGroupAntiAffinity) DeepCopy() *NodeGroupAntiAffinity {
+	if in == nil {
+		return nil
+	}
+	out := new(NodeGroupAntiAffinity)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PodGroup) DeepCopyInto(out *PodGroup) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	in.Spec.DeepCopyInto(&out.Spec)
+	in.Status.DeepCopyInto(&out.Status)
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodGroup.
+func (in *PodGroup) DeepCopy() *PodGroup {
+	if in == nil {
+		return nil
+	}
+	out := new(PodGroup)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *PodGroup) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PodGroupCondition) DeepCopyInto(out *PodGroupCondition) {
+	*out = *in
+	in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime)
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodGroupCondition.
+func (in *PodGroupCondition) DeepCopy() *PodGroupCondition {
+	if in == nil {
+		return nil
+	}
+	out := new(PodGroupCondition)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PodGroupList) DeepCopyInto(out *PodGroupList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]PodGroup, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodGroupList.
+func (in *PodGroupList) DeepCopy() *PodGroupList {
+	if in == nil {
+		return nil
+	}
+	out := new(PodGroupList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *PodGroupList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PodGroupSpec) DeepCopyInto(out *PodGroupSpec) {
+	*out = *in
+	if in.MinTaskMember != nil {
+		in, out := &in.MinTaskMember, &out.MinTaskMember
+		*out = make(map[string]int32, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val
+		}
+	}
+	if in.MinResources != nil {
+		in, out := &in.MinResources, &out.MinResources
+		*out = new(v1.ResourceList)
+		if **in != nil {
+			in, out := *in, *out
+			*out = make(map[v1.ResourceName]resource.Quantity, len(*in))
+			for key, val := range *in {
+				(*out)[key] = val.DeepCopy()
+			}
+		}
+	}
+	if in.NetworkTopology != nil {
+		in, out := &in.NetworkTopology, &out.NetworkTopology
+		*out = new(NetworkTopologySpec)
+		(*in).DeepCopyInto(*out)
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodGroupSpec.
+func (in *PodGroupSpec) DeepCopy() *PodGroupSpec {
+	if in == nil {
+		return nil
+	}
+	out := new(PodGroupSpec)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PodGroupStatus) DeepCopyInto(out *PodGroupStatus) {
+	*out = *in
+	if in.Conditions != nil {
+		in, out := &in.Conditions, &out.Conditions
+		*out = make([]PodGroupCondition, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodGroupStatus.
+func (in *PodGroupStatus) DeepCopy() *PodGroupStatus {
+	if in == nil {
+		return nil
+	}
+	out := new(PodGroupStatus)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Queue) DeepCopyInto(out *Queue) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	in.Spec.DeepCopyInto(&out.Spec)
+	in.Status.DeepCopyInto(&out.Status)
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Queue.
+func (in *Queue) DeepCopy() *Queue {
+	if in == nil {
+		return nil
+	}
+	out := new(Queue)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *Queue) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *QueueList) DeepCopyInto(out *QueueList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]Queue, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueueList.
+func (in *QueueList) DeepCopy() *QueueList {
+	if in == nil {
+		return nil
+	}
+	out := new(QueueList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *QueueList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *QueueSpec) DeepCopyInto(out *QueueSpec) {
+	*out = *in
+	if in.Capability != nil {
+		in, out := &in.Capability, &out.Capability
+		*out = make(v1.ResourceList, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val.DeepCopy()
+		}
+	}
+	if in.Reclaimable != nil {
+		in, out := &in.Reclaimable, &out.Reclaimable
+		*out = new(bool)
+		**out = **in
+	}
+	if in.ExtendClusters != nil {
+		in, out := &in.ExtendClusters, &out.ExtendClusters
+		*out = make([]Cluster, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+	in.Guarantee.DeepCopyInto(&out.Guarantee)
+	if in.Affinity != nil {
+		in, out := &in.Affinity, &out.Affinity
+		*out = new(Affinity)
+		(*in).DeepCopyInto(*out)
+	}
+	if in.Deserved != nil {
+		in, out := &in.Deserved, &out.Deserved
+		*out = make(v1.ResourceList, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val.DeepCopy()
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueueSpec.
+func (in *QueueSpec) DeepCopy() *QueueSpec {
+	if in == nil {
+		return nil
+	}
+	out := new(QueueSpec)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *QueueStatus) DeepCopyInto(out *QueueStatus) {
+	*out = *in
+	in.Reservation.DeepCopyInto(&out.Reservation)
+	if in.Allocated != nil {
+		in, out := &in.Allocated, &out.Allocated
+		*out = make(v1.ResourceList, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val.DeepCopy()
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueueStatus.
+func (in *QueueStatus) DeepCopy() *QueueStatus {
+	if in == nil {
+		return nil
+	}
+	out := new(QueueStatus)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Reservation) DeepCopyInto(out *Reservation) {
+	*out = *in
+	if in.Nodes != nil {
+		in, out := &in.Nodes, &out.Nodes
+		*out = make([]string, len(*in))
+		copy(*out, *in)
+	}
+	if in.Resource != nil {
+		in, out := &in.Resource, &out.Resource
+		*out = make(v1.ResourceList, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val.DeepCopy()
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Reservation.
+func (in *Reservation) DeepCopy() *Reservation {
+	if in == nil {
+		return nil
+	}
+	out := new(Reservation)
+	in.DeepCopyInto(out)
+	return out
+}
diff --git a/vendor/volcano.sh/apis/pkg/apis/scheduling/zz_generated.deepcopy.go b/vendor/volcano.sh/apis/pkg/apis/scheduling/zz_generated.deepcopy.go
new file mode 100644
index 000000000..2e0e999e1
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/apis/scheduling/zz_generated.deepcopy.go
@@ -0,0 +1,473 @@
+//go:build !ignore_autogenerated
+// +build !ignore_autogenerated
+
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by deepcopy-gen. DO NOT EDIT.
+
+package scheduling
+
+import (
+	v1 "k8s.io/api/core/v1"
+	resource "k8s.io/apimachinery/pkg/api/resource"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+)
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Affinity) DeepCopyInto(out *Affinity) {
+	*out = *in
+	if in.NodeGroupAffinity != nil {
+		in, out := &in.NodeGroupAffinity, &out.NodeGroupAffinity
+		*out = new(NodeGroupAffinity)
+		(*in).DeepCopyInto(*out)
+	}
+	if in.NodeGroupAntiAffinity != nil {
+		in, out := &in.NodeGroupAntiAffinity, &out.NodeGroupAntiAffinity
+		*out = new(NodeGroupAntiAffinity)
+		(*in).DeepCopyInto(*out)
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Affinity.
+func (in *Affinity) DeepCopy() *Affinity {
+	if in == nil {
+		return nil
+	}
+	out := new(Affinity)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Cluster) DeepCopyInto(out *Cluster) {
+	*out = *in
+	if in.Capacity != nil {
+		in, out := &in.Capacity, &out.Capacity
+		*out = make(v1.ResourceList, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val.DeepCopy()
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Cluster.
+func (in *Cluster) DeepCopy() *Cluster {
+	if in == nil {
+		return nil
+	}
+	out := new(Cluster)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Guarantee) DeepCopyInto(out *Guarantee) {
+	*out = *in
+	if in.Resource != nil {
+		in, out := &in.Resource, &out.Resource
+		*out = make(v1.ResourceList, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val.DeepCopy()
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Guarantee.
+func (in *Guarantee) DeepCopy() *Guarantee {
+	if in == nil {
+		return nil
+	}
+	out := new(Guarantee)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *NetworkTopologySpec) DeepCopyInto(out *NetworkTopologySpec) {
+	*out = *in
+	if in.HighestTierAllowed != nil {
+		in, out := &in.HighestTierAllowed, &out.HighestTierAllowed
+		*out = new(int)
+		**out = **in
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkTopologySpec.
+func (in *NetworkTopologySpec) DeepCopy() *NetworkTopologySpec {
+	if in == nil {
+		return nil
+	}
+	out := new(NetworkTopologySpec)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *NodeGroupAffinity) DeepCopyInto(out *NodeGroupAffinity) {
+	*out = *in
+	if in.RequiredDuringSchedulingIgnoredDuringExecution != nil {
+		in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution
+		*out = make([]string, len(*in))
+		copy(*out, *in)
+	}
+	if in.PreferredDuringSchedulingIgnoredDuringExecution != nil {
+		in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution
+		*out = make([]string, len(*in))
+		copy(*out, *in)
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeGroupAffinity.
+func (in *NodeGroupAffinity) DeepCopy() *NodeGroupAffinity {
+	if in == nil {
+		return nil
+	}
+	out := new(NodeGroupAffinity)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *NodeGroupAntiAffinity) DeepCopyInto(out *NodeGroupAntiAffinity) {
+	*out = *in
+	if in.RequiredDuringSchedulingIgnoredDuringExecution != nil {
+		in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution
+		*out = make([]string, len(*in))
+		copy(*out, *in)
+	}
+	if in.PreferredDuringSchedulingIgnoredDuringExecution != nil {
+		in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution
+		*out = make([]string, len(*in))
+		copy(*out, *in)
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeGroupAntiAffinity.
+func (in *NodeGroupAntiAffinity) DeepCopy() *NodeGroupAntiAffinity {
+	if in == nil {
+		return nil
+	}
+	out := new(NodeGroupAntiAffinity)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PodGroup) DeepCopyInto(out *PodGroup) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	in.Spec.DeepCopyInto(&out.Spec)
+	in.Status.DeepCopyInto(&out.Status)
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodGroup.
+func (in *PodGroup) DeepCopy() *PodGroup {
+	if in == nil {
+		return nil
+	}
+	out := new(PodGroup)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *PodGroup) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PodGroupCondition) DeepCopyInto(out *PodGroupCondition) {
+	*out = *in
+	in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime)
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodGroupCondition.
+func (in *PodGroupCondition) DeepCopy() *PodGroupCondition {
+	if in == nil {
+		return nil
+	}
+	out := new(PodGroupCondition)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PodGroupList) DeepCopyInto(out *PodGroupList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]PodGroup, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodGroupList.
+func (in *PodGroupList) DeepCopy() *PodGroupList {
+	if in == nil {
+		return nil
+	}
+	out := new(PodGroupList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *PodGroupList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PodGroupSpec) DeepCopyInto(out *PodGroupSpec) {
+	*out = *in
+	if in.MinTaskMember != nil {
+		in, out := &in.MinTaskMember, &out.MinTaskMember
+		*out = make(map[string]int32, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val
+		}
+	}
+	if in.MinResources != nil {
+		in, out := &in.MinResources, &out.MinResources
+		*out = new(v1.ResourceList)
+		if **in != nil {
+			in, out := *in, *out
+			*out = make(map[v1.ResourceName]resource.Quantity, len(*in))
+			for key, val := range *in {
+				(*out)[key] = val.DeepCopy()
+			}
+		}
+	}
+	if in.NetworkTopology != nil {
+		in, out := &in.NetworkTopology, &out.NetworkTopology
+		*out = new(NetworkTopologySpec)
+		(*in).DeepCopyInto(*out)
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodGroupSpec.
+func (in *PodGroupSpec) DeepCopy() *PodGroupSpec {
+	if in == nil {
+		return nil
+	}
+	out := new(PodGroupSpec)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PodGroupStatus) DeepCopyInto(out *PodGroupStatus) {
+	*out = *in
+	if in.Conditions != nil {
+		in, out := &in.Conditions, &out.Conditions
+		*out = make([]PodGroupCondition, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodGroupStatus.
+func (in *PodGroupStatus) DeepCopy() *PodGroupStatus {
+	if in == nil {
+		return nil
+	}
+	out := new(PodGroupStatus)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Queue) DeepCopyInto(out *Queue) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	in.Spec.DeepCopyInto(&out.Spec)
+	in.Status.DeepCopyInto(&out.Status)
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Queue.
+func (in *Queue) DeepCopy() *Queue {
+	if in == nil {
+		return nil
+	}
+	out := new(Queue)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *Queue) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *QueueList) DeepCopyInto(out *QueueList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]Queue, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueueList.
+func (in *QueueList) DeepCopy() *QueueList {
+	if in == nil {
+		return nil
+	}
+	out := new(QueueList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *QueueList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *QueueSpec) DeepCopyInto(out *QueueSpec) {
+	*out = *in
+	if in.Capability != nil {
+		in, out := &in.Capability, &out.Capability
+		*out = make(v1.ResourceList, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val.DeepCopy()
+		}
+	}
+	if in.Reclaimable != nil {
+		in, out := &in.Reclaimable, &out.Reclaimable
+		*out = new(bool)
+		**out = **in
+	}
+	if in.ExtendClusters != nil {
+		in, out := &in.ExtendClusters, &out.ExtendClusters
+		*out = make([]Cluster, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+	in.Guarantee.DeepCopyInto(&out.Guarantee)
+	if in.Affinity != nil {
+		in, out := &in.Affinity, &out.Affinity
+		*out = new(Affinity)
+		(*in).DeepCopyInto(*out)
+	}
+	if in.Deserved != nil {
+		in, out := &in.Deserved, &out.Deserved
+		*out = make(v1.ResourceList, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val.DeepCopy()
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueueSpec.
+func (in *QueueSpec) DeepCopy() *QueueSpec {
+	if in == nil {
+		return nil
+	}
+	out := new(QueueSpec)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *QueueStatus) DeepCopyInto(out *QueueStatus) {
+	*out = *in
+	in.Reservation.DeepCopyInto(&out.Reservation)
+	if in.Allocated != nil {
+		in, out := &in.Allocated, &out.Allocated
+		*out = make(v1.ResourceList, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val.DeepCopy()
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueueStatus.
+func (in *QueueStatus) DeepCopy() *QueueStatus {
+	if in == nil {
+		return nil
+	}
+	out := new(QueueStatus)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Reservation) DeepCopyInto(out *Reservation) {
+	*out = *in
+	if in.Nodes != nil {
+		in, out := &in.Nodes, &out.Nodes
+		*out = make([]string, len(*in))
+		copy(*out, *in)
+	}
+	if in.Resource != nil {
+		in, out := &in.Resource, &out.Resource
+		*out = make(v1.ResourceList, len(*in))
+		for key, val := range *in {
+			(*out)[key] = val.DeepCopy()
+		}
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Reservation.
+func (in *Reservation) DeepCopy() *Reservation {
+	if in == nil {
+		return nil
+	}
+	out := new(Reservation)
+	in.DeepCopyInto(out)
+	return out
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/affinity.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/affinity.go
new file mode 100644
index 000000000..5d141a9e7
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/affinity.go
@@ -0,0 +1,47 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+// AffinityApplyConfiguration represents a declarative configuration of the Affinity type for use
+// with apply.
+type AffinityApplyConfiguration struct {
+	NodeGroupAffinity     *NodeGroupAffinityApplyConfiguration     `json:"nodeGroupAffinity,omitempty"`
+	NodeGroupAntiAffinity *NodeGroupAntiAffinityApplyConfiguration `json:"nodeGroupAntiAffinity,omitempty"`
+}
+
+// AffinityApplyConfiguration constructs a declarative configuration of the Affinity type for use with
+// apply.
+func Affinity() *AffinityApplyConfiguration {
+	return &AffinityApplyConfiguration{}
+}
+
+// WithNodeGroupAffinity sets the NodeGroupAffinity field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the NodeGroupAffinity field is set to the value of the last call.
+func (b *AffinityApplyConfiguration) WithNodeGroupAffinity(value *NodeGroupAffinityApplyConfiguration) *AffinityApplyConfiguration {
+	b.NodeGroupAffinity = value
+	return b
+}
+
+// WithNodeGroupAntiAffinity sets the NodeGroupAntiAffinity field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the NodeGroupAntiAffinity field is set to the value of the last call.
+func (b *AffinityApplyConfiguration) WithNodeGroupAntiAffinity(value *NodeGroupAntiAffinityApplyConfiguration) *AffinityApplyConfiguration {
+	b.NodeGroupAntiAffinity = value
+	return b
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/cluster.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/cluster.go
new file mode 100644
index 000000000..1594d0f65
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/cluster.go
@@ -0,0 +1,60 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	v1 "k8s.io/api/core/v1"
+)
+
+// ClusterApplyConfiguration represents a declarative configuration of the Cluster type for use
+// with apply.
+type ClusterApplyConfiguration struct {
+	Name     *string          `json:"name,omitempty"`
+	Weight   *int32           `json:"weight,omitempty"`
+	Capacity *v1.ResourceList `json:"capacity,omitempty"`
+}
+
+// ClusterApplyConfiguration constructs a declarative configuration of the Cluster type for use with
+// apply.
+func Cluster() *ClusterApplyConfiguration {
+	return &ClusterApplyConfiguration{}
+}
+
+// WithName sets the Name field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Name field is set to the value of the last call.
+func (b *ClusterApplyConfiguration) WithName(value string) *ClusterApplyConfiguration {
+	b.Name = &value
+	return b
+}
+
+// WithWeight sets the Weight field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Weight field is set to the value of the last call.
+func (b *ClusterApplyConfiguration) WithWeight(value int32) *ClusterApplyConfiguration {
+	b.Weight = &value
+	return b
+}
+
+// WithCapacity sets the Capacity field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Capacity field is set to the value of the last call.
+func (b *ClusterApplyConfiguration) WithCapacity(value v1.ResourceList) *ClusterApplyConfiguration {
+	b.Capacity = &value
+	return b
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/guarantee.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/guarantee.go
new file mode 100644
index 000000000..5efa54ec9
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/guarantee.go
@@ -0,0 +1,42 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	v1 "k8s.io/api/core/v1"
+)
+
+// GuaranteeApplyConfiguration represents a declarative configuration of the Guarantee type for use
+// with apply.
+type GuaranteeApplyConfiguration struct {
+	Resource *v1.ResourceList `json:"resource,omitempty"`
+}
+
+// GuaranteeApplyConfiguration constructs a declarative configuration of the Guarantee type for use with
+// apply.
+func Guarantee() *GuaranteeApplyConfiguration {
+	return &GuaranteeApplyConfiguration{}
+}
+
+// WithResource sets the Resource field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Resource field is set to the value of the last call.
+func (b *GuaranteeApplyConfiguration) WithResource(value v1.ResourceList) *GuaranteeApplyConfiguration {
+	b.Resource = &value
+	return b
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/networktopologyspec.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/networktopologyspec.go
new file mode 100644
index 000000000..887393ad3
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/networktopologyspec.go
@@ -0,0 +1,51 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	v1beta1 "volcano.sh/apis/pkg/apis/scheduling/v1beta1"
+)
+
+// NetworkTopologySpecApplyConfiguration represents a declarative configuration of the NetworkTopologySpec type for use
+// with apply.
+type NetworkTopologySpecApplyConfiguration struct {
+	Mode               *v1beta1.NetworkTopologyMode `json:"mode,omitempty"`
+	HighestTierAllowed *int                         `json:"highestTierAllowed,omitempty"`
+}
+
+// NetworkTopologySpecApplyConfiguration constructs a declarative configuration of the NetworkTopologySpec type for use with
+// apply.
+func NetworkTopologySpec() *NetworkTopologySpecApplyConfiguration {
+	return &NetworkTopologySpecApplyConfiguration{}
+}
+
+// WithMode sets the Mode field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Mode field is set to the value of the last call.
+func (b *NetworkTopologySpecApplyConfiguration) WithMode(value v1beta1.NetworkTopologyMode) *NetworkTopologySpecApplyConfiguration {
+	b.Mode = &value
+	return b
+}
+
+// WithHighestTierAllowed sets the HighestTierAllowed field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the HighestTierAllowed field is set to the value of the last call.
+func (b *NetworkTopologySpecApplyConfiguration) WithHighestTierAllowed(value int) *NetworkTopologySpecApplyConfiguration {
+	b.HighestTierAllowed = &value
+	return b
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/nodegroupaffinity.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/nodegroupaffinity.go
new file mode 100644
index 000000000..ddb9f1ab8
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/nodegroupaffinity.go
@@ -0,0 +1,51 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+// NodeGroupAffinityApplyConfiguration represents a declarative configuration of the NodeGroupAffinity type for use
+// with apply.
+type NodeGroupAffinityApplyConfiguration struct {
+	RequiredDuringSchedulingIgnoredDuringExecution  []string `json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty"`
+	PreferredDuringSchedulingIgnoredDuringExecution []string `json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty"`
+}
+
+// NodeGroupAffinityApplyConfiguration constructs a declarative configuration of the NodeGroupAffinity type for use with
+// apply.
+func NodeGroupAffinity() *NodeGroupAffinityApplyConfiguration {
+	return &NodeGroupAffinityApplyConfiguration{}
+}
+
+// WithRequiredDuringSchedulingIgnoredDuringExecution adds the given value to the RequiredDuringSchedulingIgnoredDuringExecution field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the RequiredDuringSchedulingIgnoredDuringExecution field.
+func (b *NodeGroupAffinityApplyConfiguration) WithRequiredDuringSchedulingIgnoredDuringExecution(values ...string) *NodeGroupAffinityApplyConfiguration {
+	for i := range values {
+		b.RequiredDuringSchedulingIgnoredDuringExecution = append(b.RequiredDuringSchedulingIgnoredDuringExecution, values[i])
+	}
+	return b
+}
+
+// WithPreferredDuringSchedulingIgnoredDuringExecution adds the given value to the PreferredDuringSchedulingIgnoredDuringExecution field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the PreferredDuringSchedulingIgnoredDuringExecution field.
+func (b *NodeGroupAffinityApplyConfiguration) WithPreferredDuringSchedulingIgnoredDuringExecution(values ...string) *NodeGroupAffinityApplyConfiguration {
+	for i := range values {
+		b.PreferredDuringSchedulingIgnoredDuringExecution = append(b.PreferredDuringSchedulingIgnoredDuringExecution, values[i])
+	}
+	return b
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/nodegroupantiaffinity.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/nodegroupantiaffinity.go
new file mode 100644
index 000000000..6b4cca280
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/nodegroupantiaffinity.go
@@ -0,0 +1,51 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+// NodeGroupAntiAffinityApplyConfiguration represents a declarative configuration of the NodeGroupAntiAffinity type for use
+// with apply.
+type NodeGroupAntiAffinityApplyConfiguration struct {
+	RequiredDuringSchedulingIgnoredDuringExecution  []string `json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty"`
+	PreferredDuringSchedulingIgnoredDuringExecution []string `json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty"`
+}
+
+// NodeGroupAntiAffinityApplyConfiguration constructs a declarative configuration of the NodeGroupAntiAffinity type for use with
+// apply.
+func NodeGroupAntiAffinity() *NodeGroupAntiAffinityApplyConfiguration {
+	return &NodeGroupAntiAffinityApplyConfiguration{}
+}
+
+// WithRequiredDuringSchedulingIgnoredDuringExecution adds the given value to the RequiredDuringSchedulingIgnoredDuringExecution field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the RequiredDuringSchedulingIgnoredDuringExecution field.
+func (b *NodeGroupAntiAffinityApplyConfiguration) WithRequiredDuringSchedulingIgnoredDuringExecution(values ...string) *NodeGroupAntiAffinityApplyConfiguration {
+	for i := range values {
+		b.RequiredDuringSchedulingIgnoredDuringExecution = append(b.RequiredDuringSchedulingIgnoredDuringExecution, values[i])
+	}
+	return b
+}
+
+// WithPreferredDuringSchedulingIgnoredDuringExecution adds the given value to the PreferredDuringSchedulingIgnoredDuringExecution field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the PreferredDuringSchedulingIgnoredDuringExecution field.
+func (b *NodeGroupAntiAffinityApplyConfiguration) WithPreferredDuringSchedulingIgnoredDuringExecution(values ...string) *NodeGroupAntiAffinityApplyConfiguration {
+	for i := range values {
+		b.PreferredDuringSchedulingIgnoredDuringExecution = append(b.PreferredDuringSchedulingIgnoredDuringExecution, values[i])
+	}
+	return b
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/podgroup.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/podgroup.go
new file mode 100644
index 000000000..37fef63dc
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/podgroup.go
@@ -0,0 +1,224 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	types "k8s.io/apimachinery/pkg/types"
+	v1 "k8s.io/client-go/applyconfigurations/meta/v1"
+)
+
+// PodGroupApplyConfiguration represents a declarative configuration of the PodGroup type for use
+// with apply.
+type PodGroupApplyConfiguration struct {
+	v1.TypeMetaApplyConfiguration    `json:",inline"`
+	*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
+	Spec                             *PodGroupSpecApplyConfiguration   `json:"spec,omitempty"`
+	Status                           *PodGroupStatusApplyConfiguration `json:"status,omitempty"`
+}
+
+// PodGroup constructs a declarative configuration of the PodGroup type for use with
+// apply.
+func PodGroup(name, namespace string) *PodGroupApplyConfiguration {
+	b := &PodGroupApplyConfiguration{}
+	b.WithName(name)
+	b.WithNamespace(namespace)
+	b.WithKind("PodGroup")
+	b.WithAPIVersion("scheduling.volcano.sh/v1beta1")
+	return b
+}
+
+// WithKind sets the Kind field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Kind field is set to the value of the last call.
+func (b *PodGroupApplyConfiguration) WithKind(value string) *PodGroupApplyConfiguration {
+	b.TypeMetaApplyConfiguration.Kind = &value
+	return b
+}
+
+// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the APIVersion field is set to the value of the last call.
+func (b *PodGroupApplyConfiguration) WithAPIVersion(value string) *PodGroupApplyConfiguration {
+	b.TypeMetaApplyConfiguration.APIVersion = &value
+	return b
+}
+
+// WithName sets the Name field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Name field is set to the value of the last call.
+func (b *PodGroupApplyConfiguration) WithName(value string) *PodGroupApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.Name = &value
+	return b
+}
+
+// WithGenerateName sets the GenerateName field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the GenerateName field is set to the value of the last call.
+func (b *PodGroupApplyConfiguration) WithGenerateName(value string) *PodGroupApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
+	return b
+}
+
+// WithNamespace sets the Namespace field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Namespace field is set to the value of the last call.
+func (b *PodGroupApplyConfiguration) WithNamespace(value string) *PodGroupApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.Namespace = &value
+	return b
+}
+
+// WithUID sets the UID field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the UID field is set to the value of the last call.
+func (b *PodGroupApplyConfiguration) WithUID(value types.UID) *PodGroupApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.UID = &value
+	return b
+}
+
+// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the ResourceVersion field is set to the value of the last call.
+func (b *PodGroupApplyConfiguration) WithResourceVersion(value string) *PodGroupApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
+	return b
+}
+
+// WithGeneration sets the Generation field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Generation field is set to the value of the last call.
+func (b *PodGroupApplyConfiguration) WithGeneration(value int64) *PodGroupApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.Generation = &value
+	return b
+}
+
+// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the CreationTimestamp field is set to the value of the last call.
+func (b *PodGroupApplyConfiguration) WithCreationTimestamp(value metav1.Time) *PodGroupApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
+	return b
+}
+
+// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the DeletionTimestamp field is set to the value of the last call.
+func (b *PodGroupApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *PodGroupApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
+	return b
+}
+
+// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
+func (b *PodGroupApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *PodGroupApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
+	return b
+}
+
+// WithLabels puts the entries into the Labels field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, the entries provided by each call will be put on the Labels field,
+// overwriting an existing map entries in Labels field with the same key.
+func (b *PodGroupApplyConfiguration) WithLabels(entries map[string]string) *PodGroupApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
+	}
+	for k, v := range entries {
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
+	}
+	return b
+}
+
+// WithAnnotations puts the entries into the Annotations field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, the entries provided by each call will be put on the Annotations field,
+// overwriting an existing map entries in Annotations field with the same key.
+func (b *PodGroupApplyConfiguration) WithAnnotations(entries map[string]string) *PodGroupApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
+	}
+	for k, v := range entries {
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
+	}
+	return b
+}
+
+// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the OwnerReferences field.
+func (b *PodGroupApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *PodGroupApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	for i := range values {
+		if values[i] == nil {
+			panic("nil value passed to WithOwnerReferences")
+		}
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
+	}
+	return b
+}
+
+// WithFinalizers adds the given value to the Finalizers field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the Finalizers field.
+func (b *PodGroupApplyConfiguration) WithFinalizers(values ...string) *PodGroupApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	for i := range values {
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
+	}
+	return b
+}
+
+func (b *PodGroupApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
+	if b.ObjectMetaApplyConfiguration == nil {
+		b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
+	}
+}
+
+// WithSpec sets the Spec field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Spec field is set to the value of the last call.
+func (b *PodGroupApplyConfiguration) WithSpec(value *PodGroupSpecApplyConfiguration) *PodGroupApplyConfiguration {
+	b.Spec = value
+	return b
+}
+
+// WithStatus sets the Status field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Status field is set to the value of the last call.
+func (b *PodGroupApplyConfiguration) WithStatus(value *PodGroupStatusApplyConfiguration) *PodGroupApplyConfiguration {
+	b.Status = value
+	return b
+}
+
+// GetName retrieves the value of the Name field in the declarative configuration.
+func (b *PodGroupApplyConfiguration) GetName() *string {
+	b.ensureObjectMetaApplyConfigurationExists()
+	return b.ObjectMetaApplyConfiguration.Name
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/podgroupcondition.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/podgroupcondition.go
new file mode 100644
index 000000000..5b2de0a24
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/podgroupcondition.go
@@ -0,0 +1,89 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	v1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	schedulingv1beta1 "volcano.sh/apis/pkg/apis/scheduling/v1beta1"
+)
+
+// PodGroupConditionApplyConfiguration represents a declarative configuration of the PodGroupCondition type for use
+// with apply.
+type PodGroupConditionApplyConfiguration struct {
+	Type               *schedulingv1beta1.PodGroupConditionType `json:"type,omitempty"`
+	Status             *v1.ConditionStatus                      `json:"status,omitempty"`
+	TransitionID       *string                                  `json:"transitionID,omitempty"`
+	LastTransitionTime *metav1.Time                             `json:"lastTransitionTime,omitempty"`
+	Reason             *string                                  `json:"reason,omitempty"`
+	Message            *string                                  `json:"message,omitempty"`
+}
+
+// PodGroupConditionApplyConfiguration constructs a declarative configuration of the PodGroupCondition type for use with
+// apply.
+func PodGroupCondition() *PodGroupConditionApplyConfiguration {
+	return &PodGroupConditionApplyConfiguration{}
+}
+
+// WithType sets the Type field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Type field is set to the value of the last call.
+func (b *PodGroupConditionApplyConfiguration) WithType(value schedulingv1beta1.PodGroupConditionType) *PodGroupConditionApplyConfiguration {
+	b.Type = &value
+	return b
+}
+
+// WithStatus sets the Status field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Status field is set to the value of the last call.
+func (b *PodGroupConditionApplyConfiguration) WithStatus(value v1.ConditionStatus) *PodGroupConditionApplyConfiguration {
+	b.Status = &value
+	return b
+}
+
+// WithTransitionID sets the TransitionID field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the TransitionID field is set to the value of the last call.
+func (b *PodGroupConditionApplyConfiguration) WithTransitionID(value string) *PodGroupConditionApplyConfiguration {
+	b.TransitionID = &value
+	return b
+}
+
+// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the LastTransitionTime field is set to the value of the last call.
+func (b *PodGroupConditionApplyConfiguration) WithLastTransitionTime(value metav1.Time) *PodGroupConditionApplyConfiguration {
+	b.LastTransitionTime = &value
+	return b
+}
+
+// WithReason sets the Reason field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Reason field is set to the value of the last call.
+func (b *PodGroupConditionApplyConfiguration) WithReason(value string) *PodGroupConditionApplyConfiguration {
+	b.Reason = &value
+	return b
+}
+
+// WithMessage sets the Message field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Message field is set to the value of the last call.
+func (b *PodGroupConditionApplyConfiguration) WithMessage(value string) *PodGroupConditionApplyConfiguration {
+	b.Message = &value
+	return b
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/podgroupspec.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/podgroupspec.go
new file mode 100644
index 000000000..95bcdb289
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/podgroupspec.go
@@ -0,0 +1,93 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	v1 "k8s.io/api/core/v1"
+)
+
+// PodGroupSpecApplyConfiguration represents a declarative configuration of the PodGroupSpec type for use
+// with apply.
+type PodGroupSpecApplyConfiguration struct {
+	MinMember         *int32                                 `json:"minMember,omitempty"`
+	MinTaskMember     map[string]int32                       `json:"minTaskMember,omitempty"`
+	Queue             *string                                `json:"queue,omitempty"`
+	PriorityClassName *string                                `json:"priorityClassName,omitempty"`
+	MinResources      *v1.ResourceList                       `json:"minResources,omitempty"`
+	NetworkTopology   *NetworkTopologySpecApplyConfiguration `json:"networkTopology,omitempty"`
+}
+
+// PodGroupSpecApplyConfiguration constructs a declarative configuration of the PodGroupSpec type for use with
+// apply.
+func PodGroupSpec() *PodGroupSpecApplyConfiguration {
+	return &PodGroupSpecApplyConfiguration{}
+}
+
+// WithMinMember sets the MinMember field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the MinMember field is set to the value of the last call.
+func (b *PodGroupSpecApplyConfiguration) WithMinMember(value int32) *PodGroupSpecApplyConfiguration {
+	b.MinMember = &value
+	return b
+}
+
+// WithMinTaskMember puts the entries into the MinTaskMember field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, the entries provided by each call will be put on the MinTaskMember field,
+// overwriting an existing map entries in MinTaskMember field with the same key.
+func (b *PodGroupSpecApplyConfiguration) WithMinTaskMember(entries map[string]int32) *PodGroupSpecApplyConfiguration {
+	if b.MinTaskMember == nil && len(entries) > 0 {
+		b.MinTaskMember = make(map[string]int32, len(entries))
+	}
+	for k, v := range entries {
+		b.MinTaskMember[k] = v
+	}
+	return b
+}
+
+// WithQueue sets the Queue field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Queue field is set to the value of the last call.
+func (b *PodGroupSpecApplyConfiguration) WithQueue(value string) *PodGroupSpecApplyConfiguration {
+	b.Queue = &value
+	return b
+}
+
+// WithPriorityClassName sets the PriorityClassName field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the PriorityClassName field is set to the value of the last call.
+func (b *PodGroupSpecApplyConfiguration) WithPriorityClassName(value string) *PodGroupSpecApplyConfiguration {
+	b.PriorityClassName = &value
+	return b
+}
+
+// WithMinResources sets the MinResources field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the MinResources field is set to the value of the last call.
+func (b *PodGroupSpecApplyConfiguration) WithMinResources(value v1.ResourceList) *PodGroupSpecApplyConfiguration {
+	b.MinResources = &value
+	return b
+}
+
+// WithNetworkTopology sets the NetworkTopology field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the NetworkTopology field is set to the value of the last call.
+func (b *PodGroupSpecApplyConfiguration) WithNetworkTopology(value *NetworkTopologySpecApplyConfiguration) *PodGroupSpecApplyConfiguration {
+	b.NetworkTopology = value
+	return b
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/podgroupstatus.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/podgroupstatus.go
new file mode 100644
index 000000000..acd9c96d7
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/podgroupstatus.go
@@ -0,0 +1,83 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	schedulingv1beta1 "volcano.sh/apis/pkg/apis/scheduling/v1beta1"
+)
+
+// PodGroupStatusApplyConfiguration represents a declarative configuration of the PodGroupStatus type for use
+// with apply.
+type PodGroupStatusApplyConfiguration struct {
+	Phase      *schedulingv1beta1.PodGroupPhase      `json:"phase,omitempty"`
+	Conditions []PodGroupConditionApplyConfiguration `json:"conditions,omitempty"`
+	Running    *int32                                `json:"running,omitempty"`
+	Succeeded  *int32                                `json:"succeeded,omitempty"`
+	Failed     *int32                                `json:"failed,omitempty"`
+}
+
+// PodGroupStatusApplyConfiguration constructs a declarative configuration of the PodGroupStatus type for use with
+// apply.
+func PodGroupStatus() *PodGroupStatusApplyConfiguration {
+	return &PodGroupStatusApplyConfiguration{}
+}
+
+// WithPhase sets the Phase field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Phase field is set to the value of the last call.
+func (b *PodGroupStatusApplyConfiguration) WithPhase(value schedulingv1beta1.PodGroupPhase) *PodGroupStatusApplyConfiguration {
+	b.Phase = &value
+	return b
+}
+
+// WithConditions adds the given value to the Conditions field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the Conditions field.
+func (b *PodGroupStatusApplyConfiguration) WithConditions(values ...*PodGroupConditionApplyConfiguration) *PodGroupStatusApplyConfiguration {
+	for i := range values {
+		if values[i] == nil {
+			panic("nil value passed to WithConditions")
+		}
+		b.Conditions = append(b.Conditions, *values[i])
+	}
+	return b
+}
+
+// WithRunning sets the Running field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Running field is set to the value of the last call.
+func (b *PodGroupStatusApplyConfiguration) WithRunning(value int32) *PodGroupStatusApplyConfiguration {
+	b.Running = &value
+	return b
+}
+
+// WithSucceeded sets the Succeeded field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Succeeded field is set to the value of the last call.
+func (b *PodGroupStatusApplyConfiguration) WithSucceeded(value int32) *PodGroupStatusApplyConfiguration {
+	b.Succeeded = &value
+	return b
+}
+
+// WithFailed sets the Failed field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Failed field is set to the value of the last call.
+func (b *PodGroupStatusApplyConfiguration) WithFailed(value int32) *PodGroupStatusApplyConfiguration {
+	b.Failed = &value
+	return b
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/queue.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/queue.go
new file mode 100644
index 000000000..5d2b5bc19
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/queue.go
@@ -0,0 +1,223 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	types "k8s.io/apimachinery/pkg/types"
+	v1 "k8s.io/client-go/applyconfigurations/meta/v1"
+)
+
+// QueueApplyConfiguration represents a declarative configuration of the Queue type for use
+// with apply.
+type QueueApplyConfiguration struct {
+	v1.TypeMetaApplyConfiguration    `json:",inline"`
+	*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
+	Spec                             *QueueSpecApplyConfiguration   `json:"spec,omitempty"`
+	Status                           *QueueStatusApplyConfiguration `json:"status,omitempty"`
+}
+
+// Queue constructs a declarative configuration of the Queue type for use with
+// apply.
+func Queue(name string) *QueueApplyConfiguration {
+	b := &QueueApplyConfiguration{}
+	b.WithName(name)
+	b.WithKind("Queue")
+	b.WithAPIVersion("scheduling.volcano.sh/v1beta1")
+	return b
+}
+
+// WithKind sets the Kind field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Kind field is set to the value of the last call.
+func (b *QueueApplyConfiguration) WithKind(value string) *QueueApplyConfiguration {
+	b.TypeMetaApplyConfiguration.Kind = &value
+	return b
+}
+
+// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the APIVersion field is set to the value of the last call.
+func (b *QueueApplyConfiguration) WithAPIVersion(value string) *QueueApplyConfiguration {
+	b.TypeMetaApplyConfiguration.APIVersion = &value
+	return b
+}
+
+// WithName sets the Name field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Name field is set to the value of the last call.
+func (b *QueueApplyConfiguration) WithName(value string) *QueueApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.Name = &value
+	return b
+}
+
+// WithGenerateName sets the GenerateName field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the GenerateName field is set to the value of the last call.
+func (b *QueueApplyConfiguration) WithGenerateName(value string) *QueueApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.GenerateName = &value
+	return b
+}
+
+// WithNamespace sets the Namespace field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Namespace field is set to the value of the last call.
+func (b *QueueApplyConfiguration) WithNamespace(value string) *QueueApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.Namespace = &value
+	return b
+}
+
+// WithUID sets the UID field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the UID field is set to the value of the last call.
+func (b *QueueApplyConfiguration) WithUID(value types.UID) *QueueApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.UID = &value
+	return b
+}
+
+// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the ResourceVersion field is set to the value of the last call.
+func (b *QueueApplyConfiguration) WithResourceVersion(value string) *QueueApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.ResourceVersion = &value
+	return b
+}
+
+// WithGeneration sets the Generation field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Generation field is set to the value of the last call.
+func (b *QueueApplyConfiguration) WithGeneration(value int64) *QueueApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.Generation = &value
+	return b
+}
+
+// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the CreationTimestamp field is set to the value of the last call.
+func (b *QueueApplyConfiguration) WithCreationTimestamp(value metav1.Time) *QueueApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.CreationTimestamp = &value
+	return b
+}
+
+// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the DeletionTimestamp field is set to the value of the last call.
+func (b *QueueApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *QueueApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.DeletionTimestamp = &value
+	return b
+}
+
+// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
+func (b *QueueApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *QueueApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	b.ObjectMetaApplyConfiguration.DeletionGracePeriodSeconds = &value
+	return b
+}
+
+// WithLabels puts the entries into the Labels field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, the entries provided by each call will be put on the Labels field,
+// overwriting an existing map entries in Labels field with the same key.
+func (b *QueueApplyConfiguration) WithLabels(entries map[string]string) *QueueApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	if b.ObjectMetaApplyConfiguration.Labels == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Labels = make(map[string]string, len(entries))
+	}
+	for k, v := range entries {
+		b.ObjectMetaApplyConfiguration.Labels[k] = v
+	}
+	return b
+}
+
+// WithAnnotations puts the entries into the Annotations field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, the entries provided by each call will be put on the Annotations field,
+// overwriting an existing map entries in Annotations field with the same key.
+func (b *QueueApplyConfiguration) WithAnnotations(entries map[string]string) *QueueApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	if b.ObjectMetaApplyConfiguration.Annotations == nil && len(entries) > 0 {
+		b.ObjectMetaApplyConfiguration.Annotations = make(map[string]string, len(entries))
+	}
+	for k, v := range entries {
+		b.ObjectMetaApplyConfiguration.Annotations[k] = v
+	}
+	return b
+}
+
+// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the OwnerReferences field.
+func (b *QueueApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *QueueApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	for i := range values {
+		if values[i] == nil {
+			panic("nil value passed to WithOwnerReferences")
+		}
+		b.ObjectMetaApplyConfiguration.OwnerReferences = append(b.ObjectMetaApplyConfiguration.OwnerReferences, *values[i])
+	}
+	return b
+}
+
+// WithFinalizers adds the given value to the Finalizers field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the Finalizers field.
+func (b *QueueApplyConfiguration) WithFinalizers(values ...string) *QueueApplyConfiguration {
+	b.ensureObjectMetaApplyConfigurationExists()
+	for i := range values {
+		b.ObjectMetaApplyConfiguration.Finalizers = append(b.ObjectMetaApplyConfiguration.Finalizers, values[i])
+	}
+	return b
+}
+
+func (b *QueueApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
+	if b.ObjectMetaApplyConfiguration == nil {
+		b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
+	}
+}
+
+// WithSpec sets the Spec field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Spec field is set to the value of the last call.
+func (b *QueueApplyConfiguration) WithSpec(value *QueueSpecApplyConfiguration) *QueueApplyConfiguration {
+	b.Spec = value
+	return b
+}
+
+// WithStatus sets the Status field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Status field is set to the value of the last call.
+func (b *QueueApplyConfiguration) WithStatus(value *QueueStatusApplyConfiguration) *QueueApplyConfiguration {
+	b.Status = value
+	return b
+}
+
+// GetName retrieves the value of the Name field in the declarative configuration.
+func (b *QueueApplyConfiguration) GetName() *string {
+	b.ensureObjectMetaApplyConfigurationExists()
+	return b.ObjectMetaApplyConfiguration.Name
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/queuespec.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/queuespec.go
new file mode 100644
index 000000000..2282f05b6
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/queuespec.go
@@ -0,0 +1,128 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	v1 "k8s.io/api/core/v1"
+)
+
+// QueueSpecApplyConfiguration represents a declarative configuration of the QueueSpec type for use
+// with apply.
+type QueueSpecApplyConfiguration struct {
+	Weight         *int32                       `json:"weight,omitempty"`
+	Capability     *v1.ResourceList             `json:"capability,omitempty"`
+	Reclaimable    *bool                        `json:"reclaimable,omitempty"`
+	ExtendClusters []ClusterApplyConfiguration  `json:"extendClusters,omitempty"`
+	Guarantee      *GuaranteeApplyConfiguration `json:"guarantee,omitempty"`
+	Affinity       *AffinityApplyConfiguration  `json:"affinity,omitempty"`
+	Type           *string                      `json:"type,omitempty"`
+	Parent         *string                      `json:"parent,omitempty"`
+	Deserved       *v1.ResourceList             `json:"deserved,omitempty"`
+	Priority       *int32                       `json:"priority,omitempty"`
+}
+
+// QueueSpecApplyConfiguration constructs a declarative configuration of the QueueSpec type for use with
+// apply.
+func QueueSpec() *QueueSpecApplyConfiguration {
+	return &QueueSpecApplyConfiguration{}
+}
+
+// WithWeight sets the Weight field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Weight field is set to the value of the last call.
+func (b *QueueSpecApplyConfiguration) WithWeight(value int32) *QueueSpecApplyConfiguration {
+	b.Weight = &value
+	return b
+}
+
+// WithCapability sets the Capability field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Capability field is set to the value of the last call.
+func (b *QueueSpecApplyConfiguration) WithCapability(value v1.ResourceList) *QueueSpecApplyConfiguration {
+	b.Capability = &value
+	return b
+}
+
+// WithReclaimable sets the Reclaimable field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Reclaimable field is set to the value of the last call.
+func (b *QueueSpecApplyConfiguration) WithReclaimable(value bool) *QueueSpecApplyConfiguration {
+	b.Reclaimable = &value
+	return b
+}
+
+// WithExtendClusters adds the given value to the ExtendClusters field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the ExtendClusters field.
+func (b *QueueSpecApplyConfiguration) WithExtendClusters(values ...*ClusterApplyConfiguration) *QueueSpecApplyConfiguration {
+	for i := range values {
+		if values[i] == nil {
+			panic("nil value passed to WithExtendClusters")
+		}
+		b.ExtendClusters = append(b.ExtendClusters, *values[i])
+	}
+	return b
+}
+
+// WithGuarantee sets the Guarantee field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Guarantee field is set to the value of the last call.
+func (b *QueueSpecApplyConfiguration) WithGuarantee(value *GuaranteeApplyConfiguration) *QueueSpecApplyConfiguration {
+	b.Guarantee = value
+	return b
+}
+
+// WithAffinity sets the Affinity field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Affinity field is set to the value of the last call.
+func (b *QueueSpecApplyConfiguration) WithAffinity(value *AffinityApplyConfiguration) *QueueSpecApplyConfiguration {
+	b.Affinity = value
+	return b
+}
+
+// WithType sets the Type field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Type field is set to the value of the last call.
+func (b *QueueSpecApplyConfiguration) WithType(value string) *QueueSpecApplyConfiguration {
+	b.Type = &value
+	return b
+}
+
+// WithParent sets the Parent field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Parent field is set to the value of the last call.
+func (b *QueueSpecApplyConfiguration) WithParent(value string) *QueueSpecApplyConfiguration {
+	b.Parent = &value
+	return b
+}
+
+// WithDeserved sets the Deserved field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Deserved field is set to the value of the last call.
+func (b *QueueSpecApplyConfiguration) WithDeserved(value v1.ResourceList) *QueueSpecApplyConfiguration {
+	b.Deserved = &value
+	return b
+}
+
+// WithPriority sets the Priority field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Priority field is set to the value of the last call.
+func (b *QueueSpecApplyConfiguration) WithPriority(value int32) *QueueSpecApplyConfiguration {
+	b.Priority = &value
+	return b
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/queuestatus.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/queuestatus.go
new file mode 100644
index 000000000..615866dec
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/queuestatus.go
@@ -0,0 +1,106 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	v1 "k8s.io/api/core/v1"
+	schedulingv1beta1 "volcano.sh/apis/pkg/apis/scheduling/v1beta1"
+)
+
+// QueueStatusApplyConfiguration represents a declarative configuration of the QueueStatus type for use
+// with apply.
+type QueueStatusApplyConfiguration struct {
+	State       *schedulingv1beta1.QueueState  `json:"state,omitempty"`
+	Unknown     *int32                         `json:"unknown,omitempty"`
+	Pending     *int32                         `json:"pending,omitempty"`
+	Running     *int32                         `json:"running,omitempty"`
+	Inqueue     *int32                         `json:"inqueue,omitempty"`
+	Completed   *int32                         `json:"completed,omitempty"`
+	Reservation *ReservationApplyConfiguration `json:"reservation,omitempty"`
+	Allocated   *v1.ResourceList               `json:"allocated,omitempty"`
+}
+
+// QueueStatusApplyConfiguration constructs a declarative configuration of the QueueStatus type for use with
+// apply.
+func QueueStatus() *QueueStatusApplyConfiguration {
+	return &QueueStatusApplyConfiguration{}
+}
+
+// WithState sets the State field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the State field is set to the value of the last call.
+func (b *QueueStatusApplyConfiguration) WithState(value schedulingv1beta1.QueueState) *QueueStatusApplyConfiguration {
+	b.State = &value
+	return b
+}
+
+// WithUnknown sets the Unknown field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Unknown field is set to the value of the last call.
+func (b *QueueStatusApplyConfiguration) WithUnknown(value int32) *QueueStatusApplyConfiguration {
+	b.Unknown = &value
+	return b
+}
+
+// WithPending sets the Pending field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Pending field is set to the value of the last call.
+func (b *QueueStatusApplyConfiguration) WithPending(value int32) *QueueStatusApplyConfiguration {
+	b.Pending = &value
+	return b
+}
+
+// WithRunning sets the Running field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Running field is set to the value of the last call.
+func (b *QueueStatusApplyConfiguration) WithRunning(value int32) *QueueStatusApplyConfiguration {
+	b.Running = &value
+	return b
+}
+
+// WithInqueue sets the Inqueue field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Inqueue field is set to the value of the last call.
+func (b *QueueStatusApplyConfiguration) WithInqueue(value int32) *QueueStatusApplyConfiguration {
+	b.Inqueue = &value
+	return b
+}
+
+// WithCompleted sets the Completed field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Completed field is set to the value of the last call.
+func (b *QueueStatusApplyConfiguration) WithCompleted(value int32) *QueueStatusApplyConfiguration {
+	b.Completed = &value
+	return b
+}
+
+// WithReservation sets the Reservation field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Reservation field is set to the value of the last call.
+func (b *QueueStatusApplyConfiguration) WithReservation(value *ReservationApplyConfiguration) *QueueStatusApplyConfiguration {
+	b.Reservation = value
+	return b
+}
+
+// WithAllocated sets the Allocated field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Allocated field is set to the value of the last call.
+func (b *QueueStatusApplyConfiguration) WithAllocated(value v1.ResourceList) *QueueStatusApplyConfiguration {
+	b.Allocated = &value
+	return b
+}
diff --git a/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/reservation.go b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/reservation.go
new file mode 100644
index 000000000..cf1fc3f9e
--- /dev/null
+++ b/vendor/volcano.sh/apis/pkg/client/applyconfiguration/scheduling/v1beta1/reservation.go
@@ -0,0 +1,53 @@
+/*
+Copyright The Volcano Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+// Code generated by applyconfiguration-gen. DO NOT EDIT.
+
+package v1beta1
+
+import (
+	v1 "k8s.io/api/core/v1"
+)
+
+// ReservationApplyConfiguration represents a declarative configuration of the Reservation type for use
+// with apply.
+type ReservationApplyConfiguration struct {
+	Nodes    []string         `json:"nodes,omitempty"`
+	Resource *v1.ResourceList `json:"resource,omitempty"`
+}
+
+// ReservationApplyConfiguration constructs a declarative configuration of the Reservation type for use with
+// apply.
+func Reservation() *ReservationApplyConfiguration {
+	return &ReservationApplyConfiguration{}
+}
+
+// WithNodes adds the given value to the Nodes field in the declarative configuration
+// and returns the receiver, so that objects can be build by chaining "With" function invocations.
+// If called multiple times, values provided by each call will be appended to the Nodes field.
+func (b *ReservationApplyConfiguration) WithNodes(values ...string) *ReservationApplyConfiguration {
+	for i := range values {
+		b.Nodes = append(b.Nodes, values[i])
+	}
+	return b
+}
+
+// WithResource sets the Resource field in the declarative configuration to the given value
+// and returns the receiver, so that objects can be built by chaining "With" function invocations.
+// If called multiple times, the Resource field is set to the value of the last call.
+func (b *ReservationApplyConfiguration) WithResource(value v1.ResourceList) *ReservationApplyConfiguration {
+	b.Resource = &value
+	return b
+}



Test patch:
diff --git a/pkg/controller/admissionchecks/multikueue/indexer_test.go b/pkg/controller/admissionchecks/multikueue/indexer_test.go
index a90f997b8..3c2f70a9c 100644
--- a/pkg/controller/admissionchecks/multikueue/indexer_test.go
+++ b/pkg/controller/admissionchecks/multikueue/indexer_test.go
@@ -172,3 +172,77 @@ func TestListMultiKueueConfigsUsingMultiKueueClusters(t *testing.T) {
 		})
 	}
 }
+
+func TestListWorkloadsWithAdmissionCheck(t *testing.T) {
+	cases := map[string]struct {
+		workloads     []*kueue.Workload
+		filter        client.ListOption
+		wantListError error
+		wantList      []string
+	}{
+		"no workloads": {
+			filter: client.MatchingFields{WorkloadsWithAdmissionCheckKey: "ac1"},
+		},
+		"single workload, single match": {
+			workloads: []*kueue.Workload{
+				utiltestingapi.MakeWorkload("wl1", TestNamespace).
+					AdmissionCheck(kueue.AdmissionCheckState{
+						Name:  "ac1",
+						State: kueue.CheckStatePending,
+					}).Obj(),
+			},
+			filter:   client.MatchingFields{WorkloadsWithAdmissionCheckKey: "ac1"},
+			wantList: []string{"wl1"},
+		},
+		"single workload, no match": {
+			workloads: []*kueue.Workload{
+				utiltestingapi.MakeWorkload("wl2", TestNamespace).
+					AdmissionCheck(kueue.AdmissionCheckState{
+						Name:  "ac2",
+						State: kueue.CheckStatePending,
+					}).Obj(),
+			},
+			filter: client.MatchingFields{WorkloadsWithAdmissionCheckKey: "ac1"},
+		},
+		"multiple workloads, single match": {
+			workloads: []*kueue.Workload{
+				utiltestingapi.MakeWorkload("wl1", TestNamespace).
+					AdmissionCheck(kueue.AdmissionCheckState{
+						Name:  "ac1",
+						State: kueue.CheckStatePending,
+					}).Obj(),
+				utiltestingapi.MakeWorkload("wl2", TestNamespace).
+					AdmissionCheck(kueue.AdmissionCheckState{
+						Name:  "ac2",
+						State: kueue.CheckStatePending,
+					}).Obj(),
+			},
+			filter:   client.MatchingFields{WorkloadsWithAdmissionCheckKey: "ac1"},
+			wantList: []string{"wl1"},
+		},
+	}
+	for name, tc := range cases {
+		t.Run(name, func(t *testing.T) {
+			ctx, _ := utiltesting.ContextWithLog(t)
+			builder := getClientBuilder(ctx)
+			k8sClient := builder.Build()
+			for _, wl := range tc.workloads {
+				if err := k8sClient.Create(ctx, wl); err != nil {
+					t.Fatalf("Unable to create %q workload: %v", client.ObjectKeyFromObject(wl), err)
+				}
+			}
+
+			lst := &kueue.WorkloadList{}
+
+			gotListErr := k8sClient.List(ctx, lst, tc.filter)
+			if diff := cmp.Diff(tc.wantListError, gotListErr); diff != "" {
+				t.Errorf("unexpected error (-want/+got):\n%s", diff)
+			}
+
+			gotList := slices.Map(lst.Items, func(wl *kueue.Workload) string { return wl.Name })
+			if diff := cmp.Diff(tc.wantList, gotList, cmpopts.EquateEmpty(), cmpopts.SortSlices(func(a, b string) bool { return a < b })); diff != "" {
+				t.Errorf("unexpected (-want/+got):\n%s", diff)
+			}
+		})
+	}
+}
diff --git a/pkg/controller/admissionchecks/multikueue/workload_test.go b/pkg/controller/admissionchecks/multikueue/workload_test.go
index 0613a8f82..6453997bf 100644
--- a/pkg/controller/admissionchecks/multikueue/workload_test.go
+++ b/pkg/controller/admissionchecks/multikueue/workload_test.go
@@ -55,9 +55,7 @@ import (
 	_ "sigs.k8s.io/kueue/pkg/controller/jobs"
 )
 
-var (
-	errFake = errors.New("fake error")
-)
+var errFake = errors.New("fake error")
 
 func TestWlReconcile(t *testing.T) {
 	now := time.Now()
@@ -1747,3 +1745,164 @@ func TestNominateAndSynchronizeWorkers_MoreCases(t *testing.T) {
 		})
 	}
 }
+
+// mockQueue implements workqueue.TypedRateLimitingInterface for testing
+type mockQueue struct {
+	addedItems []reconcile.Request
+}
+
+func (m *mockQueue) Add(item reconcile.Request) {
+	m.addedItems = append(m.addedItems, item)
+}
+
+func (m *mockQueue) Len() int                          { return 0 }
+func (m *mockQueue) Get() (reconcile.Request, bool)    { return reconcile.Request{}, false }
+func (m *mockQueue) Done(reconcile.Request)            {}
+func (m *mockQueue) Forget(reconcile.Request)          {}
+func (m *mockQueue) NumRequeues(reconcile.Request) int { return 0 }
+func (m *mockQueue) AddRateLimited(reconcile.Request)  {}
+func (m *mockQueue) AddAfter(item reconcile.Request, duration time.Duration) {
+	m.addedItems = append(m.addedItems, item)
+}
+func (m *mockQueue) ShutDown()          {}
+func (m *mockQueue) ShutDownWithDrain() {}
+func (m *mockQueue) ShuttingDown() bool { return false }
+
+func TestConfigHandlerUpdate(t *testing.T) {
+	cases := map[string]struct {
+		admissionChecks   []kueue.AdmissionCheck
+		workloads         []kueue.Workload
+		oldConfig         *kueue.MultiKueueConfig
+		newConfig         *kueue.MultiKueueConfig
+		expectedQueuedWLs []string
+	}{
+		"clusters unchanged - no workloads queued": {
+			admissionChecks: []kueue.AdmissionCheck{
+				*utiltestingapi.MakeAdmissionCheck("ac1").
+					ControllerName(kueue.MultiKueueControllerName).
+					Parameters(kueue.GroupVersion.Group, "MultiKueueConfig", "config1").
+					Obj(),
+			},
+			workloads: []kueue.Workload{
+				*utiltestingapi.MakeWorkload("wl1", TestNamespace).
+					AdmissionCheck(kueue.AdmissionCheckState{Name: "ac1", State: kueue.CheckStatePending}).
+					Obj(),
+			},
+			oldConfig:         utiltestingapi.MakeMultiKueueConfig("config1").Clusters("cluster1", "cluster2").Obj(),
+			newConfig:         utiltestingapi.MakeMultiKueueConfig("config1").Clusters("cluster1", "cluster2").Obj(),
+			expectedQueuedWLs: nil, // No workloads should be queued
+		},
+		"clusters changed - workloads queued": {
+			admissionChecks: []kueue.AdmissionCheck{
+				*utiltestingapi.MakeAdmissionCheck("ac1").
+					ControllerName(kueue.MultiKueueControllerName).
+					Parameters(kueue.GroupVersion.Group, "MultiKueueConfig", "config1").
+					Obj(),
+			},
+			workloads: []kueue.Workload{
+				*utiltestingapi.MakeWorkload("wl1", TestNamespace).
+					AdmissionCheck(kueue.AdmissionCheckState{Name: "ac1", State: kueue.CheckStatePending}).
+					Obj(),
+				*utiltestingapi.MakeWorkload("wl2", TestNamespace).
+					AdmissionCheck(kueue.AdmissionCheckState{Name: "ac1", State: kueue.CheckStateReady}).
+					Obj(),
+			},
+			oldConfig:         utiltestingapi.MakeMultiKueueConfig("config1").Clusters("cluster1").Obj(),
+			newConfig:         utiltestingapi.MakeMultiKueueConfig("config1").Clusters("cluster1", "cluster2").Obj(),
+			expectedQueuedWLs: []string{"wl1", "wl2"}, // Both workloads should be queued
+		},
+		"multiple configs - only affected workloads queued": {
+			admissionChecks: []kueue.AdmissionCheck{
+				*utiltestingapi.MakeAdmissionCheck("ac1").
+					ControllerName(kueue.MultiKueueControllerName).
+					Parameters(kueue.GroupVersion.Group, "MultiKueueConfig", "config1").
+					Obj(),
+				*utiltestingapi.MakeAdmissionCheck("ac2").
+					ControllerName(kueue.MultiKueueControllerName).
+					Parameters(kueue.GroupVersion.Group, "MultiKueueConfig", "other-config").
+					Obj(),
+			},
+			workloads: []kueue.Workload{
+				*utiltestingapi.MakeWorkload("wl1", TestNamespace).
+					AdmissionCheck(kueue.AdmissionCheckState{Name: "ac1", State: kueue.CheckStatePending}).
+					Obj(),
+				*utiltestingapi.MakeWorkload("wl2", TestNamespace).
+					AdmissionCheck(kueue.AdmissionCheckState{Name: "ac2", State: kueue.CheckStatePending}).
+					Obj(),
+			},
+			oldConfig:         utiltestingapi.MakeMultiKueueConfig("config1").Clusters("cluster1").Obj(),
+			newConfig:         utiltestingapi.MakeMultiKueueConfig("config1").Clusters("cluster1", "cluster2").Obj(),
+			expectedQueuedWLs: []string{"wl1"}, // Only wl1 uses config1, wl2 uses other-config
+		},
+	}
+
+	for name, tc := range cases {
+		t.Run(name, func(t *testing.T) {
+			ctx, _ := utiltesting.ContextWithLog(t)
+			clientBuilder := getClientBuilder(ctx)
+
+			for i := range tc.admissionChecks {
+				clientBuilder = clientBuilder.WithObjects(&tc.admissionChecks[i])
+			}
+			for i := range tc.workloads {
+				clientBuilder = clientBuilder.WithObjects(&tc.workloads[i])
+			}
+
+			fakeClient := clientBuilder.Build()
+			handler := &configHandler{client: fakeClient, eventsBatchPeriod: time.Second}
+			mockQ := &mockQueue{}
+
+			updateEvent := event.UpdateEvent{
+				ObjectOld: tc.oldConfig,
+				ObjectNew: tc.newConfig,
+			}
+
+			handler.Update(ctx, updateEvent, mockQ)
+
+			var actualQueuedWLs []string
+			for _, req := range mockQ.addedItems {
+				actualQueuedWLs = append(actualQueuedWLs, req.Name)
+			}
+			sort.Strings(actualQueuedWLs)
+			sort.Strings(tc.expectedQueuedWLs)
+
+			if diff := cmp.Diff(tc.expectedQueuedWLs, actualQueuedWLs); diff != "" {
+				t.Errorf("unexpected queued workloads (-want/+got):\n%s", diff)
+			}
+		})
+	}
+}
+
+func TestConfigHandlerDelete(t *testing.T) {
+	ctx, _ := utiltesting.ContextWithLog(t)
+
+	admissionCheck := utiltestingapi.MakeAdmissionCheck("ac1").
+		ControllerName(kueue.MultiKueueControllerName).
+		Parameters(kueue.GroupVersion.Group, "MultiKueueConfig", "config1").
+		Obj()
+
+	workload := utiltestingapi.MakeWorkload("wl1", TestNamespace).
+		AdmissionCheck(kueue.AdmissionCheckState{Name: "ac1", State: kueue.CheckStatePending}).
+		Obj()
+
+	clientBuilder := getClientBuilder(ctx)
+	clientBuilder = clientBuilder.WithObjects(admissionCheck, workload)
+	fakeClient := clientBuilder.Build()
+
+	handler := &configHandler{client: fakeClient, eventsBatchPeriod: time.Second}
+	mockQ := &mockQueue{}
+
+	config := utiltestingapi.MakeMultiKueueConfig("config1").Clusters("cluster1").Obj()
+	deleteEvent := event.DeleteEvent{
+		Object: config,
+	}
+
+	handler.Delete(ctx, deleteEvent, mockQ)
+
+	if len(mockQ.addedItems) != 1 {
+		t.Errorf("expected 1 workload to be queued, got %d", len(mockQ.addedItems))
+	}
+	if mockQ.addedItems[0].Name != "wl1" {
+		t.Errorf("expected workload wl1 to be queued, got %s", mockQ.addedItems[0].Name)
+	}
+}
diff --git a/pkg/controller/jobs/trainjob/trainjob_controller_test.go b/pkg/controller/jobs/trainjob/trainjob_controller_test.go
index 68cdc7785..a5a475771 100644
--- a/pkg/controller/jobs/trainjob/trainjob_controller_test.go
+++ b/pkg/controller/jobs/trainjob/trainjob_controller_test.go
@@ -71,9 +71,9 @@ func TestRunWithPodsetsInfo(t *testing.T) {
 
 	// Create and refererence a fake ClusterTrainingRuntime
 	testTrainJob := testingtrainjob.MakeTrainJob("trainjob", "ns").RuntimeRef(kftrainerapi.RuntimeRef{
-		APIGroup: ptr.To("trainer.kubeflow.org"),
+		APIGroup: ptr.To(kftrainerapi.GroupVersion.Group),
 		Name:     "test",
-		Kind:     ptr.To("ClusterTrainingRuntime"),
+		Kind:     ptr.To(kftrainerapi.ClusterTrainingRuntimeKind),
 	})
 	testJobset := testingjobset.MakeJobSet("", "").ReplicatedJobs(
 		testingjobset.ReplicatedJobRequirements{
@@ -92,6 +92,8 @@ func TestRunWithPodsetsInfo(t *testing.T) {
 			podsetsInfo: []podset.PodSetInfo{
 				{
 					Name:            "node",
+					Annotations:     map[string]string{"test-annotation": "test"},
+					Labels:          map[string]string{"test-label": "label"},
 					NodeSelector:    map[string]string{"disktype": "ssd"},
 					Tolerations:     []corev1.Toleration{*toleration1.DeepCopy()},
 					SchedulingGates: []corev1.PodSchedulingGate{{Name: "test-scheduling-gate-1"}},
@@ -99,14 +101,20 @@ func TestRunWithPodsetsInfo(t *testing.T) {
 			},
 			wantTrainJob: testTrainJob.Clone().
 				Annotation(firstOverrideIdx, "0").
-				PodSpecOverrides([]kftrainerapi.PodSpecOverride{
+				PodTemplateOverrides([]kftrainerapi.PodTemplateOverride{
 					{
-						TargetJobs: []kftrainerapi.PodSpecOverrideTargetJob{
+						TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
 							{Name: "node"},
 						},
-						NodeSelector:    map[string]string{"disktype": "ssd"},
-						Tolerations:     []corev1.Toleration{*toleration1.DeepCopy()},
-						SchedulingGates: []corev1.PodSchedulingGate{{Name: "test-scheduling-gate-1"}},
+						Metadata: &metav1.ObjectMeta{
+							Annotations: map[string]string{"test-annotation": "test"},
+							Labels:      map[string]string{"test-label": "label"},
+						},
+						Spec: &kftrainerapi.PodTemplateSpecOverride{
+							NodeSelector:    map[string]string{"disktype": "ssd"},
+							Tolerations:     []corev1.Toleration{*toleration1.DeepCopy()},
+							SchedulingGates: []corev1.PodSchedulingGate{{Name: "test-scheduling-gate-1"}},
+						},
 					},
 				}).
 				Suspend(false).
@@ -115,19 +123,23 @@ func TestRunWithPodsetsInfo(t *testing.T) {
 		},
 		"should respect user provided PodSpecOverrides when adding PodSet info config to the trainjob": {
 			trainJob: testTrainJob.Clone().
-				PodSpecOverrides([]kftrainerapi.PodSpecOverride{
+				PodTemplateOverrides([]kftrainerapi.PodTemplateOverride{
 					{
-						TargetJobs: []kftrainerapi.PodSpecOverrideTargetJob{
+						TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
 							{Name: "node"},
 						},
-						NodeSelector:    map[string]string{"disktype": "sdd"},
-						Tolerations:     []corev1.Toleration{*toleration1.DeepCopy()},
-						SchedulingGates: []corev1.PodSchedulingGate{{Name: "test-scheduling-gate-4"}},
+						Spec: &kftrainerapi.PodTemplateSpecOverride{
+							NodeSelector:    map[string]string{"disktype": "sdd"},
+							Tolerations:     []corev1.Toleration{*toleration1.DeepCopy()},
+							SchedulingGates: []corev1.PodSchedulingGate{{Name: "test-scheduling-gate-4"}},
+						},
 					},
 				}).Obj(),
 			podsetsInfo: []podset.PodSetInfo{
 				{
 					Name:            "node",
+					Annotations:     map[string]string{"test-annotation": "test"},
+					Labels:          map[string]string{"test-label": "label"},
 					NodeSelector:    map[string]string{"gpu": "nvidia"},
 					Tolerations:     []corev1.Toleration{*toleration2.DeepCopy()},
 					SchedulingGates: []corev1.PodSchedulingGate{{Name: "test-scheduling-gate-2"}},
@@ -135,22 +147,30 @@ func TestRunWithPodsetsInfo(t *testing.T) {
 			},
 			wantTrainJob: testTrainJob.Clone().
 				Annotation(firstOverrideIdx, "1").
-				PodSpecOverrides([]kftrainerapi.PodSpecOverride{
+				PodTemplateOverrides([]kftrainerapi.PodTemplateOverride{
 					{
-						TargetJobs: []kftrainerapi.PodSpecOverrideTargetJob{
+						TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
 							{Name: "node"},
 						},
-						NodeSelector:    map[string]string{"disktype": "sdd"},
-						Tolerations:     []corev1.Toleration{*toleration1.DeepCopy()},
-						SchedulingGates: []corev1.PodSchedulingGate{{Name: "test-scheduling-gate-4"}},
+						Spec: &kftrainerapi.PodTemplateSpecOverride{
+							NodeSelector:    map[string]string{"disktype": "sdd"},
+							Tolerations:     []corev1.Toleration{*toleration1.DeepCopy()},
+							SchedulingGates: []corev1.PodSchedulingGate{{Name: "test-scheduling-gate-4"}},
+						},
 					},
 					{
-						TargetJobs: []kftrainerapi.PodSpecOverrideTargetJob{
+						TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
 							{Name: "node"},
 						},
-						NodeSelector:    map[string]string{"gpu": "nvidia"},
-						Tolerations:     []corev1.Toleration{*toleration2.DeepCopy()},
-						SchedulingGates: []corev1.PodSchedulingGate{{Name: "test-scheduling-gate-2"}},
+						Metadata: &metav1.ObjectMeta{
+							Annotations: map[string]string{"test-annotation": "test"},
+							Labels:      map[string]string{"test-label": "label"},
+						},
+						Spec: &kftrainerapi.PodTemplateSpecOverride{
+							NodeSelector:    map[string]string{"gpu": "nvidia"},
+							Tolerations:     []corev1.Toleration{*toleration2.DeepCopy()},
+							SchedulingGates: []corev1.PodSchedulingGate{{Name: "test-scheduling-gate-2"}},
+						},
 					},
 				}).
 				Suspend(false).
@@ -238,50 +258,62 @@ func TestRestorePodSetsInfo(t *testing.T) {
 				Obj(),
 			wantReturn: false,
 		},
-		"should remove all the podSpecOverrides starting from the index specified in the annotation": {
+		"should remove all the podTemplateOverrides starting from the index specified in the annotation": {
 			trainJob: testTrainJob.Clone().
 				Annotation(firstOverrideIdx, "2").
-				PodSpecOverrides([]kftrainerapi.PodSpecOverride{
+				PodTemplateOverrides([]kftrainerapi.PodTemplateOverride{
 					{
-						TargetJobs: []kftrainerapi.PodSpecOverrideTargetJob{
+						TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
 							{Name: "user-provided-1"},
 						},
-						NodeSelector: map[string]string{"disktype": "sdd"},
+						Spec: &kftrainerapi.PodTemplateSpecOverride{
+							NodeSelector: map[string]string{"disktype": "sdd"},
+						},
 					},
 					{
-						TargetJobs: []kftrainerapi.PodSpecOverrideTargetJob{
+						TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
 							{Name: "user-provided-2"},
 						},
-						NodeSelector: map[string]string{"disktype": "sdd"},
+						Spec: &kftrainerapi.PodTemplateSpecOverride{
+							NodeSelector: map[string]string{"disktype": "sdd"},
+						},
 					},
 					{
-						TargetJobs: []kftrainerapi.PodSpecOverrideTargetJob{
+						TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
 							{Name: "kueue-provided-1"},
 						},
-						NodeSelector: map[string]string{"disktype": "sdd"},
+						Spec: &kftrainerapi.PodTemplateSpecOverride{
+							NodeSelector: map[string]string{"disktype": "sdd"},
+						},
 					},
 					{
-						TargetJobs: []kftrainerapi.PodSpecOverrideTargetJob{
+						TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
 							{Name: "kueue-provided-2"},
 						},
-						NodeSelector: map[string]string{"disktype": "sdd"},
+						Spec: &kftrainerapi.PodTemplateSpecOverride{
+							NodeSelector: map[string]string{"disktype": "sdd"},
+						},
 					},
 				}).
 				Obj(),
 			wantTrainJob: testTrainJob.Clone().
 				Annotation(firstOverrideIdx, "2").
-				PodSpecOverrides([]kftrainerapi.PodSpecOverride{
+				PodTemplateOverrides([]kftrainerapi.PodTemplateOverride{
 					{
-						TargetJobs: []kftrainerapi.PodSpecOverrideTargetJob{
+						TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
 							{Name: "user-provided-1"},
 						},
-						NodeSelector: map[string]string{"disktype": "sdd"},
+						Spec: &kftrainerapi.PodTemplateSpecOverride{
+							NodeSelector: map[string]string{"disktype": "sdd"},
+						},
 					},
 					{
-						TargetJobs: []kftrainerapi.PodSpecOverrideTargetJob{
+						TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
 							{Name: "user-provided-2"},
 						},
-						NodeSelector: map[string]string{"disktype": "sdd"},
+						Spec: &kftrainerapi.PodTemplateSpecOverride{
+							NodeSelector: map[string]string{"disktype": "sdd"},
+						},
 					},
 				}).
 				Obj(),
@@ -306,9 +338,9 @@ func TestReconciler(t *testing.T) {
 	testNamespace := utiltesting.MakeNamespaceWrapper("ns").Label(corev1.LabelMetadataName, "ns").Obj()
 	// Create and refererence a fake ClusterTrainingRuntime
 	testTrainJob := testingtrainjob.MakeTrainJob("trainjob", "ns").RuntimeRef(kftrainerapi.RuntimeRef{
-		APIGroup: ptr.To("trainer.kubeflow.org"),
+		APIGroup: ptr.To(kftrainerapi.GroupVersion.Group),
 		Name:     "test",
-		Kind:     ptr.To("ClusterTrainingRuntime"),
+		Kind:     ptr.To(kftrainerapi.ClusterTrainingRuntimeKind),
 	})
 	testJobset := testingjobset.MakeJobSet("", "").ReplicatedJobs(
 		testingjobset.ReplicatedJobRequirements{
diff --git a/pkg/controller/jobs/trainjob/trainjob_multikueue_adapter_test.go b/pkg/controller/jobs/trainjob/trainjob_multikueue_adapter_test.go
index ad1c8ec0f..c73cfa371 100644
--- a/pkg/controller/jobs/trainjob/trainjob_multikueue_adapter_test.go
+++ b/pkg/controller/jobs/trainjob/trainjob_multikueue_adapter_test.go
@@ -87,16 +87,14 @@ func TestMultiKueueAdapter(t *testing.T) {
 					Label(constants.PrebuiltWorkloadLabel, "wl1").
 					Label(kueue.MultiKueueOriginLabel, "origin1").
 					JobsStatus(
-						kftrainerapi.JobStatus{
-							Name:      "replicated-job-1",
-							Ready:     1,
-							Succeeded: 1,
-						},
-						kftrainerapi.JobStatus{
-							Name:      "replicated-job-2",
-							Ready:     3,
-							Succeeded: 0,
-						},
+						testingtrainjob.MakeJobStatusWrapper("replicated-job-1").
+							Ready(1).
+							Succeeded(1).
+							Obj(),
+						testingtrainjob.MakeJobStatusWrapper("replicated-job-2").
+							Ready(3).
+							Succeeded(0).
+							Obj(),
 					).
 					Obj(),
 			},
@@ -107,16 +105,14 @@ func TestMultiKueueAdapter(t *testing.T) {
 			wantManagersTrainJobs: []kftrainerapi.TrainJob{
 				*baseTrainJobManagedByKueueBuilder.Clone().
 					JobsStatus(
-						kftrainerapi.JobStatus{
-							Name:      "replicated-job-1",
-							Ready:     1,
-							Succeeded: 1,
-						},
-						kftrainerapi.JobStatus{
-							Name:      "replicated-job-2",
-							Ready:     3,
-							Succeeded: 0,
-						},
+						testingtrainjob.MakeJobStatusWrapper("replicated-job-1").
+							Ready(1).
+							Succeeded(1).
+							Obj(),
+						testingtrainjob.MakeJobStatusWrapper("replicated-job-2").
+							Ready(3).
+							Succeeded(0).
+							Obj(),
 					).
 					Obj(),
 			},
@@ -125,16 +121,14 @@ func TestMultiKueueAdapter(t *testing.T) {
 					Label(constants.PrebuiltWorkloadLabel, "wl1").
 					Label(kueue.MultiKueueOriginLabel, "origin1").
 					JobsStatus(
-						kftrainerapi.JobStatus{
-							Name:      "replicated-job-1",
-							Ready:     1,
-							Succeeded: 1,
-						},
-						kftrainerapi.JobStatus{
-							Name:      "replicated-job-2",
-							Ready:     3,
-							Succeeded: 0,
-						},
+						testingtrainjob.MakeJobStatusWrapper("replicated-job-1").
+							Ready(1).
+							Succeeded(1).
+							Obj(),
+						testingtrainjob.MakeJobStatusWrapper("replicated-job-2").
+							Ready(3).
+							Succeeded(0).
+							Obj(),
 					).
 					Obj(),
 			},
@@ -151,16 +145,14 @@ func TestMultiKueueAdapter(t *testing.T) {
 					Label(kueue.MultiKueueOriginLabel, "origin1").
 					Suspend(true).
 					JobsStatus(
-						kftrainerapi.JobStatus{
-							Name:      "replicated-job-1",
-							Ready:     1,
-							Succeeded: 1,
-						},
-						kftrainerapi.JobStatus{
-							Name:      "replicated-job-2",
-							Ready:     3,
-							Succeeded: 0,
-						},
+						testingtrainjob.MakeJobStatusWrapper("replicated-job-1").
+							Ready(1).
+							Succeeded(1).
+							Obj(),
+						testingtrainjob.MakeJobStatusWrapper("replicated-job-2").
+							Ready(3).
+							Succeeded(0).
+							Obj(),
 					).
 					Obj(),
 			},
@@ -179,16 +171,14 @@ func TestMultiKueueAdapter(t *testing.T) {
 					Label(kueue.MultiKueueOriginLabel, "origin1").
 					Suspend(true).
 					JobsStatus(
-						kftrainerapi.JobStatus{
-							Name:      "replicated-job-1",
-							Ready:     1,
-							Succeeded: 1,
-						},
-						kftrainerapi.JobStatus{
-							Name:      "replicated-job-2",
-							Ready:     3,
-							Succeeded: 0,
-						},
+						testingtrainjob.MakeJobStatusWrapper("replicated-job-1").
+							Ready(1).
+							Succeeded(1).
+							Obj(),
+						testingtrainjob.MakeJobStatusWrapper("replicated-job-2").
+							Ready(3).
+							Succeeded(0).
+							Obj(),
 					).
 					Obj(),
 			},
@@ -199,16 +189,14 @@ func TestMultiKueueAdapter(t *testing.T) {
 					Label(constants.PrebuiltWorkloadLabel, "wl1").
 					Label(kueue.MultiKueueOriginLabel, "origin1").
 					JobsStatus(
-						kftrainerapi.JobStatus{
-							Name:      "replicated-job-1",
-							Ready:     1,
-							Succeeded: 1,
-						},
-						kftrainerapi.JobStatus{
-							Name:      "replicated-job-2",
-							Ready:     3,
-							Succeeded: 0,
-						},
+						testingtrainjob.MakeJobStatusWrapper("replicated-job-1").
+							Ready(1).
+							Succeeded(1).
+							Obj(),
+						testingtrainjob.MakeJobStatusWrapper("replicated-job-2").
+							Ready(3).
+							Succeeded(0).
+							Obj(),
 					).
 					Obj(),
 			},
diff --git a/pkg/controller/jobs/trainjob/trainjob_webhook_test.go b/pkg/controller/jobs/trainjob/trainjob_webhook_test.go
index 4392b3647..44c476e91 100644
--- a/pkg/controller/jobs/trainjob/trainjob_webhook_test.go
+++ b/pkg/controller/jobs/trainjob/trainjob_webhook_test.go
@@ -24,6 +24,9 @@ import (
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/util/validation/field"
+	"k8s.io/client-go/tools/record"
+	"k8s.io/utils/ptr"
+	jobsetapi "sigs.k8s.io/jobset/api/jobset/v1alpha2"
 
 	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	qcache "sigs.k8s.io/kueue/pkg/cache/queue"
@@ -32,6 +35,7 @@ import (
 	"sigs.k8s.io/kueue/pkg/features"
 	utiltesting "sigs.k8s.io/kueue/pkg/util/testing"
 	utiltestingapi "sigs.k8s.io/kueue/pkg/util/testing/v1beta1"
+	testingjobset "sigs.k8s.io/kueue/pkg/util/testingjobs/jobset"
 	testingtrainjob "sigs.k8s.io/kueue/pkg/util/testingjobs/trainjob"
 )
 
@@ -45,30 +49,144 @@ var (
 )
 
 func TestValidateCreate(t *testing.T) {
-	testTrainJob := testingtrainjob.MakeTrainJob("trainjob", "ns").Suspend(false)
+	testCtr := testingtrainjob.MakeClusterTrainingRuntime("testCtr",
+		testingjobset.MakeJobSet("", "").ReplicatedJobs(
+			testingjobset.ReplicatedJobRequirements{
+				Name:        "node",
+				Replicas:    1,
+				Parallelism: 1,
+			}).Obj().Spec)
+	testTrainJob := testingtrainjob.MakeTrainJob("trainjob", "ns").RuntimeRef(kftrainerapi.RuntimeRef{
+		APIGroup: ptr.To(kftrainerapi.GroupVersion.Group),
+		Name:     "testCtr",
+		Kind:     ptr.To(kftrainerapi.ClusterTrainingRuntimeKind),
+	}).Suspend(false)
 	testcases := map[string]struct {
-		name     string
-		trainJob *kftrainerapi.TrainJob
-		wantErr  error
+		clusterTrainingRuntime  *kftrainerapi.ClusterTrainingRuntime
+		trainJob                *kftrainerapi.TrainJob
+		wantErr                 error
+		topologyAwareScheduling bool
 	}{
 		"base": {
-			trainJob: testTrainJob.Clone().Queue("local-queue").Obj(),
-			wantErr:  nil,
+			clusterTrainingRuntime: testCtr,
+			trainJob:               testTrainJob.Clone().Queue("local-queue").Obj(),
+			wantErr:                nil,
 		},
 		"invalid queue-name label": {
-			trainJob: testTrainJob.Clone().Queue("queue_name").Obj(),
-			wantErr:  field.ErrorList{field.Invalid(queueNameLabelPath, "queue_name", invalidRFC1123Message)}.ToAggregate(),
+			clusterTrainingRuntime: testCtr,
+			trainJob:               testTrainJob.Clone().Queue("queue_name").Obj(),
+			wantErr:                field.ErrorList{field.Invalid(queueNameLabelPath, "queue_name", invalidRFC1123Message)}.ToAggregate(),
 		},
 		"with prebuilt workload": {
-			trainJob: testTrainJob.Clone().Queue("local-queue").Label(controllerconstants.PrebuiltWorkloadLabel, "prebuilt-workload").Obj(),
-			wantErr:  nil,
+			clusterTrainingRuntime: testCtr,
+			trainJob:               testTrainJob.Clone().Queue("local-queue").Label(controllerconstants.PrebuiltWorkloadLabel, "prebuilt-workload").Obj(),
+			wantErr:                nil,
+		},
+		"valid topology request in PodTemplateOverride": {
+			clusterTrainingRuntime: testCtr,
+			trainJob: testTrainJob.Clone().PodTemplateOverrides([]kftrainerapi.PodTemplateOverride{
+				{
+					TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
+						{Name: "node"},
+					},
+					Metadata: &metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+						},
+					},
+				},
+			}).Obj(),
+			topologyAwareScheduling: true,
+		},
+		"valid topology request in TrainingRuntime": {
+			clusterTrainingRuntime: testingtrainjob.MakeClusterTrainingRuntime("testCtr",
+				testingjobset.MakeJobSet("", "").ReplicatedJobs(
+					testingjobset.ReplicatedJobRequirements{
+						Name: "node",
+						PodAnnotations: map[string]string{
+							kueue.PodSetRequiredTopologyAnnotation: "cloud.com/block",
+						},
+					}).Obj().Spec),
+			trainJob:                testTrainJob.Clone().Obj(),
+			topologyAwareScheduling: true,
+		},
+		"invalid topology request in TrainJob": {
+			clusterTrainingRuntime: testCtr,
+			trainJob: testTrainJob.Clone().PodTemplateOverrides([]kftrainerapi.PodTemplateOverride{
+				{
+					TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
+						{Name: "node"},
+					},
+					Metadata: &metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetRequiredTopologyAnnotation:  "cloud.com/block",
+						},
+					},
+				},
+			}).Obj(),
+			wantErr: field.ErrorList{field.Invalid(field.NewPath("job[node].annotations"),
+				field.OmitValueType{}, `must not contain more than one topology annotation: ["kueue.x-k8s.io/podset-required-topology", `+
+					`"kueue.x-k8s.io/podset-preferred-topology", "kueue.x-k8s.io/podset-unconstrained-topology"]`+
+					`. Adjust either the "TrainJob.spec.podTemplateOverrides" or the "TrainingRuntime.Template" annotations for the corresponding Job`),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid topology request in TrainingRuntime": {
+			clusterTrainingRuntime: testingtrainjob.MakeClusterTrainingRuntime("testCtr",
+				testingjobset.MakeJobSet("", "").ReplicatedJobs(
+					testingjobset.ReplicatedJobRequirements{
+						Name: "node",
+						PodAnnotations: map[string]string{
+							kueue.PodSetPreferredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetRequiredTopologyAnnotation:  "cloud.com/block",
+						},
+					}).Obj().Spec),
+			trainJob: testTrainJob.Clone().Obj(),
+			wantErr: field.ErrorList{field.Invalid(field.NewPath("job[node].annotations"),
+				field.OmitValueType{}, `must not contain more than one topology annotation: ["kueue.x-k8s.io/podset-required-topology", `+
+					`"kueue.x-k8s.io/podset-preferred-topology", "kueue.x-k8s.io/podset-unconstrained-topology"]`+
+					`. Adjust either the "TrainJob.spec.podTemplateOverrides" or the "TrainingRuntime.Template" annotations for the corresponding Job`),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
+		},
+		"invalid slice topology request - slice size larger than number of podsets": {
+			clusterTrainingRuntime: testCtr,
+			trainJob: testTrainJob.Clone().PodTemplateOverrides([]kftrainerapi.PodTemplateOverride{
+				{
+					TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
+						{Name: "node"},
+					},
+					Metadata: &metav1.ObjectMeta{
+						Annotations: map[string]string{
+							kueue.PodSetRequiredTopologyAnnotation:      "cloud.com/block",
+							kueue.PodSetSliceRequiredTopologyAnnotation: "cloud.com/block",
+							kueue.PodSetSliceSizeAnnotation:             "20",
+						},
+					},
+				},
+			}).Obj(),
+			wantErr: field.ErrorList{
+				field.Invalid(field.NewPath("job[node].annotations").
+					Key("kueue.x-k8s.io/podset-slice-size"), "20", "must not be greater than pod set count 1"+
+					`. Adjust either the "TrainJob.spec.podTemplateOverrides" or the "TrainingRuntime.Template" annotations for the corresponding Job`),
+			}.ToAggregate(),
+			topologyAwareScheduling: true,
 		},
 	}
 
-	for _, tc := range testcases {
-		t.Run(tc.name, func(t *testing.T) {
-			webhook := &TrainJobWebhook{}
+	for name, tc := range testcases {
+		t.Run(name, func(t *testing.T) {
 			ctx, _ := utiltesting.ContextWithLog(t)
+			webhook := &TrainJobWebhook{}
+			clientBuilder := utiltesting.NewClientBuilder(kftrainerapi.AddToScheme, jobsetapi.AddToScheme)
+			kClient := clientBuilder.WithObjects(tc.trainJob, tc.clusterTrainingRuntime).Build()
+			indexer := utiltesting.AsIndexer(clientBuilder)
+			if err := SetupIndexes(ctx, indexer); err != nil {
+				t.Fatalf("Could not setup indexes: %v", err)
+			}
+			recorder := record.NewBroadcaster().NewRecorder(kClient.Scheme(), corev1.EventSource{Component: "test"})
+			_, _ = NewReconciler(ctx, kClient, indexer, recorder)
 			_, gotErr := webhook.ValidateCreate(ctx, tc.trainJob)
 
 			if diff := cmp.Diff(tc.wantErr, gotErr); diff != "" {
diff --git a/pkg/dra/claims_test.go b/pkg/dra/claims_test.go
index 8674e4574..970784b21 100644
--- a/pkg/dra/claims_test.go
+++ b/pkg/dra/claims_test.go
@@ -17,7 +17,6 @@ limitations under the License.
 package dra_test
 
 import (
-	"context"
 	"reflect"
 	"testing"
 
@@ -257,7 +256,8 @@ func Test_GetResourceRequests(t *testing.T) {
 				tc.modifyWL(wlCopy)
 			}
 
-			got, err := dra.GetResourceRequestsForResourceClaimTemplates(context.Background(), baseClient, wlCopy)
+			ctx, _ := utiltesting.ContextWithLog(t)
+			got, err := dra.GetResourceRequestsForResourceClaimTemplates(ctx, baseClient, wlCopy)
 			if (err != nil) != tc.wantErr {
 				t.Fatalf("unexpected error status: gotErr=%v wantErr=%v, err=%v", err != nil, tc.wantErr, err)
 			}
diff --git a/pkg/util/testing/v1beta2/wrappers.go b/pkg/util/testing/v1beta2/wrappers.go
index 1b28d7d56..47a3472a4 100644
--- a/pkg/util/testing/v1beta2/wrappers.go
+++ b/pkg/util/testing/v1beta2/wrappers.go
@@ -391,7 +391,7 @@ func (w *WorkloadWrapper) MaximumExecutionTimeSeconds(v int32) *WorkloadWrapper
 }
 
 func (w *WorkloadWrapper) PastAdmittedTime(v int32) *WorkloadWrapper {
-	w.Status.AccumulatedPastExexcutionTimeSeconds = &v
+	w.Status.AccumulatedPastExecutionTimeSeconds = &v
 	return w
 }
 
@@ -862,7 +862,7 @@ func (c *ClusterQueueWrapper) Obj() *kueue.ClusterQueue {
 
 // Cohort sets the borrowing cohort.
 func (c *ClusterQueueWrapper) Cohort(cohort kueue.CohortReference) *ClusterQueueWrapper {
-	c.Spec.Cohort = cohort
+	c.Spec.CohortName = cohort
 	return c
 }
 
diff --git a/pkg/util/testingjobs/trainjob/wrappers.go b/pkg/util/testingjobs/trainjob/wrappers.go
index 87484567e..2cde8015c 100644
--- a/pkg/util/testingjobs/trainjob/wrappers.go
+++ b/pkg/util/testingjobs/trainjob/wrappers.go
@@ -53,9 +53,9 @@ func (t *TrainJobWrapper) Clone() *TrainJobWrapper {
 	return &TrainJobWrapper{TrainJob: *t.DeepCopy()}
 }
 
-// PodSpecOverrides sets the custom pod spec overrides to be set to the TrainJob jobset jobs
-func (t *TrainJobWrapper) PodSpecOverrides(overrides []kftrainerapi.PodSpecOverride) *TrainJobWrapper {
-	t.Spec.PodSpecOverrides = overrides
+// PodTemplateOverrides sets the custom pod template overrides to be set to the TrainJob jobset jobs
+func (t *TrainJobWrapper) PodTemplateOverrides(overrides []kftrainerapi.PodTemplateOverride) *TrainJobWrapper {
+	t.Spec.PodTemplateOverrides = overrides
 	return t
 }
 
@@ -172,3 +172,35 @@ func MakeTrainingRuntime(name, ns string, jobsetSpec jobsetapi.JobSetSpec) *kftr
 		},
 	}
 }
+
+type JobStatusWrapper struct{ kftrainerapi.JobStatus }
+
+func MakeJobStatusWrapper(name string) *JobStatusWrapper {
+	return &JobStatusWrapper{kftrainerapi.JobStatus{
+		Name:      name,
+		Ready:     ptr.To(int32(0)),
+		Succeeded: ptr.To(int32(0)),
+		Failed:    ptr.To(int32(0)),
+		Active:    ptr.To(int32(0)),
+		Suspended: ptr.To(int32(0)),
+	}}
+}
+
+func (s *JobStatusWrapper) Active(v int32) *JobStatusWrapper {
+	s.JobStatus.Active = ptr.To(v)
+	return s
+}
+
+func (s *JobStatusWrapper) Ready(v int32) *JobStatusWrapper {
+	s.JobStatus.Ready = ptr.To(v)
+	return s
+}
+
+func (s *JobStatusWrapper) Succeeded(v int32) *JobStatusWrapper {
+	s.JobStatus.Succeeded = ptr.To(v)
+	return s
+}
+
+func (s *JobStatusWrapper) Obj() kftrainerapi.JobStatus {
+	return s.JobStatus
+}
diff --git a/test/e2e/kueueviz/package-lock.json b/test/e2e/kueueviz/package-lock.json
index d077f79d7..6962a8fb3 100644
--- a/test/e2e/kueueviz/package-lock.json
+++ b/test/e2e/kueueviz/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "kueueviz-frontend-tests",
-  "version": "0.14.1",
+  "version": "0.14.2",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "kueueviz-frontend-tests",
-      "version": "0.14.1",
+      "version": "0.14.2",
       "devDependencies": {
         "@testing-library/cypress": "^10.1.0",
         "cypress": "^15.5.0",
diff --git a/test/e2e/kueueviz/package.json b/test/e2e/kueueviz/package.json
index 8afaa260a..4ec1e1d15 100644
--- a/test/e2e/kueueviz/package.json
+++ b/test/e2e/kueueviz/package.json
@@ -1,6 +1,6 @@
 {
   "name": "kueueviz-frontend-tests",
-  "version": "0.14.1",
+  "version": "0.14.2",
   "scripts": {
     "cypress:run": "cypress run --headless",
     "check-unused": "depcheck"
diff --git a/test/e2e/multikueue/suite_test.go b/test/e2e/multikueue/suite_test.go
index 0b47f400b..07c50f0b6 100644
--- a/test/e2e/multikueue/suite_test.go
+++ b/test/e2e/multikueue/suite_test.go
@@ -17,6 +17,7 @@ limitations under the License.
 package mke2e
 
 import (
+	"cmp"
 	"context"
 	"fmt"
 	"os"
@@ -256,17 +257,11 @@ func TestAPIs(t *testing.T) {
 var _ = ginkgo.BeforeSuite(func() {
 	util.SetupLogger()
 
-	managerClusterName = os.Getenv("MANAGER_KIND_CLUSTER_NAME")
-	gomega.Expect(managerClusterName).NotTo(gomega.BeEmpty(), "MANAGER_KIND_CLUSTER_NAME should not be empty")
-
-	worker1ClusterName = os.Getenv("WORKER1_KIND_CLUSTER_NAME")
-	gomega.Expect(worker1ClusterName).NotTo(gomega.BeEmpty(), "WORKER1_KIND_CLUSTER_NAME should not be empty")
-
-	worker2ClusterName = os.Getenv("WORKER2_KIND_CLUSTER_NAME")
-	gomega.Expect(worker2ClusterName).NotTo(gomega.BeEmpty(), "WORKER2_KIND_CLUSTER_NAME should not be empty")
+	managerClusterName = cmp.Or(os.Getenv("MANAGER_KIND_CLUSTER_NAME"), "kind-manager")
+	worker1ClusterName = cmp.Or(os.Getenv("WORKER1_KIND_CLUSTER_NAME"), "kind-worker1")
+	worker2ClusterName = cmp.Or(os.Getenv("WORKER2_KIND_CLUSTER_NAME"), "kind-worker2")
 
 	var err error
-	gomega.Expect(err).NotTo(gomega.HaveOccurred())
 	k8sManagerClient, managerCfg, err = util.CreateClientUsingCluster("kind-" + managerClusterName)
 	gomega.Expect(err).NotTo(gomega.HaveOccurred())
 	k8sWorker1Client, worker1Cfg, err = util.CreateClientUsingCluster("kind-" + worker1ClusterName)
diff --git a/test/e2e/singlecluster/tas_test.go b/test/e2e/singlecluster/tas_test.go
index c513c1f3c..bcc94ed05 100644
--- a/test/e2e/singlecluster/tas_test.go
+++ b/test/e2e/singlecluster/tas_test.go
@@ -18,10 +18,13 @@ package e2e
 
 import (
 	"fmt"
+	"strconv"
 
+	kftrainerapi "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1"
 	"github.com/onsi/ginkgo/v2"
 	"github.com/onsi/gomega"
 	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/types"
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
@@ -31,11 +34,13 @@ import (
 	"sigs.k8s.io/kueue/pkg/controller/jobs/jobset"
 	podcontroller "sigs.k8s.io/kueue/pkg/controller/jobs/pod"
 	podconstants "sigs.k8s.io/kueue/pkg/controller/jobs/pod/constants"
+	workloadtrainjob "sigs.k8s.io/kueue/pkg/controller/jobs/trainjob"
 	"sigs.k8s.io/kueue/pkg/util/testing"
 	utiltestingapi "sigs.k8s.io/kueue/pkg/util/testing/v1beta1"
 	testingjob "sigs.k8s.io/kueue/pkg/util/testingjobs/job"
 	testingjobset "sigs.k8s.io/kueue/pkg/util/testingjobs/jobset"
 	testingpod "sigs.k8s.io/kueue/pkg/util/testingjobs/pod"
+	testingtrainjob "sigs.k8s.io/kueue/pkg/util/testingjobs/trainjob"
 	"sigs.k8s.io/kueue/pkg/workload"
 	"sigs.k8s.io/kueue/test/util"
 )
@@ -442,4 +447,122 @@ var _ = ginkgo.Describe("TopologyAwareScheduling", func() {
 			})
 		})
 	})
+
+	ginkgo.When("Creating a TrainJob requesting TAS", func() {
+		var (
+			topology     *kueue.Topology
+			onDemandRF   *kueue.ResourceFlavor
+			clusterQueue *kueue.ClusterQueue
+			localQueue   *kueue.LocalQueue
+		)
+		ginkgo.BeforeEach(func() {
+			topology = utiltestingapi.MakeDefaultOneLevelTopology("hostname")
+			util.MustCreate(ctx, k8sClient, topology)
+
+			onDemandRF = utiltestingapi.MakeResourceFlavor("on-demand").
+				NodeLabel("instance-type", "on-demand").
+				TopologyName(topology.Name).
+				Obj()
+
+			util.MustCreate(ctx, k8sClient, onDemandRF)
+			clusterQueue = utiltestingapi.MakeClusterQueue("cluster-queue").
+				ResourceGroup(
+					*utiltestingapi.MakeFlavorQuotas("on-demand").
+						Resource(corev1.ResourceCPU, "1").
+						Resource(corev1.ResourceMemory, "1Gi").
+						Obj(),
+				).
+				Obj()
+
+			util.MustCreate(ctx, k8sClient, clusterQueue)
+			util.ExpectClusterQueuesToBeActive(ctx, k8sClient, clusterQueue)
+
+			localQueue = utiltestingapi.MakeLocalQueue("main", ns.Name).ClusterQueue("cluster-queue").Obj()
+			util.MustCreate(ctx, k8sClient, localQueue)
+		})
+		ginkgo.AfterEach(func() {
+			gomega.Expect(util.DeleteAllTrainJobsInNamespace(ctx, k8sClient, ns)).Should(gomega.Succeed())
+			// Force remove workloads to be sure that cluster queue can be removed.
+			gomega.Expect(util.DeleteWorkloadsInNamespace(ctx, k8sClient, ns)).Should(gomega.Succeed())
+			gomega.Expect(util.DeleteObject(ctx, k8sClient, localQueue)).Should(gomega.Succeed())
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, clusterQueue, true)
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, onDemandRF, true)
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, topology, true)
+		})
+
+		ginkgo.It("should admit a TrainJob via TAS", func() {
+			trainjob := testingtrainjob.MakeTrainJob("trainjob-test", ns.Name).
+				RuntimeRefName("torch-distributed").
+				Queue(localQueue.Name).
+				// Even if we override the image coming from the TrainingRuntime, we still need to set the command and args
+				TrainerImage(util.GetAgnHostImage(), []string{"/agnhost"}, util.BehaviorExitFast).
+				TrainerRequest(corev1.ResourceCPU, "500m").
+				TrainerRequest(corev1.ResourceMemory, "200Mi").
+				PodTemplateOverrides([]kftrainerapi.PodTemplateOverride{
+					{
+						TargetJobs: []kftrainerapi.PodTemplateOverrideTargetJob{
+							{Name: "node"},
+						},
+						Metadata: &metav1.ObjectMeta{
+							Annotations: map[string]string{kueue.PodSetRequiredTopologyAnnotation: corev1.LabelHostname},
+						},
+					},
+				}).
+				Obj()
+
+			ginkgo.By("Creating the TrainJob", func() {
+				util.MustCreate(ctx, k8sClient, trainjob)
+			})
+
+			ginkgo.By("waiting for the TrainJob to be unsuspended", func() {
+				trainjobKey := client.ObjectKeyFromObject(trainjob)
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.Get(ctx, trainjobKey, trainjob)).To(gomega.Succeed())
+					g.Expect(trainjob.Spec.Suspend).Should(gomega.Equal(ptr.To(false)))
+				}, util.Timeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			ginkgo.By("verify the TrainJob has nodeSelector set", func() {
+				firstKueueOverride, exists := trainjob.Annotations["kueue.x-k8s.io/trainjob-override-idx"]
+				gomega.Expect(exists).Should(gomega.BeTrue())
+				firstKueueOverrideIdx, err := strconv.Atoi(firstKueueOverride)
+				gomega.Expect(err).NotTo(gomega.HaveOccurred())
+
+				gomega.Expect(trainjob.Spec.PodTemplateOverrides[firstKueueOverrideIdx].Spec.NodeSelector).To(gomega.Equal(
+					map[string]string{
+						"instance-type": "on-demand",
+					},
+				))
+			})
+
+			wlLookupKey := types.NamespacedName{Name: workloadtrainjob.GetWorkloadNameForTrainJob(trainjob.Name, trainjob.UID), Namespace: ns.Name}
+			createdWorkload := &kueue.Workload{}
+
+			ginkgo.By(fmt.Sprintf("await for admission of workload %q and verify TopologyAssignment", wlLookupKey), func() {
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.Get(ctx, wlLookupKey, createdWorkload)).Should(gomega.Succeed())
+					g.Expect(createdWorkload.Status.Admission).ShouldNot(gomega.BeNil())
+				}, util.Timeout, util.Interval).Should(gomega.Succeed())
+				gomega.Expect(createdWorkload.Status.Admission).ShouldNot(gomega.BeNil())
+				gomega.Expect(createdWorkload.Status.Admission.PodSetAssignments).Should(gomega.HaveLen(1))
+				gomega.Expect(createdWorkload.Status.Admission.PodSetAssignments[0].TopologyAssignment).Should(gomega.BeComparableTo(
+					&kueue.TopologyAssignment{
+						Levels: []string{corev1.LabelHostname},
+						Domains: []kueue.TopologyDomainAssignment{{
+							Count:  1,
+							Values: []string{"kind-worker"},
+						}},
+					},
+				))
+			})
+
+			ginkgo.By(fmt.Sprintf("verify the workload %q gets finished", wlLookupKey), func() {
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.Get(ctx, wlLookupKey, createdWorkload)).Should(gomega.Succeed())
+					g.Expect(workload.HasQuotaReservation(createdWorkload)).Should(gomega.BeTrue())
+					g.Expect(createdWorkload.Status.Conditions).Should(testing.HaveConditionStatusTrue(kueue.WorkloadFinished))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+		})
+	})
 })
diff --git a/test/e2e/singlecluster/trainjob_test.go b/test/e2e/singlecluster/trainjob_test.go
index b7502e898..d2a29db07 100644
--- a/test/e2e/singlecluster/trainjob_test.go
+++ b/test/e2e/singlecluster/trainjob_test.go
@@ -185,7 +185,7 @@ var _ = ginkgo.Describe("TrainJob", func() {
 			})
 
 			ginkgo.By("Verify the trainjob has nodeSelector set", func() {
-				gomega.Expect(trainjob.Spec.PodSpecOverrides[0].NodeSelector).To(gomega.Equal(
+				gomega.Expect(trainjob.Spec.PodTemplateOverrides[0].Spec.NodeSelector).To(gomega.Equal(
 					map[string]string{
 						"instance-type": "on-demand",
 					},
diff --git a/test/e2e/tas/hotswap_test.go b/test/e2e/tas/hotswap_test.go
new file mode 100644
index 000000000..914e3fae8
--- /dev/null
+++ b/test/e2e/tas/hotswap_test.go
@@ -0,0 +1,307 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package tase2e
+
+import (
+	"context"
+	"fmt"
+
+	"github.com/google/go-cmp/cmp/cmpopts"
+	"github.com/onsi/ginkgo/v2"
+	"github.com/onsi/gomega"
+	batchv1 "k8s.io/api/batch/v1"
+	corev1 "k8s.io/api/core/v1"
+	apimeta "k8s.io/apimachinery/pkg/api/meta"
+	"k8s.io/apimachinery/pkg/fields"
+	"k8s.io/apimachinery/pkg/labels"
+	"k8s.io/utils/ptr"
+	"sigs.k8s.io/controller-runtime/pkg/client"
+
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	"sigs.k8s.io/kueue/pkg/util/testing"
+	utiltestingapi "sigs.k8s.io/kueue/pkg/util/testing/v1beta1"
+	testingjob "sigs.k8s.io/kueue/pkg/util/testingjobs/job"
+	testingjobset "sigs.k8s.io/kueue/pkg/util/testingjobs/jobset"
+	"sigs.k8s.io/kueue/test/util"
+)
+
+var _ = ginkgo.Describe("Hotswap for Topology Aware Scheduling", ginkgo.Ordered, func() {
+	var ns *corev1.Namespace
+	ginkgo.BeforeEach(func() {
+		ns = util.CreateNamespaceFromPrefixWithLog(ctx, k8sClient, "e2e-tas-hotswap-")
+	})
+	ginkgo.AfterEach(func() {
+		gomega.Expect(util.DeleteNamespace(ctx, k8sClient, ns)).To(gomega.Succeed())
+		util.ExpectAllPodsInNamespaceDeleted(ctx, k8sClient, ns)
+	})
+	// The topology of the e2e cluster looks as follows
+	// Block:              b1                                 b2
+	//                /          \                      /           \
+	// Rack:        r1               r2                r3             r4
+	//            /     \          /      \        /      \         /      \
+	// Hostname: worker worker2 worker3 worker4 worker5 worker6 worker7 worker8
+	// Each node has 1 GPU (extraResource)
+	ginkgo.When("Creating a JobSet with slices", func() {
+		var (
+			topology      *kueue.Topology
+			tasFlavor     *kueue.ResourceFlavor
+			localQueue    *kueue.LocalQueue
+			clusterQueue  *kueue.ClusterQueue
+			nodeToRestore *corev1.Node
+		)
+		ginkgo.BeforeEach(func() {
+			topology = utiltestingapi.MakeDefaultThreeLevelTopology("datacenter")
+			util.MustCreate(ctx, k8sClient, topology)
+
+			tasFlavor = utiltestingapi.MakeResourceFlavor("tas-flavor").
+				NodeLabel(tasNodeGroupLabel, instanceType).TopologyName(topology.Name).Obj()
+			util.MustCreate(ctx, k8sClient, tasFlavor)
+			clusterQueue = utiltestingapi.MakeClusterQueue("cluster-queue").
+				ResourceGroup(
+					*utiltestingapi.MakeFlavorQuotas("tas-flavor").
+						Resource(extraResource, "8").
+						Resource(corev1.ResourceCPU, "8").
+						Obj(),
+				).
+				Obj()
+			util.MustCreate(ctx, k8sClient, clusterQueue)
+			util.ExpectClusterQueuesToBeActive(ctx, k8sClient, clusterQueue)
+
+			localQueue = utiltestingapi.MakeLocalQueue("main", ns.Name).ClusterQueue("cluster-queue").Obj()
+			util.MustCreate(ctx, k8sClient, localQueue)
+		})
+		ginkgo.AfterEach(func() {
+			if nodeToRestore != nil {
+				ginkgo.By(fmt.Sprintf("Re-creating node %s", nodeToRestore.Name))
+				nodeToRestore.ResourceVersion = ""
+				nodeToRestore.UID = ""
+				nodeToRestore.ManagedFields = nil
+				util.MustCreate(ctx, k8sClient, nodeToRestore)
+
+				util.SetNodeCondition(ctx, k8sClient, nodeToRestore, &corev1.NodeCondition{
+					Type:   corev1.NodeReady,
+					Status: corev1.ConditionTrue,
+				})
+				waitForDummyWorkloadToRunOnNode(nodeToRestore, localQueue)
+				nodeToRestore = nil
+			}
+			gomega.Expect(util.DeleteAllJobsInNamespace(ctx, k8sClient, ns)).Should(gomega.Succeed())
+			gomega.Expect(util.DeleteAllJobSetsInNamespace(ctx, k8sClient, ns)).Should(gomega.Succeed())
+			gomega.Expect(util.DeleteWorkloadsInNamespace(ctx, k8sClient, ns)).Should(gomega.Succeed())
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, localQueue, true)
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, clusterQueue, true)
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, tasFlavor, true)
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, topology, true)
+			util.ExpectAllPodsInNamespaceDeleted(ctx, k8sClient, ns)
+		})
+		// In this test we use a jobset with SliceSize = 3 and SliceRequiredTopology = Block
+		// Each pod requires 1 "extraResource" so the jobSet will use three nodes from a Block.
+		// Since each Block has 4 nodes (see the image above), one node will be free.
+		// When one of the nodes fail, the replacement mechanism should find the available node
+		// and replace the failed one.
+		ginkgo.It("Should replace a failed node with a new one within the same domain", func() {
+			replicas := 1
+			parallelism := 3
+			numPods := replicas * parallelism
+			jobName := "ranks-jobset"
+			replicatedJobName := "replicated-job-1"
+			sampleJob := testingjobset.MakeJobSet(jobName, ns.Name).
+				Queue(localQueue.Name).
+				ReplicatedJobs(
+					testingjobset.ReplicatedJobRequirements{
+						Name:        replicatedJobName,
+						Image:       util.GetAgnHostImage(),
+						Args:        util.BehaviorWaitForDeletion,
+						Replicas:    int32(replicas),
+						Parallelism: int32(parallelism),
+						Completions: int32(parallelism),
+						PodAnnotations: map[string]string{
+							kueue.PodSetPreferredTopologyAnnotation:     testing.DefaultBlockTopologyLevel,
+							kueue.PodSetSliceRequiredTopologyAnnotation: testing.DefaultBlockTopologyLevel,
+							kueue.PodSetSliceSizeAnnotation:             "3",
+						},
+					},
+				).
+				RequestAndLimit(replicatedJobName, extraResource, "1").
+				RequestAndLimit(replicatedJobName, corev1.ResourceCPU, "200m").
+				Obj()
+			util.MustCreate(ctx, k8sClient, sampleJob)
+
+			ginkgo.By("JobSet is unsuspended", func() {
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(sampleJob), sampleJob)).To(gomega.Succeed())
+					g.Expect(sampleJob.Spec.Suspend).Should(gomega.Equal(ptr.To(false)))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			pods := &corev1.PodList{}
+			ginkgo.By("ensure all pods are created, scheduled and running", func() {
+				listOpts := &client.ListOptions{
+					FieldSelector: fields.AndSelectors(
+						fields.OneTermNotEqualSelector("spec.nodeName", ""),
+						fields.OneTermEqualSelector("status.phase", string(corev1.PodRunning)),
+					),
+					LabelSelector: labels.SelectorFromSet(map[string]string{
+						"jobset.sigs.k8s.io/jobset-name": jobName,
+					}),
+				}
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.List(ctx, pods, client.InNamespace(ns.Name), listOpts)).To(gomega.Succeed(), "listing running pods")
+					g.Expect(pods.Items).Should(gomega.HaveLen(numPods))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			wlName := pods.Items[0].Annotations[kueue.WorkloadAnnotation]
+			wlKey := client.ObjectKey{Name: wlName, Namespace: ns.Name}
+			ginkgo.By("Verify initial topology assignment of the workload", func() {
+				expectWorkloadTopologyAssignment(ctx, k8sClient, wlKey, numPods, []string{
+					"kind-worker", "kind-worker2", "kind-worker3",
+				})
+			})
+			chosenPod := pods.Items[0]
+			node := &corev1.Node{}
+
+			ginkgo.By(fmt.Sprintf("Simulate failure of node hosting pod %s", chosenPod.Name), func() {
+				gomega.Expect(k8sClient.Get(ctx, client.ObjectKey{Name: chosenPod.Spec.NodeName}, node)).To(gomega.Succeed())
+				nodeToRestore = node.DeepCopy()
+				gomega.Expect(k8sClient.Delete(ctx, node)).To(gomega.Succeed())
+			})
+			ginkgo.By("Check that the topology assignment is updated with the new node in the same block", func() {
+				expectWorkloadTopologyAssignment(ctx, k8sClient, wlKey, numPods, []string{
+					"kind-worker2", "kind-worker3", "kind-worker4",
+				})
+			})
+		})
+		// In this test we use a jobset with SliceSize = 2 and SliceRequiredTopology = Rack
+		// Each pod requires 1 "extraResource" so the jobSet will use both nodes from a Rack.
+		// When one of the nodes fail, the replacement mechanism would need to find the
+		// replacement within the same rack, which is not possible, thus the workload
+		// will be evicted.
+		ginkgo.It("Should evict the workload if replacement is not possible", func() {
+			replicas := 1
+			parallelism := 2
+			numPods := replicas * parallelism
+			jobName := "ranks-jobset"
+			replicatedJobName := "replicated-job-1"
+			sampleJob := testingjobset.MakeJobSet(jobName, ns.Name).
+				Queue(localQueue.Name).
+				ReplicatedJobs(
+					testingjobset.ReplicatedJobRequirements{
+						Name:        replicatedJobName,
+						Image:       util.GetAgnHostImage(),
+						Args:        util.BehaviorWaitForDeletion,
+						Replicas:    int32(replicas),
+						Parallelism: int32(parallelism),
+						Completions: int32(parallelism),
+						PodAnnotations: map[string]string{
+							kueue.PodSetPreferredTopologyAnnotation:     testing.DefaultBlockTopologyLevel,
+							kueue.PodSetSliceRequiredTopologyAnnotation: testing.DefaultRackTopologyLevel,
+							kueue.PodSetSliceSizeAnnotation:             "2",
+						},
+					},
+				).
+				RequestAndLimit(replicatedJobName, extraResource, "1").
+				RequestAndLimit(replicatedJobName, corev1.ResourceCPU, "200m").
+				Obj()
+			util.MustCreate(ctx, k8sClient, sampleJob)
+
+			ginkgo.By("JobSet is unsuspended", func() {
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(sampleJob), sampleJob)).To(gomega.Succeed())
+					g.Expect(sampleJob.Spec.Suspend).Should(gomega.Equal(ptr.To(false)))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			pods := &corev1.PodList{}
+
+			ginkgo.By("ensure all pods are created, scheduled and running", func() {
+				listOpts := &client.ListOptions{
+					FieldSelector: fields.AndSelectors(
+						fields.OneTermNotEqualSelector("spec.nodeName", ""),
+						fields.OneTermEqualSelector("status.phase", string(corev1.PodRunning)),
+					),
+					LabelSelector: labels.SelectorFromSet(map[string]string{"jobset.sigs.k8s.io/jobset-name": jobName}),
+				}
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.List(ctx, pods, client.InNamespace(ns.Name), listOpts)).To(gomega.Succeed(), "listing running pods")
+					g.Expect(pods.Items).Should(gomega.HaveLen(numPods))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			wlName := pods.Items[0].Annotations[kueue.WorkloadAnnotation]
+			wlKey := client.ObjectKey{Name: wlName, Namespace: ns.Name}
+			ginkgo.By("Verify initial topology assignment of the workload", func() {
+				expectWorkloadTopologyAssignment(ctx, k8sClient, wlKey, numPods, []string{
+					"kind-worker", "kind-worker2",
+				})
+			})
+			chosenPod := pods.Items[0]
+			node := &corev1.Node{}
+			ginkgo.By(fmt.Sprintf("Simulate failure of node hosting pod %s", chosenPod.Name), func() {
+				gomega.Expect(k8sClient.Get(ctx, client.ObjectKey{Name: chosenPod.Spec.NodeName}, node)).To(gomega.Succeed())
+				nodeToRestore = node.DeepCopy()
+				gomega.Expect(k8sClient.Delete(ctx, node)).To(gomega.Succeed())
+			})
+			wl := &kueue.Workload{}
+			ginkgo.By("Check that the workload is evicted", func() {
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.Get(ctx, wlKey, wl)).To(gomega.Succeed())
+					g.Expect(wl.Status.Admission).To(gomega.BeNil())
+					g.Expect(apimeta.IsStatusConditionTrue(wl.Status.Conditions, kueue.WorkloadEvicted)).To(gomega.BeTrue())
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+		})
+	})
+})
+
+func waitForDummyWorkloadToRunOnNode(node *corev1.Node, lq *kueue.LocalQueue) {
+	ginkgo.By(fmt.Sprintf("Waiting for a dummy workload to run on the recovered node %s", node.Name), func() {
+		dummyJob := testingjob.MakeJob(fmt.Sprintf("dummy-job-%s", node.Name), lq.Namespace).
+			Queue(kueue.LocalQueueName(lq.Name)).
+			NodeSelector(corev1.LabelHostname, node.Name).
+			Image(util.GetAgnHostImage(), util.BehaviorExitFast).
+			Obj()
+		gomega.Expect(k8sClient.Create(ctx, dummyJob)).To(gomega.Succeed())
+		gomega.Eventually(func(g gomega.Gomega) {
+			var createdDummyJob batchv1.Job
+			g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(dummyJob), &createdDummyJob)).To(gomega.Succeed())
+			g.Expect(createdDummyJob.Status.Conditions).To(gomega.ContainElement(gomega.BeComparableTo(batchv1.JobCondition{
+				Type:   batchv1.JobComplete,
+				Status: corev1.ConditionTrue,
+			}, cmpopts.IgnoreFields(batchv1.JobCondition{}, "LastTransitionTime", "LastProbeTime", "Reason", "Message"))))
+		}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+	})
+}
+
+func expectWorkloadTopologyAssignment(ctx context.Context, k8sClient client.Client, wlKey client.ObjectKey, numPods int, expectedNodes []string) {
+	gomega.EventuallyWithOffset(1, func(g gomega.Gomega) {
+		wl := &kueue.Workload{}
+		g.Expect(k8sClient.Get(ctx, wlKey, wl)).To(gomega.Succeed())
+		g.Expect(wl.Status.Admission).NotTo(gomega.BeNil())
+		g.Expect(wl.Status.Admission.PodSetAssignments).To(gomega.HaveLen(1))
+		topologyAssignment := wl.Status.Admission.PodSetAssignments[0].TopologyAssignment
+		g.Expect(topologyAssignment).NotTo(gomega.BeNil())
+		g.Expect(topologyAssignment.Levels).To(gomega.BeEquivalentTo([]string{corev1.LabelHostname}))
+		g.Expect(topologyAssignment.Domains).To(gomega.HaveLen(numPods))
+		chosenNodes := []string{}
+		for _, domain := range topologyAssignment.Domains {
+			g.Expect(domain.Count).To(gomega.Equal(int32(1)))
+			chosenNodes = append(chosenNodes, domain.Values...)
+		}
+		g.Expect(chosenNodes).To(gomega.BeEquivalentTo(expectedNodes))
+	}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+}
diff --git a/test/e2e/tas/trainjob_test.go b/test/e2e/tas/trainjob_test.go
new file mode 100644
index 000000000..42a8dffc9
--- /dev/null
+++ b/test/e2e/tas/trainjob_test.go
@@ -0,0 +1,314 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package tase2e
+
+import (
+	"fmt"
+
+	kftrainer "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1"
+	"github.com/onsi/ginkgo/v2"
+	"github.com/onsi/gomega"
+	batchv1 "k8s.io/api/batch/v1"
+	corev1 "k8s.io/api/core/v1"
+	"k8s.io/apimachinery/pkg/fields"
+	"k8s.io/utils/ptr"
+	"sigs.k8s.io/controller-runtime/pkg/client"
+	jobset "sigs.k8s.io/jobset/api/jobset/v1alpha2"
+
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	"sigs.k8s.io/kueue/pkg/util/testing"
+	utiltestingapi "sigs.k8s.io/kueue/pkg/util/testing/v1beta1"
+	testingjobset "sigs.k8s.io/kueue/pkg/util/testingjobs/jobset"
+	testingtrainjob "sigs.k8s.io/kueue/pkg/util/testingjobs/trainjob"
+	"sigs.k8s.io/kueue/test/util"
+)
+
+var _ = ginkgo.Describe("TopologyAwareScheduling for TrainJob", func() {
+	var ns *corev1.Namespace
+	ginkgo.BeforeEach(func() {
+		ns = util.CreateNamespaceFromPrefixWithLog(ctx, k8sClient, "e2e-tas-jobset-")
+	})
+	ginkgo.AfterEach(func() {
+		gomega.Expect(util.DeleteNamespace(ctx, k8sClient, ns)).To(gomega.Succeed())
+		util.ExpectAllPodsInNamespaceDeleted(ctx, k8sClient, ns)
+	})
+
+	ginkgo.When("Creating a TrainJob", func() {
+		var (
+			topology     *kueue.Topology
+			tasFlavor    *kueue.ResourceFlavor
+			localQueue   *kueue.LocalQueue
+			clusterQueue *kueue.ClusterQueue
+		)
+		ginkgo.BeforeEach(func() {
+			topology = utiltestingapi.MakeDefaultThreeLevelTopology("datacenter")
+			util.MustCreate(ctx, k8sClient, topology)
+
+			tasFlavor = utiltestingapi.MakeResourceFlavor("tas-flavor").
+				NodeLabel(tasNodeGroupLabel, instanceType).TopologyName(topology.Name).Obj()
+			util.MustCreate(ctx, k8sClient, tasFlavor)
+			clusterQueue = utiltestingapi.MakeClusterQueue("cluster-queue").
+				ResourceGroup(
+					*utiltestingapi.MakeFlavorQuotas("tas-flavor").
+						Resource(extraResource, "8").
+						Obj(),
+				).
+				Obj()
+			util.MustCreate(ctx, k8sClient, clusterQueue)
+			util.ExpectClusterQueuesToBeActive(ctx, k8sClient, clusterQueue)
+
+			localQueue = utiltestingapi.MakeLocalQueue("main", ns.Name).ClusterQueue("cluster-queue").Obj()
+			util.MustCreate(ctx, k8sClient, localQueue)
+		})
+		ginkgo.AfterEach(func() {
+			gomega.Expect(util.DeleteAllTrainJobsInNamespace(ctx, k8sClient, ns)).Should(gomega.Succeed())
+			gomega.Expect(util.DeleteAllTrainingRuntimesInNamespace(ctx, k8sClient, ns)).Should(gomega.Succeed())
+			// Force remove workloads to be sure that cluster queue can be removed.
+			gomega.Expect(util.DeleteWorkloadsInNamespace(ctx, k8sClient, ns)).Should(gomega.Succeed())
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, localQueue, true)
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, clusterQueue, true)
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, tasFlavor, true)
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, topology, true)
+			util.ExpectAllPodsInNamespaceDeleted(ctx, k8sClient, ns)
+		})
+
+		ginkgo.It("Should place pods based on the ranks-ordering", func() {
+			replicas := 3
+			parallelism := 2
+			numPods := replicas * parallelism
+
+			trainingRuntime := testingtrainjob.MakeTrainingRuntime("test-trainingruntime", ns.Name, testingjobset.MakeJobSet("", "").
+				ReplicatedJobs(
+					testingjobset.ReplicatedJobRequirements{
+						Name:        "node",
+						Image:       util.GetAgnHostImage(),
+						Args:        util.BehaviorExitFast,
+						Replicas:    int32(replicas),
+						Parallelism: int32(parallelism),
+						Completions: int32(parallelism),
+						PodAnnotations: map[string]string{
+							kueue.PodSetPreferredTopologyAnnotation: testing.DefaultBlockTopologyLevel,
+						},
+					}).
+				RequestAndLimit("node", extraResource, "1").Obj().Spec)
+
+			trainjob := testingtrainjob.MakeTrainJob("trainjob-test", ns.Name).RuntimeRef(kftrainer.RuntimeRef{
+				APIGroup: ptr.To(kftrainer.GroupVersion.Group),
+				Name:     "test-trainingruntime",
+				Kind:     ptr.To(kftrainer.TrainingRuntimeKind),
+			}).
+				Queue(localQueue.Name).
+				Obj()
+
+			util.MustCreate(ctx, k8sClient, trainingRuntime)
+			util.MustCreate(ctx, k8sClient, trainjob)
+
+			ginkgo.By("JobSet is unsuspended", func() {
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(trainjob), trainjob)).To(gomega.Succeed())
+					g.Expect(trainjob.Spec.Suspend).Should(gomega.Equal(ptr.To(false)))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			pods := &corev1.PodList{}
+			ginkgo.By("ensure all pods are created", func() {
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.List(ctx, pods, client.InNamespace(ns.Name))).To(gomega.Succeed())
+					g.Expect(pods.Items).Should(gomega.HaveLen(numPods))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			ginkgo.By("ensure all pods are scheduled", func() {
+				listOpts := &client.ListOptions{
+					FieldSelector: fields.OneTermNotEqualSelector("spec.nodeName", ""),
+				}
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.List(ctx, pods, client.InNamespace(ns.Name), listOpts)).To(gomega.Succeed())
+					g.Expect(pods.Items).Should(gomega.HaveLen(numPods))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			ginkgo.By("verify the assignment of pods are as expected with rank-based ordering", func() {
+				gomega.Expect(k8sClient.List(ctx, pods, client.InNamespace(ns.Name))).To(gomega.Succeed())
+				gotAssignment := readRankAssignmentsFromTrainJobPods(pods.Items)
+				wantAssignment := map[string]string{
+					"0/0": "kind-worker",
+					"0/1": "kind-worker2",
+					"1/0": "kind-worker3",
+					"1/1": "kind-worker4",
+					"2/0": "kind-worker5",
+					"2/1": "kind-worker6",
+				}
+				gomega.Expect(wantAssignment).Should(gomega.BeComparableTo(gotAssignment))
+			})
+		})
+
+		ginkgo.It("Should place pods in podset slices with two-level scheduling based on the ranks-ordering", func() {
+			replicas := 2
+			parallelism := 3
+			numPods := replicas * parallelism
+			trainingRuntime := testingtrainjob.MakeTrainingRuntime("test-trainingruntime", ns.Name, testingjobset.MakeJobSet("", "").
+				ReplicatedJobs(
+					testingjobset.ReplicatedJobRequirements{
+						Name:        "node",
+						Image:       util.GetAgnHostImage(),
+						Args:        util.BehaviorExitFast,
+						Replicas:    int32(replicas),
+						Parallelism: int32(parallelism),
+						Completions: int32(parallelism),
+						PodAnnotations: map[string]string{
+							kueue.PodSetPreferredTopologyAnnotation:     testing.DefaultBlockTopologyLevel,
+							kueue.PodSetSliceRequiredTopologyAnnotation: testing.DefaultBlockTopologyLevel,
+							kueue.PodSetSliceSizeAnnotation:             "3",
+						},
+					}).
+				RequestAndLimit("node", extraResource, "1").Obj().Spec)
+
+			trainjob := testingtrainjob.MakeTrainJob("trainjob-test", ns.Name).RuntimeRef(kftrainer.RuntimeRef{
+				APIGroup: ptr.To(kftrainer.GroupVersion.Group),
+				Name:     "test-trainingruntime",
+				Kind:     ptr.To(kftrainer.TrainingRuntimeKind),
+			}).
+				Queue(localQueue.Name).
+				Obj()
+
+			util.MustCreate(ctx, k8sClient, trainingRuntime)
+			util.MustCreate(ctx, k8sClient, trainjob)
+
+			ginkgo.By("TrainJob is unsuspended", func() {
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(trainjob), trainjob)).To(gomega.Succeed())
+					g.Expect(trainjob.Spec.Suspend).Should(gomega.Equal(ptr.To(false)))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			pods := &corev1.PodList{}
+			ginkgo.By("ensure all pods are created", func() {
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.List(ctx, pods, client.InNamespace(ns.Name))).To(gomega.Succeed())
+					g.Expect(pods.Items).Should(gomega.HaveLen(numPods))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			ginkgo.By("ensure all pods are scheduled", func() {
+				listOpts := &client.ListOptions{
+					FieldSelector: fields.OneTermNotEqualSelector("spec.nodeName", ""),
+				}
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.List(ctx, pods, client.InNamespace(ns.Name), listOpts)).To(gomega.Succeed())
+					g.Expect(pods.Items).Should(gomega.HaveLen(numPods))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			ginkgo.By("verify the assignment of pods are as expected with rank-based ordering", func() {
+				gomega.Expect(k8sClient.List(ctx, pods, client.InNamespace(ns.Name))).To(gomega.Succeed())
+				gotAssignment := readRankAssignmentsFromJobSetPods(pods.Items)
+				wantAssignment := map[string]string{
+					"0/0": "kind-worker",
+					"0/1": "kind-worker2",
+					"0/2": "kind-worker3",
+					"1/0": "kind-worker5",
+					"1/1": "kind-worker6",
+					"1/2": "kind-worker7",
+				}
+				gomega.Expect(wantAssignment).Should(gomega.BeComparableTo(gotAssignment))
+			})
+		})
+
+		ginkgo.It("Should place pods in podset slices with slice-only scheduling based on the ranks-ordering", func() {
+			replicas := 2
+			parallelism := 3
+			numPods := replicas * parallelism
+			trainingRuntime := testingtrainjob.MakeTrainingRuntime("test-trainingruntime", ns.Name, testingjobset.MakeJobSet("", "").
+				ReplicatedJobs(
+					testingjobset.ReplicatedJobRequirements{
+						Name:        "node",
+						Image:       util.GetAgnHostImage(),
+						Args:        util.BehaviorExitFast,
+						Replicas:    int32(replicas),
+						Parallelism: int32(parallelism),
+						Completions: int32(parallelism),
+						PodAnnotations: map[string]string{
+							kueue.PodSetSliceRequiredTopologyAnnotation: testing.DefaultBlockTopologyLevel,
+							kueue.PodSetSliceSizeAnnotation:             "3",
+						},
+					}).
+				RequestAndLimit("node", extraResource, "1").Obj().Spec)
+
+			trainjob := testingtrainjob.MakeTrainJob("trainjob-test", ns.Name).RuntimeRef(kftrainer.RuntimeRef{
+				APIGroup: ptr.To(kftrainer.GroupVersion.Group),
+				Name:     "test-trainingruntime",
+				Kind:     ptr.To(kftrainer.TrainingRuntimeKind),
+			}).
+				Queue(localQueue.Name).
+				Obj()
+
+			util.MustCreate(ctx, k8sClient, trainingRuntime)
+			util.MustCreate(ctx, k8sClient, trainjob)
+
+			ginkgo.By("TrainJob is unsuspended", func() {
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(trainjob), trainjob)).To(gomega.Succeed())
+					g.Expect(trainjob.Spec.Suspend).Should(gomega.Equal(ptr.To(false)))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			pods := &corev1.PodList{}
+			ginkgo.By("ensure all pods are created", func() {
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.List(ctx, pods, client.InNamespace(ns.Name))).To(gomega.Succeed())
+					g.Expect(pods.Items).Should(gomega.HaveLen(numPods))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			ginkgo.By("ensure all pods are scheduled", func() {
+				listOpts := &client.ListOptions{
+					FieldSelector: fields.OneTermNotEqualSelector("spec.nodeName", ""),
+				}
+				gomega.Eventually(func(g gomega.Gomega) {
+					g.Expect(k8sClient.List(ctx, pods, client.InNamespace(ns.Name), listOpts)).To(gomega.Succeed())
+					g.Expect(pods.Items).Should(gomega.HaveLen(numPods))
+				}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+			})
+
+			ginkgo.By("verify the assignment of pods are as expected with rank-based ordering", func() {
+				gomega.Expect(k8sClient.List(ctx, pods, client.InNamespace(ns.Name))).To(gomega.Succeed())
+				gotAssignment := readRankAssignmentsFromJobSetPods(pods.Items)
+				wantAssignment := map[string]string{
+					"0/0": "kind-worker",
+					"0/1": "kind-worker2",
+					"0/2": "kind-worker3",
+					"1/0": "kind-worker5",
+					"1/1": "kind-worker6",
+					"1/2": "kind-worker7",
+				}
+				gomega.Expect(wantAssignment).Should(gomega.BeComparableTo(gotAssignment))
+			})
+		})
+	})
+})
+
+func readRankAssignmentsFromTrainJobPods(pods []corev1.Pod) map[string]string {
+	assignment := make(map[string]string, len(pods))
+	for _, pod := range pods {
+		podIndex := pod.Labels[batchv1.JobCompletionIndexAnnotation]
+		jobIndex := pod.Labels[jobset.JobIndexKey]
+		key := fmt.Sprintf("%v/%v", jobIndex, podIndex)
+		assignment[key] = pod.Spec.NodeName
+	}
+	return assignment
+}
diff --git a/test/integration/framework/framework.go b/test/integration/framework/framework.go
index 4b9eaaeab..3af92c5bb 100644
--- a/test/integration/framework/framework.go
+++ b/test/integration/framework/framework.go
@@ -51,6 +51,8 @@ import (
 
 	config "sigs.k8s.io/kueue/apis/config/v1beta1"
 	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
+	kueuev1beta2 "sigs.k8s.io/kueue/apis/kueue/v1beta2"
+	"sigs.k8s.io/kueue/client-go/clientset/versioned/scheme"
 	"sigs.k8s.io/kueue/test/util"
 )
 
@@ -74,11 +76,19 @@ func (f *Framework) Init() *rest.Config {
 
 	var cfg *rest.Config
 	ginkgo.By("bootstrapping test environment", func() {
-		baseCrdPath := filepath.Join(util.GetProjectBaseDir(), "config", "components", "crd", "bases")
+		baseCrdPath := filepath.Join(util.GetProjectBaseDir(), "config", "components", "crd", "_output")
 		f.testEnv = &envtest.Environment{
 			CRDDirectoryPaths:     append(f.DepCRDPaths, baseCrdPath),
 			ErrorIfCRDPathMissing: true,
 		}
+		var err error
+		f.testEnv.Scheme = scheme.Scheme
+		err = kueue.AddToScheme(f.testEnv.Scheme)
+		gomega.ExpectWithOffset(1, err).NotTo(gomega.HaveOccurred())
+
+		err = kueuev1beta2.AddToScheme(f.testEnv.Scheme)
+		gomega.ExpectWithOffset(1, err).NotTo(gomega.HaveOccurred())
+
 		if len(f.WebhookPath) > 0 {
 			f.testEnv.WebhookInstallOptions.Paths = []string{f.WebhookPath}
 		}
@@ -97,7 +107,6 @@ func (f *Framework) Init() *rest.Config {
 			f.testEnv.ControlPlane.GetAPIServer().Err = ginkgo.GinkgoWriter
 		}
 
-		var err error
 		cfg, err = f.testEnv.Start()
 		gomega.ExpectWithOffset(1, err).NotTo(gomega.HaveOccurred())
 		gomega.ExpectWithOffset(1, cfg).NotTo(gomega.BeNil())
@@ -114,6 +123,9 @@ func (f *Framework) SetupClient(cfg *rest.Config) (context.Context, client.Clien
 	err = kueue.AddToScheme(f.scheme)
 	gomega.ExpectWithOffset(1, err).NotTo(gomega.HaveOccurred())
 
+	err = kueuev1beta2.AddToScheme(f.scheme)
+	gomega.ExpectWithOffset(1, err).NotTo(gomega.HaveOccurred())
+
 	err = awv1beta2.AddToScheme(f.scheme)
 	gomega.ExpectWithOffset(1, err).NotTo(gomega.HaveOccurred())
 
diff --git a/test/integration/multikueue/dispatcher_test.go b/test/integration/multikueue/dispatcher_test.go
index 4691376ab..2d4749864 100644
--- a/test/integration/multikueue/dispatcher_test.go
+++ b/test/integration/multikueue/dispatcher_test.go
@@ -26,6 +26,7 @@ import (
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/types"
+	"k8s.io/apimachinery/pkg/util/sets"
 	"k8s.io/utils/clock"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	"sigs.k8s.io/controller-runtime/pkg/manager"
@@ -123,14 +124,7 @@ var _ = ginkgo.Describe("MultiKueueDispatcherIncremental", ginkgo.Ordered, ginkg
 			Obj()
 		gomega.Expect(managerTestCluster.client.Create(managerTestCluster.ctx, multiKueueAC)).Should(gomega.Succeed())
 
-		ginkgo.By("wait for check active", func() {
-			updatedAc := kueue.AdmissionCheck{}
-			acKey := client.ObjectKeyFromObject(multiKueueAC)
-			gomega.Eventually(func(g gomega.Gomega) {
-				g.Expect(managerTestCluster.client.Get(managerTestCluster.ctx, acKey, &updatedAc)).To(gomega.Succeed())
-				g.Expect(updatedAc.Status.Conditions).To(utiltesting.HaveConditionStatusTrue(kueue.AdmissionCheckActive))
-			}, util.Timeout, util.Interval).Should(gomega.Succeed())
-		})
+		util.ExpectAdmissionChecksToBeActive(managerTestCluster.ctx, managerTestCluster.client, multiKueueAC)
 
 		managerCq = utiltestingapi.MakeClusterQueue("q1").
 			AdmissionChecks(kueue.AdmissionCheckReference(multiKueueAC.Name)).
@@ -319,14 +313,7 @@ var _ = ginkgo.Describe("MultiKueueDispatcherExternal", ginkgo.Ordered, ginkgo.C
 			Obj()
 		gomega.Expect(managerTestCluster.client.Create(managerTestCluster.ctx, multiKueueAC)).Should(gomega.Succeed())
 
-		ginkgo.By("wait for check active", func() {
-			updatedAc := kueue.AdmissionCheck{}
-			acKey := client.ObjectKeyFromObject(multiKueueAC)
-			gomega.Eventually(func(g gomega.Gomega) {
-				g.Expect(managerTestCluster.client.Get(managerTestCluster.ctx, acKey, &updatedAc)).To(gomega.Succeed())
-				g.Expect(updatedAc.Status.Conditions).To(utiltesting.HaveConditionStatusTrue(kueue.AdmissionCheckActive))
-			}, util.Timeout, util.Interval).Should(gomega.Succeed())
-		})
+		util.ExpectAdmissionChecksToBeActive(managerTestCluster.ctx, managerTestCluster.client, multiKueueAC)
 
 		managerCq = utiltestingapi.MakeClusterQueue("q1").
 			AdmissionChecks(kueue.AdmissionCheckReference(multiKueueAC.Name)).
@@ -566,14 +553,7 @@ var _ = ginkgo.Describe("MultiKueueDispatcherAllAtOnce", ginkgo.Ordered, ginkgo.
 			Obj()
 		gomega.Expect(managerTestCluster.client.Create(managerTestCluster.ctx, multiKueueAC)).Should(gomega.Succeed())
 
-		ginkgo.By("wait for check active", func() {
-			updatedAc := kueue.AdmissionCheck{}
-			acKey := client.ObjectKeyFromObject(multiKueueAC)
-			gomega.Eventually(func(g gomega.Gomega) {
-				g.Expect(managerTestCluster.client.Get(managerTestCluster.ctx, acKey, &updatedAc)).To(gomega.Succeed())
-				g.Expect(updatedAc.Status.Conditions).To(utiltesting.HaveConditionStatusTrue(kueue.AdmissionCheckActive))
-			}, util.Timeout, util.Interval).Should(gomega.Succeed())
-		})
+		util.ExpectAdmissionChecksToBeActive(managerTestCluster.ctx, managerTestCluster.client, multiKueueAC)
 
 		managerCq = utiltestingapi.MakeClusterQueue("q1").
 			AdmissionChecks(kueue.AdmissionCheckReference(multiKueueAC.Name)).
@@ -722,3 +702,196 @@ var _ = ginkgo.Describe("MultiKueueDispatcherAllAtOnce", ginkgo.Ordered, ginkgo.
 		})
 	})
 })
+
+var _ = ginkgo.Describe("MultiKueueConfig Re-evaluation", ginkgo.Ordered, func() {
+	var (
+		managerNs *corev1.Namespace
+		worker1Ns *corev1.Namespace
+		worker2Ns *corev1.Namespace
+
+		managerMultiKueueSecret1 *corev1.Secret
+		managerMultiKueueSecret2 *corev1.Secret
+		workerCluster1           *kueue.MultiKueueCluster
+		workerCluster2           *kueue.MultiKueueCluster
+		managerMultiKueueConfig  *kueue.MultiKueueConfig
+		multiKueueAC             *kueue.AdmissionCheck
+		managerCq                *kueue.ClusterQueue
+		managerLq                *kueue.LocalQueue
+
+		worker1Cq *kueue.ClusterQueue
+		worker2Cq *kueue.ClusterQueue
+	)
+
+	ginkgo.BeforeAll(func() {
+		managerTestCluster.fwk.StartManager(managerTestCluster.ctx, managerTestCluster.cfg, func(ctx context.Context, mgr manager.Manager) {
+			managerAndMultiKueueSetup(ctx, mgr, 2*time.Second, defaultEnabledIntegrations, config.MultiKueueDispatcherModeAllAtOnce)
+		})
+	})
+
+	ginkgo.AfterAll(func() {
+		managerTestCluster.fwk.StopManager(managerTestCluster.ctx)
+	})
+
+	ginkgo.BeforeEach(func() {
+		features.SetFeatureGateDuringTest(ginkgo.GinkgoTB(), features.MultiKueueBatchJobWithManagedBy, true)
+
+		managerNs = util.CreateNamespaceFromPrefixWithLog(managerTestCluster.ctx, managerTestCluster.client, "multikueue-re-eval-")
+		worker1Ns = util.CreateNamespaceWithLog(worker1TestCluster.ctx, worker1TestCluster.client, managerNs.Name)
+		worker2Ns = util.CreateNamespaceWithLog(worker2TestCluster.ctx, worker2TestCluster.client, managerNs.Name)
+
+		w1Kubeconfig, err := worker1TestCluster.kubeConfigBytes()
+		gomega.Expect(err).NotTo(gomega.HaveOccurred())
+
+		w2Kubeconfig, err := worker2TestCluster.kubeConfigBytes()
+		gomega.Expect(err).NotTo(gomega.HaveOccurred())
+
+		managerMultiKueueSecret1 = &corev1.Secret{
+			ObjectMeta: metav1.ObjectMeta{
+				Name:      "multikueue1-re-eval",
+				Namespace: managersConfigNamespace.Name,
+			},
+			Data: map[string][]byte{
+				kueue.MultiKueueConfigSecretKey: w1Kubeconfig,
+			},
+		}
+		gomega.Expect(managerTestCluster.client.Create(managerTestCluster.ctx, managerMultiKueueSecret1)).To(gomega.Succeed())
+
+		managerMultiKueueSecret2 = &corev1.Secret{
+			ObjectMeta: metav1.ObjectMeta{
+				Name:      "multikueue2-re-eval",
+				Namespace: managersConfigNamespace.Name,
+			},
+			Data: map[string][]byte{
+				kueue.MultiKueueConfigSecretKey: w2Kubeconfig,
+			},
+		}
+		gomega.Expect(managerTestCluster.client.Create(managerTestCluster.ctx, managerMultiKueueSecret2)).To(gomega.Succeed())
+
+		workerCluster1 = utiltestingapi.MakeMultiKueueCluster("worker1-re-eval").KubeConfig(kueue.SecretLocationType, managerMultiKueueSecret1.Name).Obj()
+		gomega.Expect(managerTestCluster.client.Create(managerTestCluster.ctx, workerCluster1)).To(gomega.Succeed())
+
+		workerCluster2 = utiltestingapi.MakeMultiKueueCluster("worker2-re-eval").KubeConfig(kueue.SecretLocationType, managerMultiKueueSecret2.Name).Obj()
+		gomega.Expect(managerTestCluster.client.Create(managerTestCluster.ctx, workerCluster2)).To(gomega.Succeed())
+
+		managerMultiKueueConfig = utiltestingapi.MakeMultiKueueConfig("isolated-config").Clusters(workerCluster1.Name).Obj()
+		gomega.Expect(managerTestCluster.client.Create(managerTestCluster.ctx, managerMultiKueueConfig)).To(gomega.Succeed())
+
+		multiKueueAC = utiltestingapi.MakeAdmissionCheck("isolated-ac").
+			ControllerName(kueue.MultiKueueControllerName).
+			Parameters(kueue.GroupVersion.Group, "MultiKueueConfig", managerMultiKueueConfig.Name).
+			Obj()
+		gomega.Expect(managerTestCluster.client.Create(managerTestCluster.ctx, multiKueueAC)).To(gomega.Succeed())
+
+		util.ExpectAdmissionChecksToBeActive(managerTestCluster.ctx, managerTestCluster.client, multiKueueAC)
+
+		managerCq = utiltestingapi.MakeClusterQueue("isolated-cq").
+			AdmissionChecks(kueue.AdmissionCheckReference(multiKueueAC.Name)).
+			Obj()
+		gomega.Expect(managerTestCluster.client.Create(managerTestCluster.ctx, managerCq)).To(gomega.Succeed())
+		util.ExpectClusterQueuesToBeActive(managerTestCluster.ctx, managerTestCluster.client, managerCq)
+
+		managerLq = utiltestingapi.MakeLocalQueue("isolated-lq", managerNs.Name).ClusterQueue(managerCq.Name).Obj()
+		gomega.Expect(managerTestCluster.client.Create(managerTestCluster.ctx, managerLq)).To(gomega.Succeed())
+		util.ExpectLocalQueuesToBeActive(managerTestCluster.ctx, managerTestCluster.client, managerLq)
+
+		worker1Cq = utiltestingapi.MakeClusterQueue("q1-re-eval").Obj()
+		gomega.Expect(worker1TestCluster.client.Create(worker1TestCluster.ctx, worker1Cq)).Should(gomega.Succeed())
+
+		worker2Cq = utiltestingapi.MakeClusterQueue("q1-re-eval").Obj()
+		gomega.Expect(worker2TestCluster.client.Create(worker2TestCluster.ctx, worker2Cq)).Should(gomega.Succeed())
+	})
+
+	ginkgo.AfterEach(func() {
+		gomega.Expect(util.DeleteNamespace(managerTestCluster.ctx, managerTestCluster.client, managerNs)).To(gomega.Succeed())
+		gomega.Expect(util.DeleteNamespace(worker1TestCluster.ctx, worker1TestCluster.client, worker1Ns)).To(gomega.Succeed())
+		gomega.Expect(util.DeleteNamespace(worker2TestCluster.ctx, worker2TestCluster.client, worker2Ns)).To(gomega.Succeed())
+		util.ExpectObjectToBeDeleted(managerTestCluster.ctx, managerTestCluster.client, managerCq, true)
+		util.ExpectObjectToBeDeleted(worker1TestCluster.ctx, worker1TestCluster.client, worker1Cq, true)
+		util.ExpectObjectToBeDeleted(worker2TestCluster.ctx, worker2TestCluster.client, worker2Cq, true)
+		util.ExpectObjectToBeDeleted(managerTestCluster.ctx, managerTestCluster.client, multiKueueAC, true)
+		util.ExpectObjectToBeDeleted(managerTestCluster.ctx, managerTestCluster.client, managerMultiKueueConfig, true)
+		util.ExpectObjectToBeDeleted(managerTestCluster.ctx, managerTestCluster.client, workerCluster1, true)
+		util.ExpectObjectToBeDeleted(managerTestCluster.ctx, managerTestCluster.client, workerCluster2, true)
+		util.ExpectObjectToBeDeleted(managerTestCluster.ctx, managerTestCluster.client, managerMultiKueueSecret1, true)
+		util.ExpectObjectToBeDeleted(managerTestCluster.ctx, managerTestCluster.client, managerMultiKueueSecret2, true)
+	})
+
+	ginkgo.Context("when MultiKueueConfig changes", func() {
+		var (
+			workloadLookupKey types.NamespacedName
+			admission         *kueue.Admission
+		)
+
+		ginkgo.BeforeEach(func() {
+			ginkgo.By("Create job and workload")
+			job := testingjob.MakeJob("cpu-job-reeval", managerNs.Name).
+				ManagedBy(kueue.MultiKueueControllerName).
+				Queue(kueue.LocalQueueName(managerLq.Name)).
+				Request(corev1.ResourceCPU, "100m").
+				Obj()
+			gomega.Expect(managerTestCluster.client.Create(managerTestCluster.ctx, job)).To(gomega.Succeed())
+			workloadLookupKey = types.NamespacedName{
+				Name:      workloadjob.GetWorkloadNameForJob(job.Name, job.UID),
+				Namespace: managerNs.Name,
+			}
+
+			// Set quota reservation to trigger MultiKueue processing
+			admission = utiltestingapi.MakeAdmission(managerCq.Name).Obj()
+			util.SetQuotaReservation(managerTestCluster.ctx, managerTestCluster.client, workloadLookupKey, admission)
+		})
+
+		ginkgo.It("should re-evaluate existing workload when worker2 is added to config", func() {
+			ginkgo.By("Verify workload initially only sees worker1")
+			gomega.Eventually(func(g gomega.Gomega) {
+				managerWorkload := &kueue.Workload{}
+				g.Expect(managerTestCluster.client.Get(managerTestCluster.ctx, workloadLookupKey, managerWorkload)).To(gomega.Succeed())
+				g.Expect(managerWorkload.Status.NominatedClusterNames).To(gomega.ConsistOf(workerCluster1.Name))
+
+				// Workload should be created on worker1
+				remoteWorkload := &kueue.Workload{}
+				g.Expect(worker1TestCluster.client.Get(worker1TestCluster.ctx, workloadLookupKey, remoteWorkload)).To(gomega.Succeed())
+
+				// But not on worker2 (not in config yet)
+				g.Expect(worker2TestCluster.client.Get(worker2TestCluster.ctx, workloadLookupKey, remoteWorkload)).To(utiltesting.BeNotFoundError())
+			}, util.Timeout, util.Interval).Should(gomega.Succeed())
+
+			// Now add worker2 to the MultiKueueConfig
+			gomega.Eventually(func() error {
+				if err := managerTestCluster.client.Get(managerTestCluster.ctx, client.ObjectKeyFromObject(managerMultiKueueConfig), managerMultiKueueConfig); err != nil {
+					return err
+				}
+				managerMultiKueueConfig.Spec.Clusters = []string{workerCluster1.Name, workerCluster2.Name}
+				return managerTestCluster.client.Update(managerTestCluster.ctx, managerMultiKueueConfig)
+			}, util.Timeout, util.Interval).Should(gomega.Succeed())
+
+			ginkgo.By("Wait for admission check to remain active with both clusters")
+			util.ExpectAdmissionChecksToBeActive(managerTestCluster.ctx, managerTestCluster.client, multiKueueAC)
+
+			ginkgo.By("Wait for worker2 cluster to become active")
+			gomega.Eventually(func(g gomega.Gomega) {
+				cluster2 := &kueue.MultiKueueCluster{}
+				g.Expect(managerTestCluster.client.Get(managerTestCluster.ctx, client.ObjectKeyFromObject(workerCluster2), cluster2)).To(gomega.Succeed())
+				g.Expect(cluster2.Status.Conditions).To(utiltesting.HaveConditionStatusTrue(kueue.MultiKueueClusterActive))
+			}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+
+			ginkgo.By("Verify existing workload gets re-evaluated and sees both workers")
+			gomega.Eventually(func(g gomega.Gomega) {
+				managerWorkload := &kueue.Workload{}
+				g.Expect(managerTestCluster.client.Get(managerTestCluster.ctx, workloadLookupKey, managerWorkload)).To(gomega.Succeed())
+				actualClusters := sets.New(managerWorkload.Status.NominatedClusterNames...)
+				g.Expect(actualClusters.Has(workerCluster2.Name)).To(gomega.BeTrue(),
+					"workload should see worker2 after it's added to MultiKueueConfig")
+				g.Expect(actualClusters.Has(workerCluster1.Name)).To(gomega.BeTrue(),
+					"workload should still see worker1")
+			}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+
+			ginkgo.By("Verify workloads get created on both worker clusters")
+			gomega.Eventually(func(g gomega.Gomega) {
+				remoteWorkload1 := &kueue.Workload{}
+				g.Expect(worker1TestCluster.client.Get(worker1TestCluster.ctx, workloadLookupKey, remoteWorkload1)).To(gomega.Succeed())
+				remoteWorkload2 := &kueue.Workload{}
+				g.Expect(worker2TestCluster.client.Get(worker2TestCluster.ctx, workloadLookupKey, remoteWorkload2)).To(gomega.Succeed())
+			}, util.LongTimeout, util.Interval).Should(gomega.Succeed())
+		})
+	})
+})
diff --git a/test/integration/multikueue/jobs_test.go b/test/integration/multikueue/jobs_test.go
index cf81e0f1c..80bd38fe8 100644
--- a/test/integration/multikueue/jobs_test.go
+++ b/test/integration/multikueue/jobs_test.go
@@ -1598,7 +1598,9 @@ var _ = ginkgo.Describe("MultiKueue", ginkgo.Ordered, ginkgo.ContinueOnFailure,
 			gomega.Eventually(func(g gomega.Gomega) {
 				createdTrainJob := kftrainer.TrainJob{}
 				g.Expect(worker2TestCluster.client.Get(worker2TestCluster.ctx, client.ObjectKeyFromObject(trainJob), &createdTrainJob)).To(gomega.Succeed())
-				createdTrainJob.Status.JobsStatus = []kftrainer.JobStatus{{Name: "foo"}}
+				createdTrainJob.Status.JobsStatus = []kftrainer.JobStatus{
+					testingtrainjob.MakeJobStatusWrapper("foo").Obj(),
+				}
 				g.Expect(worker2TestCluster.client.Status().Update(worker2TestCluster.ctx, &createdTrainJob)).To(gomega.Succeed())
 			}, util.Timeout, util.Interval).Should(gomega.Succeed())
 			gomega.Eventually(func(g gomega.Gomega) {
diff --git a/test/integration/multikueue/suite_test.go b/test/integration/multikueue/suite_test.go
index 9a8428d0b..9559d9157 100644
--- a/test/integration/multikueue/suite_test.go
+++ b/test/integration/multikueue/suite_test.go
@@ -82,6 +82,11 @@ var (
 	worker1TestCluster      cluster
 	worker2TestCluster      cluster
 	managersConfigNamespace *corev1.Namespace
+
+	// makes sure there is only one fwk.Init and setupClient at the same time
+	// since these functions are not thread safe due to adding to the common
+	// schema.
+	mu sync.Mutex
 )
 
 func TestMultiKueue(t *testing.T) {
@@ -106,8 +111,10 @@ func createCluster(setupFnc framework.ManagerSetup, apiFeatureGates ...string) c
 		},
 		APIServerFeatureGates: apiFeatureGates,
 	}
+	mu.Lock()
 	c.cfg = c.fwk.Init()
 	c.ctx, c.client = c.fwk.SetupClient(c.cfg)
+	mu.Unlock()
 
 	// skip the manager setup if setup func is not provided
 	if setupFnc != nil {
@@ -359,6 +366,7 @@ func managerAndMultiKueueSetup(
 var _ = ginkgo.BeforeSuite(func() {
 	var managerFeatureGates []string
 	ginkgo.By("creating the clusters", func() {
+		mu = sync.Mutex{}
 		wg := sync.WaitGroup{}
 		wg.Add(3)
 		go func() {
diff --git a/test/integration/singlecluster/controller/jobs/pod/pod_controller_test.go b/test/integration/singlecluster/controller/jobs/pod/pod_controller_test.go
index 0c04874ae..741ad5bf2 100644
--- a/test/integration/singlecluster/controller/jobs/pod/pod_controller_test.go
+++ b/test/integration/singlecluster/controller/jobs/pod/pod_controller_test.go
@@ -39,6 +39,7 @@ import (
 	"sigs.k8s.io/kueue/pkg/controller/jobframework"
 	podcontroller "sigs.k8s.io/kueue/pkg/controller/jobs/pod"
 	podconstants "sigs.k8s.io/kueue/pkg/controller/jobs/pod/constants"
+	"sigs.k8s.io/kueue/pkg/features"
 	"sigs.k8s.io/kueue/pkg/util/testing"
 	utiltestingapi "sigs.k8s.io/kueue/pkg/util/testing/v1beta1"
 	testingjob "sigs.k8s.io/kueue/pkg/util/testingjobs/job"
@@ -354,7 +355,41 @@ var _ = ginkgo.Describe("Pod controller", ginkgo.Ordered, ginkgo.ContinueOnFailu
 			})
 
 			ginkgo.When("Pod owner is managed by Kueue", func() {
-				ginkgo.It("Should skip the pod", func() {
+				ginkgo.It("Should skip the pod with MultiKueueBatchJobWithManagedBy by off", func() {
+					features.SetFeatureGateDuringTest(ginkgo.GinkgoTB(), features.MultiKueueBatchJobWithManagedBy, false)
+					job := testingjob.MakeJob("parent-job", ns.Name).Queue(kueue.LocalQueueName(lq.Name)).Obj()
+					util.MustCreate(ctx, k8sClient, job)
+
+					pod := testingpod.MakePod(podName, ns.Name).Queue(lq.Name).Obj()
+					gomega.Expect(controllerutil.SetControllerReference(job, pod, k8sClient.Scheme())).To(gomega.Succeed())
+					util.MustCreate(ctx, k8sClient, pod)
+
+					createdPod := &corev1.Pod{}
+					gomega.Eventually(func(g gomega.Gomega) {
+						g.Expect(k8sClient.Get(ctx, lookupKey, createdPod)).Should(gomega.Succeed())
+					}, util.Timeout, util.Interval).Should(gomega.Succeed())
+
+					gomega.Expect(createdPod.Spec.SchedulingGates).NotTo(
+						gomega.ContainElement(corev1.PodSchedulingGate{Name: podconstants.SchedulingGateName}),
+						"Pod shouldn't have scheduling gate",
+					)
+
+					gomega.Expect(createdPod.Labels).NotTo(
+						gomega.HaveKeyWithValue(constants.ManagedByKueueLabelKey, constants.ManagedByKueueLabelValue),
+						"Pod shouldn't have the label",
+					)
+
+					gomega.Expect(createdPod.Finalizers).NotTo(gomega.ContainElement(constants.ManagedByKueueLabelKey),
+						"Pod shouldn't have finalizer")
+
+					wlLookupKey := types.NamespacedName{Name: podcontroller.GetWorkloadNameForPod(createdPod.Name, createdPod.UID), Namespace: ns.Name}
+					ginkgo.By(fmt.Sprintf("checking that workload '%s' is not created", wlLookupKey))
+					createdWorkload := &kueue.Workload{}
+
+					gomega.Expect(k8sClient.Get(ctx, wlLookupKey, createdWorkload)).To(testing.BeNotFoundError())
+				})
+				ginkgo.It("Should skip the pod with MultiKueueBatchJobWithManagedBy on", func() {
+					features.SetFeatureGateDuringTest(ginkgo.GinkgoTB(), features.MultiKueueBatchJobWithManagedBy, true)
 					job := testingjob.MakeJob("parent-job", ns.Name).Queue(kueue.LocalQueueName(lq.Name)).Obj()
 					util.MustCreate(ctx, k8sClient, job)
 
diff --git a/test/integration/singlecluster/controller/jobs/pod/suite_test.go b/test/integration/singlecluster/controller/jobs/pod/suite_test.go
index fff6ceba3..9ace5306e 100644
--- a/test/integration/singlecluster/controller/jobs/pod/suite_test.go
+++ b/test/integration/singlecluster/controller/jobs/pod/suite_test.go
@@ -121,7 +121,7 @@ func managerSetup(
 
 		cCache := schdcache.New(mgr.GetClient())
 		queues := qcache.NewManager(mgr.GetClient(), cCache, queueOptions...)
-		opts = append(opts, jobframework.WithQueues(queues))
+		opts = append(opts, jobframework.WithQueues(queues), jobframework.WithCache(cCache))
 
 		mgr.GetScheme().Default(configuration)
 
diff --git a/test/integration/singlecluster/controller/jobs/trainjob/suite_test.go b/test/integration/singlecluster/controller/jobs/trainjob/suite_test.go
index 70018b80c..386a73623 100644
--- a/test/integration/singlecluster/controller/jobs/trainjob/suite_test.go
+++ b/test/integration/singlecluster/controller/jobs/trainjob/suite_test.go
@@ -34,6 +34,8 @@ import (
 	"sigs.k8s.io/kueue/pkg/controller/core/indexer"
 	"sigs.k8s.io/kueue/pkg/controller/jobframework"
 	"sigs.k8s.io/kueue/pkg/controller/jobs/trainjob"
+	"sigs.k8s.io/kueue/pkg/controller/tas"
+	tasindexer "sigs.k8s.io/kueue/pkg/controller/tas/indexer"
 	"sigs.k8s.io/kueue/pkg/scheduler"
 	"sigs.k8s.io/kueue/test/integration/framework"
 	"sigs.k8s.io/kueue/test/util"
@@ -84,7 +86,7 @@ func managerSetup(opts ...jobframework.Option) framework.ManagerSetup {
 	}
 }
 
-func managerAndSchedulerSetup(opts ...jobframework.Option) framework.ManagerSetup {
+func managerAndSchedulerSetup(setupTASControllers bool, opts ...jobframework.Option) framework.ManagerSetup {
 	return func(ctx context.Context, mgr manager.Manager) {
 		managerSetup(opts...)(ctx, mgr)
 
@@ -100,6 +102,14 @@ func managerAndSchedulerSetup(opts ...jobframework.Option) framework.ManagerSetu
 		failedCtrl, err := core.SetupControllers(mgr, queues, cCache, configuration)
 		gomega.Expect(err).ToNot(gomega.HaveOccurred(), "controller", failedCtrl)
 
+		if setupTASControllers {
+			failedCtrl, err = tas.SetupControllers(mgr, queues, cCache, configuration)
+			gomega.Expect(err).ToNot(gomega.HaveOccurred(), "TAS controller", failedCtrl)
+
+			err = tasindexer.SetupIndexes(ctx, mgr.GetFieldIndexer())
+			gomega.Expect(err).NotTo(gomega.HaveOccurred())
+		}
+
 		sched := scheduler.New(queues, cCache, mgr.GetClient(), mgr.GetEventRecorderFor(constants.AdmissionName))
 		err = sched.Start(ctx)
 		gomega.Expect(err).NotTo(gomega.HaveOccurred())
diff --git a/test/integration/singlecluster/controller/jobs/trainjob/trainjob_controller_test.go b/test/integration/singlecluster/controller/jobs/trainjob/trainjob_controller_test.go
index b74e35f0c..d4f914fb9 100644
--- a/test/integration/singlecluster/controller/jobs/trainjob/trainjob_controller_test.go
+++ b/test/integration/singlecluster/controller/jobs/trainjob/trainjob_controller_test.go
@@ -19,16 +19,20 @@ package trainjob
 import (
 	"fmt"
 
+	"github.com/google/go-cmp/cmp/cmpopts"
 	kftrainerapi "github.com/kubeflow/trainer/v2/pkg/apis/trainer/v1alpha1"
 	"github.com/onsi/ginkgo/v2"
 	"github.com/onsi/gomega"
+	batchv1 "k8s.io/api/batch/v1"
 	corev1 "k8s.io/api/core/v1"
 	apimeta "k8s.io/apimachinery/pkg/api/meta"
+	"k8s.io/apimachinery/pkg/api/resource"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/types"
 	"k8s.io/utils/clock"
 	"k8s.io/utils/ptr"
 	"sigs.k8s.io/controller-runtime/pkg/client"
+	jobsetapi "sigs.k8s.io/jobset/api/jobset/v1alpha2"
 
 	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta1"
 	"sigs.k8s.io/kueue/pkg/controller/constants"
@@ -37,6 +41,7 @@ import (
 	"sigs.k8s.io/kueue/pkg/util/testing"
 	utiltestingapi "sigs.k8s.io/kueue/pkg/util/testing/v1beta1"
 	testingjobset "sigs.k8s.io/kueue/pkg/util/testingjobs/jobset"
+	testingnode "sigs.k8s.io/kueue/pkg/util/testingjobs/node"
 	testingtrainjob "sigs.k8s.io/kueue/pkg/util/testingjobs/trainjob"
 	"sigs.k8s.io/kueue/pkg/workload"
 	"sigs.k8s.io/kueue/test/util"
@@ -244,9 +249,9 @@ var _ = ginkgo.Describe("Trainjob controller", ginkgo.Ordered, ginkgo.ContinueOn
 			ginkgo.By("mark the trainjob as active", func() {
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(trainJob), trainJob)).To(gomega.Succeed())
-					trainJob.Status.JobsStatus = make([]kftrainerapi.JobStatus, 1)
-					trainJob.Status.JobsStatus[0].Active = 1
-					trainJob.Status.JobsStatus[0].Name = "node"
+					trainJob.Status.JobsStatus = []kftrainerapi.JobStatus{
+						testingtrainjob.MakeJobStatusWrapper("node").Active(1).Obj(),
+					}
 					g.Expect(k8sClient.Status().Update(ctx, trainJob)).To(gomega.Succeed())
 				}, util.Timeout, util.Interval).Should(gomega.Succeed())
 			})
@@ -275,7 +280,7 @@ var _ = ginkgo.Describe("Trainjob controller", ginkgo.Ordered, ginkgo.ContinueOn
 			ginkgo.By("mark the trainjob as inactive", func() {
 				gomega.Eventually(func(g gomega.Gomega) {
 					g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(trainJob), trainJob)).To(gomega.Succeed())
-					trainJob.Status.JobsStatus[0].Active = 0
+					trainJob.Status.JobsStatus[0].Active = ptr.To(int32(0))
 					g.Expect(k8sClient.Status().Update(ctx, trainJob)).To(gomega.Succeed())
 				}, util.Timeout, util.Interval).Should(gomega.Succeed())
 			})
@@ -351,7 +356,7 @@ var _ = ginkgo.Describe("TrainJob controller for workloads when only jobs with q
 
 var _ = ginkgo.Describe("TrainJob controller interacting with scheduler", ginkgo.Ordered, ginkgo.ContinueOnFailure, func() {
 	ginkgo.BeforeAll(func() {
-		fwk.StartManager(ctx, cfg, managerAndSchedulerSetup())
+		fwk.StartManager(ctx, cfg, managerAndSchedulerSetup(false))
 	})
 	ginkgo.AfterAll(func() {
 		fwk.StopManager(ctx)
@@ -426,11 +431,11 @@ var _ = ginkgo.Describe("TrainJob controller interacting with scheduler", ginkgo
 		gomega.Eventually(func(g gomega.Gomega) {
 			g.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: trainJob.Name, Namespace: ns.Name}, createdTrainJob)).Should(gomega.Succeed())
 			g.Expect(*createdTrainJob.Spec.Suspend).Should(gomega.BeFalse())
-			g.Expect(createdTrainJob.Spec.PodSpecOverrides).To(gomega.HaveLen(2))
-			g.Expect(createdTrainJob.Spec.PodSpecOverrides[0].TargetJobs[0]).Should(gomega.Equal(kftrainerapi.PodSpecOverrideTargetJob{Name: "node-1"}))
-			g.Expect(createdTrainJob.Spec.PodSpecOverrides[1].TargetJobs[0]).Should(gomega.Equal(kftrainerapi.PodSpecOverrideTargetJob{Name: "node-2"}))
-			g.Expect(createdTrainJob.Spec.PodSpecOverrides[0].NodeSelector[instanceKey]).Should(gomega.Equal(spotUntaintedFlavor.Name))
-			g.Expect(createdTrainJob.Spec.PodSpecOverrides[1].NodeSelector[instanceKey]).Should(gomega.Equal(onDemandFlavor.Name))
+			g.Expect(createdTrainJob.Spec.PodTemplateOverrides).To(gomega.HaveLen(2))
+			g.Expect(createdTrainJob.Spec.PodTemplateOverrides[0].TargetJobs[0]).Should(gomega.Equal(kftrainerapi.PodTemplateOverrideTargetJob{Name: "node-1"}))
+			g.Expect(createdTrainJob.Spec.PodTemplateOverrides[1].TargetJobs[0]).Should(gomega.Equal(kftrainerapi.PodTemplateOverrideTargetJob{Name: "node-2"}))
+			g.Expect(createdTrainJob.Spec.PodTemplateOverrides[0].Spec.NodeSelector[instanceKey]).Should(gomega.Equal(spotUntaintedFlavor.Name))
+			g.Expect(createdTrainJob.Spec.PodTemplateOverrides[1].Spec.NodeSelector[instanceKey]).Should(gomega.Equal(onDemandFlavor.Name))
 		}, util.Timeout, util.Interval).Should(gomega.Succeed())
 
 		util.ExpectPendingWorkloadsMetric(clusterQueue, 0, 0)
@@ -524,14 +529,8 @@ var _ = ginkgo.Describe("TrainJob controller interacting with scheduler", ginkgo
 			createdTrainJob1 := &kftrainerapi.TrainJob{}
 			gomega.Expect(k8sClient.Get(ctx, types.NamespacedName{Name: trainJob1.Name, Namespace: ns.Name}, createdTrainJob1)).Should(gomega.Succeed())
 			createdTrainJob1.Status.JobsStatus = []kftrainerapi.JobStatus{
-				{
-					Name:      "node-1",
-					Succeeded: 2,
-				},
-				{
-					Name:      "node-2",
-					Succeeded: 1,
-				},
+				testingtrainjob.MakeJobStatusWrapper("node-1").Succeeded(2).Obj(),
+				testingtrainjob.MakeJobStatusWrapper("node-2").Succeeded(1).Obj(),
 			}
 			gomega.Expect(k8sClient.Status().Update(ctx, createdTrainJob1)).Should(gomega.Succeed())
 
@@ -561,3 +560,170 @@ var _ = ginkgo.Describe("TrainJob controller interacting with scheduler", ginkgo
 		})
 	})
 })
+
+var _ = ginkgo.Describe("TrainJob controller with TopologyAwareScheduling", ginkgo.Ordered, ginkgo.ContinueOnFailure, func() {
+	const (
+		nodeGroupLabel = "node-group"
+	)
+
+	var (
+		ns           *corev1.Namespace
+		nodes        []corev1.Node
+		topology     *kueue.Topology
+		tasFlavor    *kueue.ResourceFlavor
+		clusterQueue *kueue.ClusterQueue
+		localQueue   *kueue.LocalQueue
+	)
+
+	ginkgo.BeforeAll(func() {
+		fwk.StartManager(ctx, cfg, managerAndSchedulerSetup(true))
+	})
+
+	ginkgo.AfterAll(func() {
+		fwk.StopManager(ctx)
+	})
+
+	ginkgo.BeforeEach(func() {
+		ns = util.CreateNamespaceFromPrefixWithLog(ctx, k8sClient, "tas-jobset-")
+
+		nodes = []corev1.Node{
+			*testingnode.MakeNode("b1r1").
+				Label(nodeGroupLabel, "tas").
+				Label(testing.DefaultBlockTopologyLevel, "b1").
+				Label(testing.DefaultRackTopologyLevel, "r1").
+				StatusAllocatable(corev1.ResourceList{
+					corev1.ResourceCPU:    resource.MustParse("1"),
+					corev1.ResourceMemory: resource.MustParse("1Gi"),
+					corev1.ResourcePods:   resource.MustParse("10"),
+				}).
+				Ready().
+				Obj(),
+		}
+		util.CreateNodesWithStatus(ctx, k8sClient, nodes)
+
+		topology = utiltestingapi.MakeDefaultTwoLevelTopology("default")
+		util.MustCreate(ctx, k8sClient, topology)
+
+		tasFlavor = utiltestingapi.MakeResourceFlavor("tas-flavor").
+			NodeLabel(nodeGroupLabel, "tas").
+			TopologyName("default").Obj()
+		util.MustCreate(ctx, k8sClient, tasFlavor)
+
+		clusterQueue = utiltestingapi.MakeClusterQueue("cluster-queue").
+			ResourceGroup(*utiltestingapi.MakeFlavorQuotas(tasFlavor.Name).Resource(corev1.ResourceCPU, "5").Obj()).
+			Obj()
+		util.MustCreate(ctx, k8sClient, clusterQueue)
+		util.ExpectClusterQueuesToBeActive(ctx, k8sClient, clusterQueue)
+
+		localQueue = utiltestingapi.MakeLocalQueue("local-queue", ns.Name).ClusterQueue(clusterQueue.Name).Obj()
+		util.MustCreate(ctx, k8sClient, localQueue)
+	})
+
+	ginkgo.AfterEach(func() {
+		gomega.Expect(util.DeleteNamespace(ctx, k8sClient, ns)).To(gomega.Succeed())
+		util.ExpectObjectToBeDeleted(ctx, k8sClient, clusterQueue, true)
+		util.ExpectObjectToBeDeleted(ctx, k8sClient, tasFlavor, true)
+		util.ExpectObjectToBeDeleted(ctx, k8sClient, topology, true)
+		for _, node := range nodes {
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, &node, true)
+		}
+	})
+
+	ginkgo.It("should admit workload which fits in a required topology domain", func() {
+		testJobSet := testingjobset.MakeJobSet("", "").ReplicatedJobs(
+			testingjobset.ReplicatedJobRequirements{
+				Name:        "node-1",
+				Replicas:    1,
+				Parallelism: 1,
+				Completions: 1,
+				PodAnnotations: map[string]string{
+					kueue.PodSetRequiredTopologyAnnotation: testing.DefaultBlockTopologyLevel,
+				},
+			}, testingjobset.ReplicatedJobRequirements{
+				Name:        "node-2",
+				Replicas:    1,
+				Parallelism: 1,
+				Completions: 1,
+				PodAnnotations: map[string]string{
+					kueue.PodSetPreferredTopologyAnnotation: testing.DefaultRackTopologyLevel,
+				},
+			},
+		).
+			Request("node-1", corev1.ResourceCPU, "100m").
+			Request("node-2", corev1.ResourceCPU, "100m").
+			Obj()
+		testTr := testingtrainjob.MakeTrainingRuntime("test", ns.Name, testJobSet.Spec)
+		trainJob := testingtrainjob.MakeTrainJob("trainjob-test", ns.Name).RuntimeRef(kftrainerapi.RuntimeRef{
+			APIGroup: ptr.To("trainer.kubeflow.org"),
+			Name:     "test",
+			Kind:     ptr.To(kftrainerapi.TrainingRuntimeKind),
+		}).
+			Queue(localQueue.Name).
+			Suspend(false).
+			Obj()
+
+		ginkgo.By("creating a TrainJob", func() {
+			util.MustCreate(ctx, k8sClient, testTr)
+			util.MustCreate(ctx, k8sClient, trainJob)
+		})
+
+		wl := &kueue.Workload{}
+		wlLookupKey := types.NamespacedName{
+			Name:      workloadtrainjob.GetWorkloadNameForTrainJob(trainJob.Name, trainJob.UID),
+			Namespace: ns.Name,
+		}
+
+		ginkgo.By("verify the workload is created", func() {
+			gomega.Eventually(func(g gomega.Gomega) {
+				g.Expect(k8sClient.Get(ctx, wlLookupKey, wl)).Should(gomega.Succeed())
+				g.Expect(wl.Spec.PodSets).Should(gomega.BeComparableTo([]kueue.PodSet{
+					{
+						Name:  "node-1",
+						Count: 1,
+						TopologyRequest: &kueue.PodSetTopologyRequest{
+							Required:           ptr.To(testing.DefaultBlockTopologyLevel),
+							PodIndexLabel:      ptr.To(batchv1.JobCompletionIndexAnnotation),
+							SubGroupIndexLabel: ptr.To(jobsetapi.JobIndexKey),
+							SubGroupCount:      ptr.To[int32](1),
+						},
+					},
+					{
+						Name:  "node-2",
+						Count: 1,
+						TopologyRequest: &kueue.PodSetTopologyRequest{
+							Preferred:          ptr.To(testing.DefaultRackTopologyLevel),
+							PodIndexLabel:      ptr.To(batchv1.JobCompletionIndexAnnotation),
+							SubGroupIndexLabel: ptr.To(jobsetapi.JobIndexKey),
+							SubGroupCount:      ptr.To[int32](1),
+						},
+					},
+				}, cmpopts.IgnoreFields(kueue.PodSet{}, "Template")))
+			}, util.Timeout, util.Interval).Should(gomega.Succeed())
+		})
+
+		ginkgo.By("verify the workload is admitted", func() {
+			util.ExpectWorkloadsToBeAdmitted(ctx, k8sClient, wl)
+			util.ExpectReservingActiveWorkloadsMetric(clusterQueue, 1)
+		})
+
+		ginkgo.By("verify admission for the workload", func() {
+			gomega.Eventually(func(g gomega.Gomega) {
+				g.Expect(k8sClient.Get(ctx, wlLookupKey, wl)).Should(gomega.Succeed())
+				g.Expect(wl.Status.Admission).ShouldNot(gomega.BeNil())
+				g.Expect(wl.Status.Admission.PodSetAssignments).Should(gomega.HaveLen(2))
+				g.Expect(wl.Status.Admission.PodSetAssignments[0].TopologyAssignment).Should(gomega.BeComparableTo(
+					&kueue.TopologyAssignment{
+						Levels:  []string{testing.DefaultBlockTopologyLevel, testing.DefaultRackTopologyLevel},
+						Domains: []kueue.TopologyDomainAssignment{{Count: 1, Values: []string{"b1", "r1"}}},
+					},
+				))
+				g.Expect(wl.Status.Admission.PodSetAssignments[1].TopologyAssignment).Should(gomega.BeComparableTo(
+					&kueue.TopologyAssignment{
+						Levels:  []string{testing.DefaultBlockTopologyLevel, testing.DefaultRackTopologyLevel},
+						Domains: []kueue.TopologyDomainAssignment{{Count: 1, Values: []string{"b1", "r1"}}},
+					},
+				))
+			}, util.Timeout, util.Interval).Should(gomega.Succeed())
+		})
+	})
+})
diff --git a/test/integration/singlecluster/conversion/conversions_v1beta2_test.go b/test/integration/singlecluster/conversion/conversions_v1beta2_test.go
new file mode 100644
index 000000000..17e2d1dda
--- /dev/null
+++ b/test/integration/singlecluster/conversion/conversions_v1beta2_test.go
@@ -0,0 +1,335 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package conversion
+
+import (
+	"github.com/google/go-cmp/cmp/cmpopts"
+	"github.com/onsi/ginkgo/v2"
+	"github.com/onsi/gomega"
+	batchv1 "k8s.io/api/batch/v1"
+	corev1 "k8s.io/api/core/v1"
+	apimeta "k8s.io/apimachinery/pkg/api/meta"
+	"k8s.io/apimachinery/pkg/api/resource"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/types"
+	"sigs.k8s.io/controller-runtime/pkg/client"
+
+	kueue "sigs.k8s.io/kueue/apis/kueue/v1beta2"
+	"sigs.k8s.io/kueue/pkg/controller/constants"
+	workloadjob "sigs.k8s.io/kueue/pkg/controller/jobs/job"
+	utiltestingapi "sigs.k8s.io/kueue/pkg/util/testing/v1beta2"
+	testingjob "sigs.k8s.io/kueue/pkg/util/testingjobs/job"
+	"sigs.k8s.io/kueue/test/integration/framework"
+	"sigs.k8s.io/kueue/test/util"
+)
+
+var _ = ginkgo.Describe("v1beta2 conversions", ginkgo.Ordered, ginkgo.ContinueOnFailure, func() {
+	const (
+		flavorModelC = "model-c"
+		flavorModelD = "model-d"
+
+		resourceGPU corev1.ResourceName = "example.com/gpu"
+	)
+	var (
+		ns                      *corev1.Namespace
+		localQueue              *kueue.LocalQueue
+		clusterQueues           []*kueue.ClusterQueue
+		jobs                    []*batchv1.Job
+		resourceFlavors         []kueue.ResourceFlavor
+		workloadPriorityClasses []kueue.WorkloadPriorityClass
+	)
+
+	ginkgo.BeforeEach(func() {
+		ns = util.CreateNamespaceFromPrefixWithLog(ctx, k8sClient, "core-queue-")
+	})
+
+	ginkgo.AfterEach(func() {
+		gomega.Expect(util.DeleteNamespace(ctx, k8sClient, ns)).To(gomega.Succeed())
+		for _, cq := range clusterQueues {
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, cq, true)
+		}
+		for _, rf := range resourceFlavors {
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, &rf, true)
+		}
+		for _, wpc := range workloadPriorityClasses {
+			util.ExpectObjectToBeDeleted(ctx, k8sClient, &wpc, true)
+		}
+	})
+
+	ginkgo.It("Should update status when workloads are created", framework.SlowSpec, func() {
+		cq1 := utiltestingapi.MakeClusterQueue("cluster-queue.queue-controller").
+			ResourceGroup(
+				*utiltestingapi.MakeFlavorQuotas(flavorModelC).Resource(resourceGPU, "2", "2").Obj(),
+				*utiltestingapi.MakeFlavorQuotas(flavorModelD).Resource(resourceGPU, "2", "2").Obj(),
+			).
+			Preemption(kueue.ClusterQueuePreemption{
+				WithinClusterQueue: kueue.PreemptionPolicyLowerPriority,
+			}).
+			Cohort("cohort").
+			Obj()
+		cq2 := utiltestingapi.MakeClusterQueue("shared-pool").
+			ResourceGroup(
+				*utiltestingapi.MakeFlavorQuotas(flavorModelC).Resource(resourceGPU, "2", "2").Obj(),
+				*utiltestingapi.MakeFlavorQuotas(flavorModelD).Resource(resourceGPU, "2", "2").Obj(),
+			).
+			Preemption(kueue.ClusterQueuePreemption{
+				WithinClusterQueue: kueue.PreemptionPolicyLowerPriority,
+			}).
+			Cohort("cohort").
+			Obj()
+		clusterQueues = []*kueue.ClusterQueue{cq1, cq2}
+
+		localQueue = utiltestingapi.MakeLocalQueue("queue", ns.Name).ClusterQueue(cq1.Name).Obj()
+		util.MustCreate(ctx, k8sClient, localQueue)
+
+		ginkgo.By("Creating resourceFlavors")
+		resourceFlavors = []kueue.ResourceFlavor{
+			*utiltestingapi.MakeResourceFlavor(flavorModelC).NodeLabel(resourceGPU.String(), flavorModelC).Obj(),
+			*utiltestingapi.MakeResourceFlavor(flavorModelD).NodeLabel(resourceGPU.String(), flavorModelD).Obj(),
+		}
+		for _, rf := range resourceFlavors {
+			util.MustCreate(ctx, k8sClient, &rf)
+		}
+
+		ginkgo.By("Creating clusterQueues")
+		for _, cq := range clusterQueues {
+			util.MustCreate(ctx, k8sClient, cq)
+		}
+
+		ginkgo.By("Verify the cohort setting on the clusterQueue")
+		gomega.Eventually(func(g gomega.Gomega) {
+			var updatedCq kueue.ClusterQueue
+			g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(clusterQueues[0]), &updatedCq)).To(gomega.Succeed())
+			g.Expect(updatedCq.Spec.CohortName).Should(gomega.Equal(kueue.CohortReference("cohort")))
+		}, util.Timeout, util.Interval).Should(gomega.Succeed())
+
+		ginkgo.By("await for the LocalQueue to be ready")
+		emptyUsage := []kueue.LocalQueueFlavorUsage{
+			{
+				Name: flavorModelC,
+				Resources: []kueue.LocalQueueResourceUsage{
+					{
+						Name:  resourceGPU,
+						Total: resource.MustParse("0"),
+					},
+				},
+			},
+			{
+				Name: flavorModelD,
+				Resources: []kueue.LocalQueueResourceUsage{
+					{
+						Name:  resourceGPU,
+						Total: resource.MustParse("0"),
+					},
+				},
+			},
+		}
+		gomega.Eventually(func(g gomega.Gomega) {
+			var updatedQueue kueue.LocalQueue
+			g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(localQueue), &updatedQueue)).To(gomega.Succeed())
+			g.Expect(updatedQueue.Status).Should(gomega.BeComparableTo(kueue.LocalQueueStatus{
+				Conditions: []metav1.Condition{
+					{
+						Type:    kueue.LocalQueueActive,
+						Status:  metav1.ConditionTrue,
+						Reason:  "Ready",
+						Message: "Can submit new workloads to localQueue",
+					},
+				},
+				FlavorsReservation: emptyUsage,
+				FlavorsUsage:       emptyUsage,
+			}, util.IgnoreConditionTimestampsAndObservedGeneration, cmpopts.IgnoreFields(kueue.LocalQueueStatus{}, "Flavors")))
+		}, util.Timeout, util.Interval).Should(gomega.Succeed())
+
+		ginkgo.By("Creating workloads wave1")
+		job1 := testingjob.MakeJob("job1", ns.Name).
+			Label(constants.QueueLabel, localQueue.Name).
+			RequestAndLimit(resourceGPU, "4").Obj()
+		util.MustCreate(ctx, k8sClient, job1)
+		jobs = append(jobs, job1)
+
+		ginkgo.By("Verify the LocalQueue flavor usage is updated correctly")
+		partUsage := []kueue.LocalQueueFlavorUsage{
+			{
+				Name: flavorModelC,
+				Resources: []kueue.LocalQueueResourceUsage{
+					{
+						Name:  resourceGPU,
+						Total: resource.MustParse("4"),
+					},
+				},
+			},
+			{
+				Name: flavorModelD,
+				Resources: []kueue.LocalQueueResourceUsage{
+					{
+						Name:  resourceGPU,
+						Total: resource.MustParse("0"),
+					},
+				},
+			},
+		}
+		gomega.Eventually(func(g gomega.Gomega) {
+			var updatedQueue kueue.LocalQueue
+			g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(localQueue), &updatedQueue)).To(gomega.Succeed())
+			g.Expect(updatedQueue.Status).Should(gomega.BeComparableTo(kueue.LocalQueueStatus{
+				ReservingWorkloads: 1,
+				AdmittedWorkloads:  1,
+				PendingWorkloads:   0,
+				FlavorsReservation: partUsage,
+				FlavorsUsage:       partUsage,
+			}, util.IgnoreConditionTimestampsAndObservedGeneration, cmpopts.IgnoreFields(kueue.LocalQueueStatus{}, "Flavors", "Conditions")))
+		}, util.Timeout, util.Interval).Should(gomega.Succeed())
+
+		ginkgo.By("Creating workloads wave2")
+		job2 := testingjob.MakeJob("job2", ns.Name).
+			Label(constants.QueueLabel, localQueue.Name).
+			RequestAndLimit(resourceGPU, "4").Obj()
+		util.MustCreate(ctx, k8sClient, job2)
+		jobs = append(jobs, job2)
+
+		ginkgo.By("Verify the LocalQueue flavor usage is updated correctly")
+		fullUsage := []kueue.LocalQueueFlavorUsage{
+			{
+				Name: flavorModelC,
+				Resources: []kueue.LocalQueueResourceUsage{
+					{
+						Name:  resourceGPU,
+						Total: resource.MustParse("4"),
+					},
+				},
+			},
+			{
+				Name: flavorModelD,
+				Resources: []kueue.LocalQueueResourceUsage{
+					{
+						Name:  resourceGPU,
+						Total: resource.MustParse("4"),
+					},
+				},
+			},
+		}
+		gomega.Eventually(func(g gomega.Gomega) {
+			var updatedQueue kueue.LocalQueue
+			g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(localQueue), &updatedQueue)).To(gomega.Succeed())
+			g.Expect(updatedQueue.Status).Should(gomega.BeComparableTo(kueue.LocalQueueStatus{
+				ReservingWorkloads: 2,
+				AdmittedWorkloads:  2,
+				PendingWorkloads:   0,
+				Conditions: []metav1.Condition{
+					{
+						Type:    kueue.LocalQueueActive,
+						Status:  metav1.ConditionTrue,
+						Reason:  "Ready",
+						Message: "Can submit new workloads to localQueue",
+					},
+				},
+				FlavorsReservation: fullUsage,
+				FlavorsUsage:       fullUsage,
+			}, util.IgnoreConditionTimestampsAndObservedGeneration, cmpopts.IgnoreFields(kueue.LocalQueueStatus{}, "Flavors")))
+		}, util.Timeout, util.Interval).Should(gomega.Succeed())
+	})
+
+	ginkgo.It("Should correctly accout for Workload accumulated execution time", framework.SlowSpec, func() {
+		highWorkloadPriorityClass := utiltestingapi.MakeWorkloadPriorityClass("high-workload").PriorityValue(100).Obj()
+		util.MustCreate(ctx, k8sClient, highWorkloadPriorityClass)
+		workloadPriorityClasses = append(workloadPriorityClasses, *highWorkloadPriorityClass)
+
+		ginkgo.By("Creating resourceFlavors")
+		resourceFlavors = []kueue.ResourceFlavor{
+			*utiltestingapi.MakeResourceFlavor(flavorModelC).NodeLabel(resourceGPU.String(), flavorModelC).Obj(),
+		}
+		for _, rf := range resourceFlavors {
+			util.MustCreate(ctx, k8sClient, &rf)
+		}
+
+		ginkgo.By("Creating clusterQueues")
+		cq1 := utiltestingapi.MakeClusterQueue("cluster-queue.queue-controller").
+			ResourceGroup(
+				*utiltestingapi.MakeFlavorQuotas(flavorModelC).Resource(resourceGPU, "2").Obj(),
+			).
+			Preemption(kueue.ClusterQueuePreemption{
+				WithinClusterQueue: kueue.PreemptionPolicyLowerPriority,
+			}).
+			Obj()
+		clusterQueues = []*kueue.ClusterQueue{cq1}
+
+		for _, cq := range clusterQueues {
+			util.MustCreate(ctx, k8sClient, cq)
+		}
+
+		ginkgo.By("creating LocalQueue")
+		localQueue = utiltestingapi.MakeLocalQueue("queue", ns.Name).ClusterQueue(cq1.Name).Obj()
+		util.MustCreate(ctx, k8sClient, localQueue)
+
+		ginkgo.By("await for the LocalQueue to be ready")
+		gomega.Eventually(func(g gomega.Gomega) {
+			var updatedQueue kueue.LocalQueue
+			g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(localQueue), &updatedQueue)).To(gomega.Succeed())
+			g.Expect(updatedQueue.Status).Should(gomega.BeComparableTo(kueue.LocalQueueStatus{
+				Conditions: []metav1.Condition{
+					{
+						Type:    kueue.LocalQueueActive,
+						Status:  metav1.ConditionTrue,
+						Reason:  "Ready",
+						Message: "Can submit new workloads to localQueue",
+					},
+				},
+			}, util.IgnoreConditionTimestampsAndObservedGeneration, cmpopts.IgnoreFields(kueue.LocalQueueStatus{}, "Flavors", "FlavorsReservation", "FlavorsUsage")))
+		}, util.Timeout, util.Interval).Should(gomega.Succeed())
+
+		ginkgo.By("Creating workload1")
+		job1 := testingjob.MakeJob("job1", ns.Name).
+			Label(constants.QueueLabel, localQueue.Name).
+			Label(constants.MaxExecTimeSecondsLabel, "30").
+			RequestAndLimit(resourceGPU, "2").Obj()
+		util.MustCreate(ctx, k8sClient, job1)
+		jobs = append(jobs, job1)
+
+		ginkgo.By("Verify the LocalQueue has the workload admitted")
+		gomega.Eventually(func(g gomega.Gomega) {
+			var updatedQueue kueue.LocalQueue
+			g.Expect(k8sClient.Get(ctx, client.ObjectKeyFromObject(localQueue), &updatedQueue)).To(gomega.Succeed())
+			g.Expect(updatedQueue.Status).Should(gomega.BeComparableTo(kueue.LocalQueueStatus{
+				ReservingWorkloads: 1,
+				AdmittedWorkloads:  1,
+				PendingWorkloads:   0,
+			}, util.IgnoreConditionTimestampsAndObservedGeneration, cmpopts.IgnoreFields(kueue.LocalQueueStatus{}, "Flavors", "FlavorsReservation", "FlavorsUsage", "Conditions")))
+		}, util.Timeout, util.Interval).Should(gomega.Succeed())
+
+		ginkgo.By("Creating workload2")
+		job2 := testingjob.MakeJob("job2", ns.Name).
+			Label(constants.QueueLabel, localQueue.Name).
+			WorkloadPriorityClass("high-workload").
+			RequestAndLimit(resourceGPU, "2").Obj()
+		util.MustCreate(ctx, k8sClient, job2)
+		jobs = append(jobs, job2)
+
+		wlLookupKey := types.NamespacedName{Name: workloadjob.GetWorkloadNameForJob(job1.Name, job1.UID), Namespace: ns.Name}
+
+		ginkgo.By("Verify workload2 is correct")
+		gomega.Eventually(func(g gomega.Gomega) {
+			var updatedWl kueue.Workload
+			g.Expect(k8sClient.Get(ctx, wlLookupKey, &updatedWl)).To(gomega.Succeed())
+			g.Expect(apimeta.IsStatusConditionTrue(updatedWl.Status.Conditions, kueue.WorkloadAdmitted)).Should(gomega.BeFalse())
+			g.Expect(apimeta.IsStatusConditionTrue(updatedWl.Status.Conditions, kueue.WorkloadQuotaReserved)).Should(gomega.BeFalse())
+			g.Expect(apimeta.IsStatusConditionTrue(updatedWl.Status.Conditions, kueue.WorkloadEvicted)).Should(gomega.BeTrue())
+			g.Expect(updatedWl.Spec.MaximumExecutionTimeSeconds).ShouldNot(gomega.BeNil())
+			g.Expect(updatedWl.Status.AccumulatedPastExecutionTimeSeconds).ShouldNot(gomega.BeNil())
+		}, util.Timeout, util.Interval).Should(gomega.Succeed())
+	})
+})
diff --git a/test/integration/singlecluster/conversion/suite_test.go b/test/integration/singlecluster/conversion/suite_test.go
new file mode 100644
index 000000000..6d902a589
--- /dev/null
+++ b/test/integration/singlecluster/conversion/suite_test.go
@@ -0,0 +1,104 @@
+/*
+Copyright The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package conversion
+
+import (
+	"context"
+	"testing"
+
+	"github.com/onsi/ginkgo/v2"
+	"github.com/onsi/gomega"
+	"k8s.io/client-go/rest"
+	"sigs.k8s.io/controller-runtime/pkg/client"
+	"sigs.k8s.io/controller-runtime/pkg/manager"
+
+	config "sigs.k8s.io/kueue/apis/config/v1beta1"
+	qcache "sigs.k8s.io/kueue/pkg/cache/queue"
+	schdcache "sigs.k8s.io/kueue/pkg/cache/scheduler"
+	"sigs.k8s.io/kueue/pkg/constants"
+	"sigs.k8s.io/kueue/pkg/controller/core"
+	"sigs.k8s.io/kueue/pkg/controller/core/indexer"
+	"sigs.k8s.io/kueue/pkg/controller/jobframework"
+	workloadjob "sigs.k8s.io/kueue/pkg/controller/jobs/job"
+	"sigs.k8s.io/kueue/pkg/scheduler"
+	"sigs.k8s.io/kueue/pkg/webhooks"
+	"sigs.k8s.io/kueue/test/integration/framework"
+	"sigs.k8s.io/kueue/test/util"
+)
+
+var (
+	cfg       *rest.Config
+	k8sClient client.Client
+	ctx       context.Context
+	fwk       *framework.Framework
+)
+
+func TestConversion(t *testing.T) {
+	gomega.RegisterFailHandler(ginkgo.Fail)
+
+	ginkgo.RunSpecs(t,
+		"Conversion Suite",
+	)
+}
+
+var _ = ginkgo.BeforeSuite(func() {
+	fwk = &framework.Framework{
+		WebhookPath: util.WebhookPath,
+	}
+	cfg = fwk.Init()
+	ctx, k8sClient = fwk.SetupClient(cfg)
+	fwk.StartManager(ctx, cfg, managerAndSchedulerSetup)
+})
+
+var _ = ginkgo.AfterSuite(func() {
+	fwk.Teardown()
+})
+
+func managerAndSchedulerSetup(ctx context.Context, mgr manager.Manager) {
+	err := indexer.Setup(ctx, mgr.GetFieldIndexer())
+	gomega.Expect(err).NotTo(gomega.HaveOccurred())
+
+	cCache := schdcache.New(mgr.GetClient())
+	queues := qcache.NewManager(mgr.GetClient(), cCache)
+
+	configuration := &config.Configuration{}
+	mgr.GetScheme().Default(configuration)
+
+	failedCtrl, err := core.SetupControllers(mgr, queues, cCache, configuration)
+	gomega.Expect(err).ToNot(gomega.HaveOccurred(), "controller", failedCtrl)
+
+	failedWebhook, err := webhooks.Setup(mgr)
+	gomega.Expect(err).ToNot(gomega.HaveOccurred(), "webhook", failedWebhook)
+
+	jobReconciler, err := workloadjob.NewReconciler(
+		ctx,
+		mgr.GetClient(),
+		mgr.GetFieldIndexer(),
+		mgr.GetEventRecorderFor(constants.JobControllerName))
+	gomega.Expect(err).NotTo(gomega.HaveOccurred())
+	err = workloadjob.SetupIndexes(ctx, mgr.GetFieldIndexer())
+	gomega.Expect(err).NotTo(gomega.HaveOccurred())
+	err = jobReconciler.SetupWithManager(mgr)
+	gomega.Expect(err).NotTo(gomega.HaveOccurred())
+	err = workloadjob.SetupWebhook(mgr, jobframework.WithCache(cCache), jobframework.WithQueues(queues))
+	gomega.Expect(err).NotTo(gomega.HaveOccurred())
+	jobframework.EnableIntegration(workloadjob.FrameworkName)
+
+	sched := scheduler.New(queues, cCache, mgr.GetClient(), mgr.GetEventRecorderFor(constants.AdmissionName))
+	err = sched.Start(ctx)
+	gomega.Expect(err).NotTo(gomega.HaveOccurred())
+}
diff --git a/test/integration/singlecluster/webhook/jobs/trainjob_webhook_test.go b/test/integration/singlecluster/webhook/jobs/trainjob_webhook_test.go
index 79d05bbf1..2b57b4f09 100644
--- a/test/integration/singlecluster/webhook/jobs/trainjob_webhook_test.go
+++ b/test/integration/singlecluster/webhook/jobs/trainjob_webhook_test.go
@@ -23,9 +23,13 @@ import (
 	corev1 "k8s.io/api/core/v1"
 	"k8s.io/apimachinery/pkg/types"
 	"k8s.io/utils/ptr"
+	ctrl "sigs.k8s.io/controller-runtime"
 
+	"sigs.k8s.io/kueue/pkg/constants"
 	controllerconstants "sigs.k8s.io/kueue/pkg/controller/constants"
+	"sigs.k8s.io/kueue/pkg/controller/jobframework"
 	workloadtrainjob "sigs.k8s.io/kueue/pkg/controller/jobs/trainjob"
+	testingjobset "sigs.k8s.io/kueue/pkg/util/testingjobs/jobset"
 	testingtrainjob "sigs.k8s.io/kueue/pkg/util/testingjobs/trainjob"
 	"sigs.k8s.io/kueue/test/util"
 )
@@ -35,7 +39,18 @@ var _ = ginkgo.Describe("Trainjob Webhook", func() {
 
 	ginkgo.When("with manageJobsWithoutQueueName disabled", ginkgo.Ordered, ginkgo.ContinueOnFailure, func() {
 		ginkgo.BeforeAll(func() {
-			fwk.StartManager(ctx, cfg, managerSetup(workloadtrainjob.SetupTrainJobWebhook))
+			fwk.StartManager(ctx, cfg, managerSetup(func(mgr ctrl.Manager, opts ...jobframework.Option) error {
+				// Necessary to initialize the runtimes
+				if _, err := workloadtrainjob.NewReconciler(
+					ctx,
+					mgr.GetClient(),
+					mgr.GetFieldIndexer(),
+					mgr.GetEventRecorderFor(constants.JobControllerName),
+					opts...); err != nil {
+					return err
+				}
+				return workloadtrainjob.SetupTrainJobWebhook(mgr, opts...)
+			}))
 		})
 		ginkgo.BeforeEach(func() {
 			ns = util.CreateNamespaceFromPrefixWithLog(ctx, k8sClient, "trainjob-")
@@ -48,12 +63,24 @@ var _ = ginkgo.Describe("Trainjob Webhook", func() {
 		})
 
 		ginkgo.It("should succed creating the TrainJob", func() {
-			trainJob := testingtrainjob.MakeTrainJob("trainjob-test", ns.Name).
+			testJobSet := testingjobset.MakeJobSet("", "").ReplicatedJobs(
+				testingjobset.ReplicatedJobRequirements{
+					Name:     "node",
+					Replicas: 1,
+				}).
+				Obj()
+			testTr := testingtrainjob.MakeTrainingRuntime("test", ns.Name, testJobSet.Spec)
+			trainJob := testingtrainjob.MakeTrainJob("trainjob-test", ns.Name).RuntimeRef(kftrainerapi.RuntimeRef{
+				APIGroup: ptr.To(kftrainerapi.GroupVersion.Group),
+				Name:     "test",
+				Kind:     ptr.To(kftrainerapi.TrainingRuntimeKind),
+			}).
 				Queue("queue").
 				Suspend(false).
 				Obj()
 
 			ginkgo.By("by creating the TrainJob", func() {
+				util.MustCreate(ctx, k8sClient, testTr)
 				util.MustCreate(ctx, k8sClient, trainJob)
 			})
 
@@ -68,11 +95,23 @@ var _ = ginkgo.Describe("Trainjob Webhook", func() {
 		})
 
 		ginkgo.It("should not suspend a TrainJob without queue", func() {
-			trainJob := testingtrainjob.MakeTrainJob("trainjob-test", ns.Name).
+			testJobSet := testingjobset.MakeJobSet("", "").ReplicatedJobs(
+				testingjobset.ReplicatedJobRequirements{
+					Name:     "node",
+					Replicas: 1,
+				}).
+				Obj()
+			testTr := testingtrainjob.MakeTrainingRuntime("test", ns.Name, testJobSet.Spec)
+			trainJob := testingtrainjob.MakeTrainJob("trainjob-test", ns.Name).RuntimeRef(kftrainerapi.RuntimeRef{
+				APIGroup: ptr.To(kftrainerapi.GroupVersion.Group),
+				Name:     "test",
+				Kind:     ptr.To(kftrainerapi.TrainingRuntimeKind),
+			}).
 				Suspend(false).
 				Obj()
 
 			ginkgo.By("by creating the TrainJob", func() {
+				util.MustCreate(ctx, k8sClient, testTr)
 				util.MustCreate(ctx, k8sClient, trainJob)
 			})
 
diff --git a/test/util/util.go b/test/util/util.go
index 837006695..25e7495c8 100644
--- a/test/util/util.go
+++ b/test/util/util.go
@@ -1042,6 +1042,16 @@ func ExpectLocalQueuesToBeActive(ctx context.Context, c client.Client, lqs ...*k
 	}, Timeout, Interval).Should(gomega.Succeed())
 }
 
+func ExpectAdmissionChecksToBeActive(ctx context.Context, c client.Client, acs ...*kueue.AdmissionCheck) {
+	gomega.EventuallyWithOffset(1, func(g gomega.Gomega) {
+		readAc := &kueue.AdmissionCheck{}
+		for _, ac := range acs {
+			g.Expect(c.Get(ctx, client.ObjectKeyFromObject(ac), readAc)).To(gomega.Succeed())
+			g.Expect(readAc.Status.Conditions).To(utiltesting.HaveConditionStatusTrue(kueue.AdmissionCheckActive))
+		}
+	}, Timeout, Interval).Should(gomega.Succeed())
+}
+
 func ExpectJobUnsuspendedWithNodeSelectors(ctx context.Context, c client.Client, key types.NamespacedName, nodeSelector map[string]string) {
 	job := &batchv1.Job{}
 	gomega.EventuallyWithOffset(1, func(g gomega.Gomega) {