mirror of
https://github.com/hanzo-ml/trainer.git
synced 2026-09-24 00:31:34 +00:00
feat: support imagePullSecrets in TrainJob pod spec overrides (#2806)
Signed-off-by: Tsubasa Nagasawa <[email protected]> Co-authored-by: Antonin Stefanutti <[email protected]>
This commit is contained in:
committed by
GitHub
co-authored by
Antonin Stefanutti
parent
90c2a34176
commit
39e4b08a03
@@ -20,6 +20,7 @@ import json
|
||||
from pydantic import BaseModel, ConfigDict, Field, StrictStr
|
||||
from typing import Any, ClassVar, Dict, List, Optional
|
||||
from kubeflow_trainer_api.models.io_k8s_api_core_v1_affinity import IoK8sApiCoreV1Affinity
|
||||
from kubeflow_trainer_api.models.io_k8s_api_core_v1_local_object_reference import IoK8sApiCoreV1LocalObjectReference
|
||||
from kubeflow_trainer_api.models.io_k8s_api_core_v1_pod_scheduling_gate import IoK8sApiCoreV1PodSchedulingGate
|
||||
from kubeflow_trainer_api.models.io_k8s_api_core_v1_toleration import IoK8sApiCoreV1Toleration
|
||||
from kubeflow_trainer_api.models.io_k8s_api_core_v1_volume import IoK8sApiCoreV1Volume
|
||||
@@ -34,6 +35,7 @@ class TrainerV1alpha1PodSpecOverride(BaseModel):
|
||||
""" # noqa: E501
|
||||
affinity: Optional[IoK8sApiCoreV1Affinity] = Field(default=None, description="Override for the Pod's affinity.")
|
||||
containers: Optional[List[TrainerV1alpha1ContainerOverride]] = Field(default=None, description="Overrides for the containers in the target job templates.")
|
||||
image_pull_secrets: Optional[List[IoK8sApiCoreV1LocalObjectReference]] = Field(default=None, description="ImagePullSecrets overrides the image pull secrets for the Pods in the target job templates.", alias="imagePullSecrets")
|
||||
init_containers: Optional[List[TrainerV1alpha1ContainerOverride]] = Field(default=None, description="Overrides for the init container in the target job templates.", alias="initContainers")
|
||||
node_selector: Optional[Dict[str, StrictStr]] = Field(default=None, description="Override for the node selector to place Pod on the specific node.", alias="nodeSelector")
|
||||
scheduling_gates: Optional[List[IoK8sApiCoreV1PodSchedulingGate]] = Field(default=None, 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/", alias="schedulingGates")
|
||||
@@ -41,7 +43,7 @@ class TrainerV1alpha1PodSpecOverride(BaseModel):
|
||||
target_jobs: List[TrainerV1alpha1PodSpecOverrideTargetJob] = Field(description="TrainJobs is the training job replicas in the training runtime template to apply the overrides.", alias="targetJobs")
|
||||
tolerations: Optional[List[IoK8sApiCoreV1Toleration]] = Field(default=None, description="Override for the Pod's tolerations.")
|
||||
volumes: Optional[List[IoK8sApiCoreV1Volume]] = Field(default=None, description="Overrides for the Pod volume configurations.")
|
||||
__properties: ClassVar[List[str]] = ["affinity", "containers", "initContainers", "nodeSelector", "schedulingGates", "serviceAccountName", "targetJobs", "tolerations", "volumes"]
|
||||
__properties: ClassVar[List[str]] = ["affinity", "containers", "imagePullSecrets", "initContainers", "nodeSelector", "schedulingGates", "serviceAccountName", "targetJobs", "tolerations", "volumes"]
|
||||
|
||||
model_config = ConfigDict(
|
||||
populate_by_name=True,
|
||||
@@ -92,6 +94,13 @@ class TrainerV1alpha1PodSpecOverride(BaseModel):
|
||||
if _item_containers:
|
||||
_items.append(_item_containers.to_dict())
|
||||
_dict['containers'] = _items
|
||||
# override the default output from pydantic by calling `to_dict()` of each item in image_pull_secrets (list)
|
||||
_items = []
|
||||
if self.image_pull_secrets:
|
||||
for _item_image_pull_secrets in self.image_pull_secrets:
|
||||
if _item_image_pull_secrets:
|
||||
_items.append(_item_image_pull_secrets.to_dict())
|
||||
_dict['imagePullSecrets'] = _items
|
||||
# override the default output from pydantic by calling `to_dict()` of each item in init_containers (list)
|
||||
_items = []
|
||||
if self.init_containers:
|
||||
@@ -141,6 +150,7 @@ class TrainerV1alpha1PodSpecOverride(BaseModel):
|
||||
_obj = cls.model_validate({
|
||||
"affinity": IoK8sApiCoreV1Affinity.from_dict(obj["affinity"]) if obj.get("affinity") is not None else None,
|
||||
"containers": [TrainerV1alpha1ContainerOverride.from_dict(_item) for _item in obj["containers"]] if obj.get("containers") is not None else None,
|
||||
"imagePullSecrets": [IoK8sApiCoreV1LocalObjectReference.from_dict(_item) for _item in obj["imagePullSecrets"]] if obj.get("imagePullSecrets") is not None else None,
|
||||
"initContainers": [TrainerV1alpha1ContainerOverride.from_dict(_item) for _item in obj["initContainers"]] if obj.get("initContainers") is not None else None,
|
||||
"nodeSelector": obj.get("nodeSelector"),
|
||||
"schedulingGates": [IoK8sApiCoreV1PodSchedulingGate.from_dict(_item) for _item in obj["schedulingGates"]] if obj.get("schedulingGates") is not None else None,
|
||||
|
||||
Reference in New Issue
Block a user