zenml-nightly 0.58.2.dev20240614__py3-none-any.whl → 0.58.2.dev20240622__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- zenml/VERSION +1 -1
- zenml/_hub/client.py +8 -5
- zenml/actions/base_action.py +8 -10
- zenml/artifact_stores/base_artifact_store.py +20 -15
- zenml/artifact_stores/local_artifact_store.py +3 -2
- zenml/artifacts/artifact_config.py +34 -19
- zenml/artifacts/external_artifact.py +18 -8
- zenml/artifacts/external_artifact_config.py +14 -6
- zenml/artifacts/unmaterialized_artifact.py +2 -11
- zenml/cli/__init__.py +6 -0
- zenml/cli/artifact.py +20 -2
- zenml/cli/base.py +2 -2
- zenml/cli/served_model.py +0 -1
- zenml/cli/server.py +3 -3
- zenml/cli/utils.py +36 -40
- zenml/cli/web_login.py +2 -2
- zenml/client.py +198 -24
- zenml/client_lazy_loader.py +20 -14
- zenml/config/base_settings.py +5 -6
- zenml/config/build_configuration.py +1 -1
- zenml/config/compiler.py +3 -3
- zenml/config/docker_settings.py +27 -28
- zenml/config/global_config.py +33 -37
- zenml/config/pipeline_configurations.py +8 -11
- zenml/config/pipeline_run_configuration.py +6 -2
- zenml/config/pipeline_spec.py +3 -4
- zenml/config/resource_settings.py +8 -9
- zenml/config/schedule.py +16 -20
- zenml/config/secret_reference_mixin.py +6 -3
- zenml/config/secrets_store_config.py +16 -23
- zenml/config/server_config.py +50 -46
- zenml/config/settings_resolver.py +1 -1
- zenml/config/source.py +45 -35
- zenml/config/step_configurations.py +53 -31
- zenml/config/step_run_info.py +3 -0
- zenml/config/store_config.py +20 -19
- zenml/config/strict_base_model.py +2 -6
- zenml/constants.py +26 -2
- zenml/container_registries/base_container_registry.py +3 -2
- zenml/container_registries/default_container_registry.py +3 -3
- zenml/event_hub/base_event_hub.py +1 -1
- zenml/event_sources/base_event_source.py +11 -16
- zenml/exceptions.py +4 -0
- zenml/integrations/airflow/__init__.py +2 -6
- zenml/integrations/airflow/flavors/airflow_orchestrator_flavor.py +6 -7
- zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +13 -249
- zenml/integrations/airflow/orchestrators/dag_generator.py +5 -3
- zenml/integrations/argilla/flavors/argilla_annotator_flavor.py +5 -4
- zenml/integrations/aws/__init__.py +1 -1
- zenml/integrations/aws/flavors/aws_container_registry_flavor.py +3 -2
- zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +11 -5
- zenml/integrations/aws/flavors/sagemaker_step_operator_flavor.py +6 -2
- zenml/integrations/aws/service_connectors/aws_service_connector.py +5 -4
- zenml/integrations/aws/step_operators/sagemaker_step_operator.py +1 -1
- zenml/integrations/azure/flavors/azureml_step_operator_flavor.py +4 -4
- zenml/integrations/azure/service_connectors/azure_service_connector.py +4 -3
- zenml/integrations/azure/step_operators/azureml_step_operator.py +2 -1
- zenml/integrations/bentoml/steps/bentoml_deployer.py +1 -1
- zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +8 -12
- zenml/integrations/comet/flavors/comet_experiment_tracker_flavor.py +1 -1
- zenml/integrations/constants.py +0 -1
- zenml/integrations/deepchecks/__init__.py +1 -0
- zenml/integrations/evidently/__init__.py +5 -3
- zenml/integrations/evidently/column_mapping.py +11 -3
- zenml/integrations/evidently/data_validators/evidently_data_validator.py +21 -3
- zenml/integrations/evidently/metrics.py +5 -6
- zenml/integrations/evidently/tests.py +5 -6
- zenml/integrations/facets/models.py +2 -6
- zenml/integrations/feast/__init__.py +3 -1
- zenml/integrations/feast/feature_stores/feast_feature_store.py +0 -23
- zenml/integrations/gcp/__init__.py +1 -1
- zenml/integrations/gcp/flavors/vertex_orchestrator_flavor.py +1 -1
- zenml/integrations/gcp/flavors/vertex_step_operator_flavor.py +1 -1
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +234 -103
- zenml/integrations/gcp/service_connectors/gcp_service_connector.py +57 -42
- zenml/integrations/gcp/step_operators/vertex_step_operator.py +1 -0
- zenml/integrations/github/code_repositories/github_code_repository.py +1 -1
- zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +9 -13
- zenml/integrations/great_expectations/__init__.py +1 -1
- zenml/integrations/great_expectations/data_validators/ge_data_validator.py +44 -44
- zenml/integrations/great_expectations/flavors/great_expectations_data_validator_flavor.py +35 -2
- zenml/integrations/great_expectations/ge_store_backend.py +24 -11
- zenml/integrations/great_expectations/materializers/ge_materializer.py +3 -3
- zenml/integrations/great_expectations/utils.py +5 -5
- zenml/integrations/huggingface/__init__.py +3 -0
- zenml/integrations/huggingface/flavors/huggingface_model_deployer_flavor.py +1 -1
- zenml/integrations/huggingface/steps/__init__.py +3 -0
- zenml/integrations/huggingface/steps/accelerate_runner.py +149 -0
- zenml/integrations/huggingface/steps/huggingface_deployer.py +2 -2
- zenml/integrations/hyperai/flavors/hyperai_orchestrator_flavor.py +1 -1
- zenml/integrations/hyperai/service_connectors/hyperai_service_connector.py +4 -3
- zenml/integrations/kubeflow/__init__.py +1 -1
- zenml/integrations/kubeflow/flavors/kubeflow_orchestrator_flavor.py +48 -81
- zenml/integrations/kubeflow/orchestrators/kubeflow_orchestrator.py +295 -245
- zenml/integrations/kubernetes/flavors/kubernetes_orchestrator_flavor.py +1 -1
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +11 -2
- zenml/integrations/kubernetes/pod_settings.py +17 -31
- zenml/integrations/kubernetes/service_connectors/kubernetes_service_connector.py +8 -7
- zenml/integrations/label_studio/__init__.py +1 -3
- zenml/integrations/label_studio/annotators/label_studio_annotator.py +3 -4
- zenml/integrations/label_studio/flavors/label_studio_annotator_flavor.py +2 -2
- zenml/integrations/langchain/__init__.py +5 -1
- zenml/integrations/langchain/materializers/document_materializer.py +44 -8
- zenml/integrations/mlflow/__init__.py +9 -3
- zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +1 -1
- zenml/integrations/mlflow/flavors/mlflow_experiment_tracker_flavor.py +29 -37
- zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +4 -4
- zenml/integrations/mlflow/steps/mlflow_deployer.py +1 -1
- zenml/integrations/neptune/flavors/neptune_experiment_tracker_flavor.py +1 -1
- zenml/integrations/neural_prophet/__init__.py +5 -1
- zenml/integrations/pigeon/flavors/pigeon_annotator_flavor.py +1 -1
- zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +9 -8
- zenml/integrations/seldon/seldon_client.py +52 -67
- zenml/integrations/seldon/services/seldon_deployment.py +3 -3
- zenml/integrations/seldon/steps/seldon_deployer.py +4 -4
- zenml/integrations/skypilot/flavors/skypilot_orchestrator_base_vm_config.py +15 -5
- zenml/integrations/skypilot_aws/__init__.py +1 -1
- zenml/integrations/skypilot_aws/flavors/skypilot_orchestrator_aws_vm_flavor.py +1 -1
- zenml/integrations/skypilot_azure/__init__.py +1 -1
- zenml/integrations/skypilot_azure/flavors/skypilot_orchestrator_azure_vm_flavor.py +1 -1
- zenml/integrations/skypilot_gcp/__init__.py +2 -1
- zenml/integrations/skypilot_gcp/flavors/skypilot_orchestrator_gcp_vm_flavor.py +1 -1
- zenml/integrations/skypilot_lambda/flavors/skypilot_orchestrator_lambda_vm_flavor.py +2 -2
- zenml/integrations/spark/flavors/spark_step_operator_flavor.py +1 -1
- zenml/integrations/spark/step_operators/spark_step_operator.py +2 -0
- zenml/integrations/tekton/__init__.py +1 -1
- zenml/integrations/tekton/flavors/tekton_orchestrator_flavor.py +66 -23
- zenml/integrations/tekton/orchestrators/tekton_orchestrator.py +547 -233
- zenml/integrations/tensorboard/__init__.py +1 -12
- zenml/integrations/tensorboard/services/tensorboard_service.py +3 -5
- zenml/integrations/tensorboard/visualizers/tensorboard_visualizer.py +6 -6
- zenml/integrations/tensorflow/__init__.py +2 -10
- zenml/integrations/tensorflow/materializers/keras_materializer.py +17 -9
- zenml/integrations/wandb/flavors/wandb_experiment_tracker_flavor.py +9 -14
- zenml/integrations/whylogs/flavors/whylogs_data_validator_flavor.py +1 -1
- zenml/lineage_graph/lineage_graph.py +1 -1
- zenml/logging/step_logging.py +15 -7
- zenml/materializers/built_in_materializer.py +3 -3
- zenml/materializers/pydantic_materializer.py +2 -2
- zenml/metadata/lazy_load.py +4 -4
- zenml/metadata/metadata_types.py +64 -4
- zenml/model/model.py +79 -54
- zenml/model_deployers/base_model_deployer.py +14 -12
- zenml/model_registries/base_model_registry.py +17 -15
- zenml/models/__init__.py +79 -206
- zenml/models/v2/base/base.py +54 -41
- zenml/models/v2/base/base_plugin_flavor.py +2 -6
- zenml/models/v2/base/filter.py +91 -76
- zenml/models/v2/base/page.py +2 -12
- zenml/models/v2/base/scoped.py +4 -7
- zenml/models/v2/core/api_key.py +22 -8
- zenml/models/v2/core/artifact.py +2 -2
- zenml/models/v2/core/artifact_version.py +74 -40
- zenml/models/v2/core/code_repository.py +37 -10
- zenml/models/v2/core/component.py +65 -16
- zenml/models/v2/core/device.py +14 -4
- zenml/models/v2/core/event_source.py +1 -2
- zenml/models/v2/core/flavor.py +74 -8
- zenml/models/v2/core/logs.py +68 -8
- zenml/models/v2/core/model.py +8 -4
- zenml/models/v2/core/model_version.py +25 -6
- zenml/models/v2/core/model_version_artifact.py +51 -21
- zenml/models/v2/core/model_version_pipeline_run.py +45 -13
- zenml/models/v2/core/pipeline.py +37 -72
- zenml/models/v2/core/pipeline_build.py +29 -17
- zenml/models/v2/core/pipeline_deployment.py +18 -6
- zenml/models/v2/core/pipeline_namespace.py +113 -0
- zenml/models/v2/core/pipeline_run.py +50 -22
- zenml/models/v2/core/run_metadata.py +59 -36
- zenml/models/v2/core/schedule.py +37 -24
- zenml/models/v2/core/secret.py +31 -12
- zenml/models/v2/core/service.py +64 -36
- zenml/models/v2/core/service_account.py +24 -11
- zenml/models/v2/core/service_connector.py +219 -44
- zenml/models/v2/core/stack.py +45 -17
- zenml/models/v2/core/step_run.py +28 -8
- zenml/models/v2/core/tag.py +8 -4
- zenml/models/v2/core/trigger.py +2 -2
- zenml/models/v2/core/trigger_execution.py +1 -0
- zenml/models/v2/core/user.py +18 -21
- zenml/models/v2/core/workspace.py +13 -3
- zenml/models/v2/misc/build_item.py +3 -3
- zenml/models/v2/misc/external_user.py +2 -6
- zenml/models/v2/misc/hub_plugin_models.py +9 -9
- zenml/models/v2/misc/loaded_visualization.py +2 -2
- zenml/models/v2/misc/service_connector_type.py +8 -17
- zenml/models/v2/misc/user_auth.py +7 -2
- zenml/new/pipelines/build_utils.py +3 -3
- zenml/new/pipelines/pipeline.py +17 -13
- zenml/new/pipelines/run_utils.py +103 -1
- zenml/orchestrators/base_orchestrator.py +10 -7
- zenml/orchestrators/local_docker/local_docker_orchestrator.py +1 -1
- zenml/orchestrators/step_launcher.py +28 -4
- zenml/orchestrators/step_runner.py +3 -6
- zenml/orchestrators/utils.py +1 -1
- zenml/plugins/base_plugin_flavor.py +6 -10
- zenml/plugins/plugin_flavor_registry.py +3 -7
- zenml/secret/base_secret.py +7 -8
- zenml/service_connectors/docker_service_connector.py +4 -3
- zenml/service_connectors/service_connector.py +5 -12
- zenml/service_connectors/service_connector_registry.py +2 -4
- zenml/services/container/container_service.py +1 -1
- zenml/services/container/container_service_endpoint.py +1 -1
- zenml/services/local/local_service.py +1 -1
- zenml/services/local/local_service_endpoint.py +1 -1
- zenml/services/service.py +16 -10
- zenml/services/service_type.py +4 -5
- zenml/services/terraform/terraform_service.py +1 -1
- zenml/stack/flavor.py +2 -6
- zenml/stack/flavor_registry.py +4 -4
- zenml/stack/stack.py +4 -1
- zenml/stack/stack_component.py +55 -31
- zenml/step_operators/step_operator_entrypoint_configuration.py +1 -0
- zenml/steps/base_step.py +34 -28
- zenml/steps/entrypoint_function_utils.py +3 -5
- zenml/steps/utils.py +12 -14
- zenml/utils/cuda_utils.py +50 -0
- zenml/utils/deprecation_utils.py +18 -20
- zenml/utils/dict_utils.py +1 -1
- zenml/utils/filesync_model.py +65 -28
- zenml/utils/function_utils.py +260 -0
- zenml/utils/json_utils.py +131 -0
- zenml/utils/mlstacks_utils.py +2 -2
- zenml/utils/package_utils.py +1 -1
- zenml/utils/pipeline_docker_image_builder.py +9 -0
- zenml/utils/pydantic_utils.py +270 -62
- zenml/utils/secret_utils.py +65 -12
- zenml/utils/source_utils.py +2 -2
- zenml/utils/typed_model.py +5 -3
- zenml/utils/typing_utils.py +243 -0
- zenml/utils/yaml_utils.py +1 -1
- zenml/zen_server/auth.py +2 -2
- zenml/zen_server/cloud_utils.py +6 -6
- zenml/zen_server/deploy/base_provider.py +1 -1
- zenml/zen_server/deploy/deployment.py +6 -8
- zenml/zen_server/deploy/docker/docker_zen_server.py +3 -4
- zenml/zen_server/deploy/local/local_provider.py +0 -1
- zenml/zen_server/deploy/local/local_zen_server.py +6 -6
- zenml/zen_server/deploy/terraform/terraform_zen_server.py +4 -6
- zenml/zen_server/exceptions.py +4 -1
- zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
- zenml/zen_server/pipeline_deployment/utils.py +48 -68
- zenml/zen_server/rbac/models.py +2 -5
- zenml/zen_server/rbac/utils.py +11 -14
- zenml/zen_server/routers/auth_endpoints.py +2 -2
- zenml/zen_server/routers/pipeline_builds_endpoints.py +1 -1
- zenml/zen_server/routers/runs_endpoints.py +1 -1
- zenml/zen_server/routers/secrets_endpoints.py +3 -2
- zenml/zen_server/routers/server_endpoints.py +1 -1
- zenml/zen_server/routers/steps_endpoints.py +1 -1
- zenml/zen_server/routers/workspaces_endpoints.py +1 -1
- zenml/zen_stores/base_zen_store.py +46 -9
- zenml/zen_stores/migrations/utils.py +42 -46
- zenml/zen_stores/migrations/versions/0701da9951a0_added_service_table.py +1 -1
- zenml/zen_stores/migrations/versions/1041bc644e0d_remove_secrets_manager.py +5 -3
- zenml/zen_stores/migrations/versions/10a907dad202_delete_mlmd_tables.py +1 -1
- zenml/zen_stores/migrations/versions/26b776ad583e_redesign_artifacts.py +8 -10
- zenml/zen_stores/migrations/versions/37835ce041d2_optimizing_database.py +3 -3
- zenml/zen_stores/migrations/versions/46506f72f0ed_add_server_settings.py +10 -12
- zenml/zen_stores/migrations/versions/5994f9ad0489_introduce_role_permissions.py +3 -2
- zenml/zen_stores/migrations/versions/6917bce75069_add_pipeline_run_unique_constraint.py +4 -4
- zenml/zen_stores/migrations/versions/728c6369cfaa_add_name_column_to_input_artifact_pk.py +3 -2
- zenml/zen_stores/migrations/versions/743ec82b1b3c_update_size_of_build_images.py +2 -2
- zenml/zen_stores/migrations/versions/7500f434b71c_remove_shared_columns.py +3 -2
- zenml/zen_stores/migrations/versions/7834208cc3f6_artifact_project_scoping.py +8 -7
- zenml/zen_stores/migrations/versions/7b651bf6822e_track_secrets_in_db.py +6 -4
- zenml/zen_stores/migrations/versions/7e4a481d17f7_add_identity_table.py +2 -2
- zenml/zen_stores/migrations/versions/7f603e583dd7_fixed_migration.py +1 -1
- zenml/zen_stores/migrations/versions/a39c4184c8ce_remove_secrets_manager_flavors.py +2 -2
- zenml/zen_stores/migrations/versions/a91762e6be36_artifact_version_table.py +4 -4
- zenml/zen_stores/migrations/versions/alembic_start.py +1 -1
- zenml/zen_stores/migrations/versions/fbd7f18ced1e_increase_step_run_field_lengths.py +4 -4
- zenml/zen_stores/rest_zen_store.py +109 -49
- zenml/zen_stores/schemas/api_key_schemas.py +1 -1
- zenml/zen_stores/schemas/artifact_schemas.py +8 -8
- zenml/zen_stores/schemas/artifact_visualization_schemas.py +3 -3
- zenml/zen_stores/schemas/code_repository_schemas.py +1 -1
- zenml/zen_stores/schemas/component_schemas.py +8 -3
- zenml/zen_stores/schemas/device_schemas.py +8 -6
- zenml/zen_stores/schemas/event_source_schemas.py +3 -4
- zenml/zen_stores/schemas/flavor_schemas.py +5 -3
- zenml/zen_stores/schemas/model_schemas.py +26 -1
- zenml/zen_stores/schemas/pipeline_build_schemas.py +1 -1
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +4 -4
- zenml/zen_stores/schemas/pipeline_run_schemas.py +6 -6
- zenml/zen_stores/schemas/pipeline_schemas.py +5 -2
- zenml/zen_stores/schemas/run_metadata_schemas.py +2 -2
- zenml/zen_stores/schemas/secret_schemas.py +8 -5
- zenml/zen_stores/schemas/server_settings_schemas.py +3 -1
- zenml/zen_stores/schemas/service_connector_schemas.py +1 -1
- zenml/zen_stores/schemas/service_schemas.py +11 -2
- zenml/zen_stores/schemas/stack_schemas.py +1 -1
- zenml/zen_stores/schemas/step_run_schemas.py +11 -11
- zenml/zen_stores/schemas/tag_schemas.py +6 -2
- zenml/zen_stores/schemas/trigger_schemas.py +2 -2
- zenml/zen_stores/schemas/user_schemas.py +2 -2
- zenml/zen_stores/schemas/workspace_schemas.py +3 -1
- zenml/zen_stores/secrets_stores/aws_secrets_store.py +19 -20
- zenml/zen_stores/secrets_stores/azure_secrets_store.py +17 -20
- zenml/zen_stores/secrets_stores/base_secrets_store.py +79 -12
- zenml/zen_stores/secrets_stores/gcp_secrets_store.py +17 -20
- zenml/zen_stores/secrets_stores/hashicorp_secrets_store.py +4 -8
- zenml/zen_stores/secrets_stores/service_connector_secrets_store.py +10 -7
- zenml/zen_stores/secrets_stores/sql_secrets_store.py +5 -6
- zenml/zen_stores/sql_zen_store.py +196 -120
- zenml/zen_stores/zen_store_interface.py +33 -0
- {zenml_nightly-0.58.2.dev20240614.dist-info → zenml_nightly-0.58.2.dev20240622.dist-info}/METADATA +9 -7
- {zenml_nightly-0.58.2.dev20240614.dist-info → zenml_nightly-0.58.2.dev20240622.dist-info}/RECORD +311 -308
- zenml/integrations/kubeflow/utils.py +0 -95
- zenml/models/v2/base/internal.py +0 -37
- zenml/models/v2/base/update.py +0 -44
- {zenml_nightly-0.58.2.dev20240614.dist-info → zenml_nightly-0.58.2.dev20240622.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.58.2.dev20240614.dist-info → zenml_nightly-0.58.2.dev20240622.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.58.2.dev20240614.dist-info → zenml_nightly-0.58.2.dev20240622.dist-info}/entry_points.txt +0 -0
@@ -17,11 +17,11 @@ import base64
|
|
17
17
|
import json
|
18
18
|
import re
|
19
19
|
import time
|
20
|
-
from typing import Any, Dict, Generator, List, Optional
|
20
|
+
from typing import Any, Dict, Generator, List, Literal, Optional
|
21
21
|
|
22
22
|
from kubernetes import client as k8s_client
|
23
23
|
from kubernetes import config as k8s_config
|
24
|
-
from pydantic import BaseModel, Field, ValidationError
|
24
|
+
from pydantic import BaseModel, ConfigDict, Field, ValidationError
|
25
25
|
|
26
26
|
from zenml.logger import get_logger
|
27
27
|
from zenml.utils.enum_utils import StrEnum
|
@@ -30,9 +30,6 @@ logger = get_logger(__name__)
|
|
30
30
|
|
31
31
|
api = k8s_client.ApiClient()
|
32
32
|
|
33
|
-
SELDON_DEPLOYMENT_KIND = "SeldonDeployment"
|
34
|
-
SELDON_DEPLOYMENT_API_VERSION = "machinelearning.seldon.io/v1"
|
35
|
-
|
36
33
|
|
37
34
|
class SeldonDeploymentPredictorParameter(BaseModel):
|
38
35
|
"""Parameter for Seldon Deployment predictor.
|
@@ -46,14 +43,12 @@ class SeldonDeploymentPredictorParameter(BaseModel):
|
|
46
43
|
name: str = ""
|
47
44
|
type: str = ""
|
48
45
|
value: str = ""
|
49
|
-
|
50
|
-
class Config:
|
51
|
-
"""Pydantic configuration class."""
|
52
|
-
|
46
|
+
model_config = ConfigDict(
|
53
47
|
# validate attribute assignments
|
54
|
-
validate_assignment
|
48
|
+
validate_assignment=True,
|
55
49
|
# Ignore extra attributes from the CRD that are not reflected here
|
56
|
-
extra
|
50
|
+
extra="ignore",
|
51
|
+
)
|
57
52
|
|
58
53
|
|
59
54
|
class SeldonResourceRequirements(BaseModel):
|
@@ -82,14 +77,12 @@ class SeldonDeploymentMetadata(BaseModel):
|
|
82
77
|
labels: Dict[str, str] = Field(default_factory=dict)
|
83
78
|
annotations: Dict[str, str] = Field(default_factory=dict)
|
84
79
|
creationTimestamp: Optional[str] = None
|
85
|
-
|
86
|
-
class Config:
|
87
|
-
"""Pydantic configuration class."""
|
88
|
-
|
80
|
+
model_config = ConfigDict(
|
89
81
|
# validate attribute assignments
|
90
|
-
validate_assignment
|
82
|
+
validate_assignment=True,
|
91
83
|
# Ignore extra attributes from the CRD that are not reflected here
|
92
|
-
extra
|
84
|
+
extra="ignore",
|
85
|
+
)
|
93
86
|
|
94
87
|
|
95
88
|
class SeldonDeploymentPredictiveUnitType(StrEnum):
|
@@ -130,14 +123,12 @@ class SeldonDeploymentPredictiveUnit(BaseModel):
|
|
130
123
|
serviceAccountName: Optional[str] = None
|
131
124
|
envSecretRefName: Optional[str] = None
|
132
125
|
children: Optional[List["SeldonDeploymentPredictiveUnit"]] = None
|
133
|
-
|
134
|
-
class Config:
|
135
|
-
"""Pydantic configuration class."""
|
136
|
-
|
126
|
+
model_config = ConfigDict(
|
137
127
|
# validate attribute assignments
|
138
|
-
validate_assignment
|
128
|
+
validate_assignment=True,
|
139
129
|
# Ignore extra attributes from the CRD that are not reflected here
|
140
|
-
extra
|
130
|
+
extra="ignore",
|
131
|
+
)
|
141
132
|
|
142
133
|
|
143
134
|
class SeldonDeploymentComponentSpecs(BaseModel):
|
@@ -147,16 +138,13 @@ class SeldonDeploymentComponentSpecs(BaseModel):
|
|
147
138
|
spec: the component spec.
|
148
139
|
"""
|
149
140
|
|
150
|
-
spec: Optional[Dict[str, Any]]
|
151
|
-
|
152
|
-
|
153
|
-
class Config:
|
154
|
-
"""Pydantic configuration class."""
|
155
|
-
|
141
|
+
spec: Optional[Dict[str, Any]] = None
|
142
|
+
model_config = ConfigDict(
|
156
143
|
# validate attribute assignments
|
157
|
-
validate_assignment
|
144
|
+
validate_assignment=True,
|
158
145
|
# Ignore extra attributes from the CRD that are not reflected here
|
159
|
-
extra
|
146
|
+
extra="ignore",
|
147
|
+
)
|
160
148
|
|
161
149
|
|
162
150
|
class SeldonDeploymentPredictor(BaseModel):
|
@@ -175,14 +163,12 @@ class SeldonDeploymentPredictor(BaseModel):
|
|
175
163
|
default_factory=SeldonResourceRequirements
|
176
164
|
)
|
177
165
|
componentSpecs: Optional[List[SeldonDeploymentComponentSpecs]] = None
|
178
|
-
|
179
|
-
class Config:
|
180
|
-
"""Pydantic configuration class."""
|
181
|
-
|
166
|
+
model_config = ConfigDict(
|
182
167
|
# validate attribute assignments
|
183
|
-
validate_assignment
|
168
|
+
validate_assignment=True,
|
184
169
|
# Ignore extra attributes from the CRD that are not reflected here
|
185
|
-
extra
|
170
|
+
extra="ignore",
|
171
|
+
)
|
186
172
|
|
187
173
|
|
188
174
|
class SeldonDeploymentSpec(BaseModel):
|
@@ -196,17 +182,15 @@ class SeldonDeploymentSpec(BaseModel):
|
|
196
182
|
"""
|
197
183
|
|
198
184
|
name: str
|
199
|
-
protocol: Optional[str]
|
185
|
+
protocol: Optional[str] = None
|
200
186
|
predictors: List[SeldonDeploymentPredictor]
|
201
187
|
replicas: int = 1
|
202
|
-
|
203
|
-
class Config:
|
204
|
-
"""Pydantic configuration class."""
|
205
|
-
|
188
|
+
model_config = ConfigDict(
|
206
189
|
# validate attribute assignments
|
207
|
-
validate_assignment
|
190
|
+
validate_assignment=True,
|
208
191
|
# Ignore extra attributes from the CRD that are not reflected here
|
209
|
-
extra
|
192
|
+
extra="ignore",
|
193
|
+
)
|
210
194
|
|
211
195
|
|
212
196
|
class SeldonDeploymentStatusState(StrEnum):
|
@@ -242,8 +226,8 @@ class SeldonDeploymentStatusCondition(BaseModel):
|
|
242
226
|
|
243
227
|
type: str
|
244
228
|
status: bool
|
245
|
-
reason: Optional[str]
|
246
|
-
message: Optional[str]
|
229
|
+
reason: Optional[str] = None
|
230
|
+
message: Optional[str] = None
|
247
231
|
|
248
232
|
|
249
233
|
class SeldonDeploymentStatus(BaseModel):
|
@@ -258,18 +242,16 @@ class SeldonDeploymentStatus(BaseModel):
|
|
258
242
|
"""
|
259
243
|
|
260
244
|
state: SeldonDeploymentStatusState = SeldonDeploymentStatusState.UNKNOWN
|
261
|
-
description: Optional[str]
|
262
|
-
replicas: Optional[int]
|
263
|
-
address: Optional[SeldonDeploymentStatusAddress]
|
245
|
+
description: Optional[str] = None
|
246
|
+
replicas: Optional[int] = None
|
247
|
+
address: Optional[SeldonDeploymentStatusAddress] = None
|
264
248
|
conditions: List[SeldonDeploymentStatusCondition]
|
265
|
-
|
266
|
-
class Config:
|
267
|
-
"""Pydantic configuration class."""
|
268
|
-
|
249
|
+
model_config = ConfigDict(
|
269
250
|
# validate attribute assignments
|
270
|
-
validate_assignment
|
251
|
+
validate_assignment=True,
|
271
252
|
# Ignore extra attributes from the CRD that are not reflected here
|
272
|
-
extra
|
253
|
+
extra="ignore",
|
254
|
+
)
|
273
255
|
|
274
256
|
|
275
257
|
class SeldonDeployment(BaseModel):
|
@@ -292,8 +274,10 @@ class SeldonDeployment(BaseModel):
|
|
292
274
|
status: Seldon Deployment status.
|
293
275
|
"""
|
294
276
|
|
295
|
-
kind:
|
296
|
-
apiVersion:
|
277
|
+
kind: Literal["SeldonDeployment"] = "SeldonDeployment"
|
278
|
+
apiVersion: Literal["machinelearning.seldon.io/v1"] = (
|
279
|
+
"machinelearning.seldon.io/v1"
|
280
|
+
)
|
297
281
|
metadata: SeldonDeploymentMetadata
|
298
282
|
spec: SeldonDeploymentSpec
|
299
283
|
status: Optional[SeldonDeploymentStatus] = None
|
@@ -304,7 +288,7 @@ class SeldonDeployment(BaseModel):
|
|
304
288
|
Returns:
|
305
289
|
A string representation of the Seldon Deployment.
|
306
290
|
"""
|
307
|
-
return json.dumps(self.
|
291
|
+
return json.dumps(self.model_dump(exclude_none=True), indent=4)
|
308
292
|
|
309
293
|
@classmethod
|
310
294
|
def build(
|
@@ -339,8 +323,10 @@ class SeldonDeployment(BaseModel):
|
|
339
323
|
annotations: A dictionary of annotations to apply to the Seldon
|
340
324
|
Deployment.
|
341
325
|
spec: A Kubernetes pod spec to use for the Seldon Deployment.
|
342
|
-
is_custom_deployment: Whether the Seldon Deployment is a custom
|
343
|
-
|
326
|
+
is_custom_deployment: Whether the Seldon Deployment is a custom
|
327
|
+
or a built-in one.
|
328
|
+
serviceAccountName: The name of the service account to associate
|
329
|
+
with the predictive unit container.
|
344
330
|
|
345
331
|
Returns:
|
346
332
|
A minimal SeldonDeployment object built from the provided
|
@@ -495,13 +481,12 @@ class SeldonDeployment(BaseModel):
|
|
495
481
|
return None
|
496
482
|
return ready_condition_message[0]
|
497
483
|
|
498
|
-
|
499
|
-
"""Pydantic configuration class."""
|
500
|
-
|
484
|
+
model_config = ConfigDict(
|
501
485
|
# validate attribute assignments
|
502
|
-
validate_assignment
|
486
|
+
validate_assignment=True,
|
503
487
|
# Ignore extra attributes from the CRD that are not reflected here
|
504
|
-
extra
|
488
|
+
extra="ignore",
|
489
|
+
)
|
505
490
|
|
506
491
|
|
507
492
|
class SeldonClientError(Exception):
|
@@ -651,7 +636,7 @@ class SeldonClient:
|
|
651
636
|
# are not
|
652
637
|
deployment.mark_as_managed_by_zenml()
|
653
638
|
|
654
|
-
body_deploy = deployment.
|
639
|
+
body_deploy = deployment.model_dump(exclude_none=True)
|
655
640
|
response = (
|
656
641
|
self._custom_objects_api.create_namespaced_custom_object(
|
657
642
|
group="machinelearning.seldon.io",
|
@@ -788,7 +773,7 @@ class SeldonClient:
|
|
788
773
|
namespace=self._namespace,
|
789
774
|
plural="seldondeployments",
|
790
775
|
name=deployment.name,
|
791
|
-
body=deployment.
|
776
|
+
body=deployment.model_dump(exclude_none=True),
|
792
777
|
_request_timeout=poll_timeout or None,
|
793
778
|
)
|
794
779
|
logger.debug("Seldon Core API response: %s", response)
|
@@ -113,7 +113,7 @@ class SeldonDeploymentConfig(ServiceConfig):
|
|
113
113
|
The annotations for the Seldon Core deployment.
|
114
114
|
"""
|
115
115
|
annotations = {
|
116
|
-
"zenml.service_config": self.
|
116
|
+
"zenml.service_config": self.model_dump_json(),
|
117
117
|
"zenml.version": __version__,
|
118
118
|
}
|
119
119
|
return annotations
|
@@ -133,7 +133,7 @@ class SeldonDeploymentConfig(ServiceConfig):
|
|
133
133
|
|
134
134
|
Raises:
|
135
135
|
ValueError: if the given deployment resource does not contain
|
136
|
-
the expected annotations or it contains an invalid or
|
136
|
+
the expected annotations, or it contains an invalid or
|
137
137
|
incompatible Seldon Core service configuration.
|
138
138
|
"""
|
139
139
|
config_data = deployment.metadata.annotations.get(
|
@@ -145,7 +145,7 @@ class SeldonDeploymentConfig(ServiceConfig):
|
|
145
145
|
f"'zenml.service_config' annotation: {deployment}"
|
146
146
|
)
|
147
147
|
try:
|
148
|
-
service_config = cls.
|
148
|
+
service_config = cls.model_validate_json(config_data)
|
149
149
|
except ValidationError as e:
|
150
150
|
raise ValueError(
|
151
151
|
f"The loaded Seldon Core deployment resource contains an "
|
@@ -76,7 +76,7 @@ def seldon_model_deployer_step(
|
|
76
76
|
step_name = context.step_run.name
|
77
77
|
|
78
78
|
# update the step configuration with the real pipeline runtime information
|
79
|
-
service_config = service_config.
|
79
|
+
service_config = service_config.model_copy()
|
80
80
|
service_config.pipeline_name = pipeline_name
|
81
81
|
service_config.pipeline_step_name = step_name
|
82
82
|
|
@@ -141,7 +141,7 @@ def seldon_model_deployer_step(
|
|
141
141
|
# fetch existing services with same pipeline name, step name and
|
142
142
|
# model name
|
143
143
|
existing_services = model_deployer.find_model_server(
|
144
|
-
config=service_config.
|
144
|
+
config=service_config.model_dump()
|
145
145
|
)
|
146
146
|
|
147
147
|
# even when the deploy decision is negative, if an existing model server
|
@@ -240,7 +240,7 @@ def seldon_custom_model_deployer_step(
|
|
240
240
|
# fetch existing services with the same pipeline name, step name and
|
241
241
|
# model name
|
242
242
|
existing_services = model_deployer.find_model_server(
|
243
|
-
config=service_config.
|
243
|
+
config=service_config.model_dump()
|
244
244
|
)
|
245
245
|
# even when the deploy decision is negative if an existing model server
|
246
246
|
# is not running for this pipeline/step, we still have to serve the
|
@@ -305,7 +305,7 @@ def seldon_custom_model_deployer_step(
|
|
305
305
|
)
|
306
306
|
|
307
307
|
# prepare the service configuration for the deployment
|
308
|
-
service_config = service_config.
|
308
|
+
service_config = service_config.model_copy()
|
309
309
|
service_config.model_uri = served_model_uri
|
310
310
|
|
311
311
|
# create the specification for the custom deployment
|
@@ -15,6 +15,8 @@
|
|
15
15
|
|
16
16
|
from typing import Dict, List, Literal, Optional, Union
|
17
17
|
|
18
|
+
from pydantic import Field
|
19
|
+
|
18
20
|
from zenml.config.base_settings import BaseSettings
|
19
21
|
from zenml.logger import get_logger
|
20
22
|
from zenml.orchestrators import BaseOrchestratorConfig
|
@@ -90,15 +92,23 @@ class SkypilotBaseOrchestratorSettings(BaseSettings):
|
|
90
92
|
|
91
93
|
# Resources
|
92
94
|
instance_type: Optional[str] = None
|
93
|
-
cpus: Union[None, int, float, str] =
|
94
|
-
|
95
|
-
|
95
|
+
cpus: Union[None, int, float, str] = Field(
|
96
|
+
default=None, union_mode="left_to_right"
|
97
|
+
)
|
98
|
+
memory: Union[None, int, float, str] = Field(
|
99
|
+
default=None, union_mode="left_to_right"
|
100
|
+
)
|
101
|
+
accelerators: Union[None, str, Dict[str, int]] = Field(
|
102
|
+
default=None, union_mode="left_to_right"
|
103
|
+
)
|
96
104
|
accelerator_args: Optional[Dict[str, str]] = None
|
97
105
|
use_spot: Optional[bool] = None
|
98
106
|
spot_recovery: Optional[str] = None
|
99
107
|
region: Optional[str] = None
|
100
108
|
zone: Optional[str] = None
|
101
|
-
image_id: Union[Dict[str, str], str, None] =
|
109
|
+
image_id: Union[Dict[str, str], str, None] = Field(
|
110
|
+
default=None, union_mode="left_to_right"
|
111
|
+
)
|
102
112
|
disk_size: Optional[int] = None
|
103
113
|
disk_tier: Optional[Literal["high", "medium", "low"]] = None
|
104
114
|
|
@@ -112,7 +122,7 @@ class SkypilotBaseOrchestratorSettings(BaseSettings):
|
|
112
122
|
docker_run_args: List[str] = []
|
113
123
|
|
114
124
|
|
115
|
-
class SkypilotBaseOrchestratorConfig(
|
125
|
+
class SkypilotBaseOrchestratorConfig(
|
116
126
|
BaseOrchestratorConfig, SkypilotBaseOrchestratorSettings
|
117
127
|
):
|
118
128
|
"""Skypilot orchestrator base config.
|
@@ -32,7 +32,7 @@ class SkypilotAWSIntegration(Integration):
|
|
32
32
|
|
33
33
|
NAME = SKYPILOT_AWS
|
34
34
|
REQUIREMENTS = ["skypilot[aws]<=0.5.0"]
|
35
|
-
APT_PACKAGES = ["openssh-client","rsync"]
|
35
|
+
APT_PACKAGES = ["openssh-client", "rsync"]
|
36
36
|
|
37
37
|
@classmethod
|
38
38
|
def flavors(cls) -> List[Type[Flavor]]:
|
@@ -37,7 +37,7 @@ class SkypilotAWSOrchestratorSettings(SkypilotBaseOrchestratorSettings):
|
|
37
37
|
"""Skypilot orchestrator settings."""
|
38
38
|
|
39
39
|
|
40
|
-
class SkypilotAWSOrchestratorConfig(
|
40
|
+
class SkypilotAWSOrchestratorConfig(
|
41
41
|
SkypilotBaseOrchestratorConfig, SkypilotAWSOrchestratorSettings
|
42
42
|
):
|
43
43
|
"""Skypilot orchestrator config."""
|
@@ -34,7 +34,7 @@ class SkypilotAzureIntegration(Integration):
|
|
34
34
|
|
35
35
|
NAME = SKYPILOT_AZURE
|
36
36
|
REQUIREMENTS = ["skypilot[azure]<=0.5.0"]
|
37
|
-
APT_PACKAGES = ["openssh-client","rsync"]
|
37
|
+
APT_PACKAGES = ["openssh-client", "rsync"]
|
38
38
|
|
39
39
|
@classmethod
|
40
40
|
def flavors(cls) -> List[Type[Flavor]]:
|
@@ -39,7 +39,7 @@ class SkypilotAzureOrchestratorSettings(SkypilotBaseOrchestratorSettings):
|
|
39
39
|
"""Skypilot orchestrator settings for Azure."""
|
40
40
|
|
41
41
|
|
42
|
-
class SkypilotAzureOrchestratorConfig(
|
42
|
+
class SkypilotAzureOrchestratorConfig(
|
43
43
|
SkypilotBaseOrchestratorConfig, SkypilotAzureOrchestratorSettings
|
44
44
|
):
|
45
45
|
"""Skypilot orchestrator config for Azure."""
|
@@ -26,12 +26,13 @@ from zenml.stack import Flavor
|
|
26
26
|
|
27
27
|
SKYPILOT_GCP_ORCHESTRATOR_FLAVOR = "vm_gcp"
|
28
28
|
|
29
|
+
|
29
30
|
class SkypilotGCPIntegration(Integration):
|
30
31
|
"""Definition of Skypilot (GCP) Integration for ZenML."""
|
31
32
|
|
32
33
|
NAME = SKYPILOT_GCP
|
33
34
|
REQUIREMENTS = ["skypilot[gcp]<=0.5.0"]
|
34
|
-
APT_PACKAGES = ["openssh-client","rsync"]
|
35
|
+
APT_PACKAGES = ["openssh-client", "rsync"]
|
35
36
|
|
36
37
|
@classmethod
|
37
38
|
def flavors(cls) -> List[Type[Flavor]]:
|
@@ -40,7 +40,7 @@ class SkypilotGCPOrchestratorSettings(SkypilotBaseOrchestratorSettings):
|
|
40
40
|
"""Skypilot orchestrator settings for GCP."""
|
41
41
|
|
42
42
|
|
43
|
-
class SkypilotGCPOrchestratorConfig(
|
43
|
+
class SkypilotGCPOrchestratorConfig(
|
44
44
|
SkypilotBaseOrchestratorConfig,
|
45
45
|
GoogleCredentialsConfigMixin,
|
46
46
|
SkypilotGCPOrchestratorSettings,
|
@@ -60,12 +60,12 @@ class SkypilotLambdaOrchestratorSettings(SkypilotBaseOrchestratorSettings):
|
|
60
60
|
super().__setattr__(name, value)
|
61
61
|
|
62
62
|
|
63
|
-
class SkypilotLambdaOrchestratorConfig(
|
63
|
+
class SkypilotLambdaOrchestratorConfig(
|
64
64
|
SkypilotBaseOrchestratorConfig, SkypilotLambdaOrchestratorSettings
|
65
65
|
):
|
66
66
|
"""Skypilot orchestrator config."""
|
67
67
|
|
68
|
-
api_key: Optional[str] = SecretField()
|
68
|
+
api_key: Optional[str] = SecretField(default=None)
|
69
69
|
|
70
70
|
|
71
71
|
class SkypilotLambdaOrchestratorFlavor(BaseOrchestratorFlavor):
|
@@ -43,7 +43,7 @@ class SparkStepOperatorSettings(BaseSettings):
|
|
43
43
|
submit_kwargs: Optional[Dict[str, Any]] = None
|
44
44
|
|
45
45
|
|
46
|
-
class SparkStepOperatorConfig(
|
46
|
+
class SparkStepOperatorConfig(
|
47
47
|
BaseStepOperatorConfig, SparkStepOperatorSettings
|
48
48
|
):
|
49
49
|
"""Spark step operator config.
|
@@ -303,6 +303,8 @@ class SparkStepOperator(BaseStepOperator):
|
|
303
303
|
# Add any additional configuration given by the user.
|
304
304
|
self._additional_configuration(spark_config=conf, settings=settings)
|
305
305
|
|
306
|
+
info.force_write_logs()
|
307
|
+
|
306
308
|
# Generate a spark-submit command given the configuration
|
307
309
|
self._launch_spark_job(
|
308
310
|
spark_config=conf,
|
@@ -31,7 +31,7 @@ class TektonIntegration(Integration):
|
|
31
31
|
"""Definition of Tekton Integration for ZenML."""
|
32
32
|
|
33
33
|
NAME = TEKTON
|
34
|
-
REQUIREMENTS = ["kfp-
|
34
|
+
REQUIREMENTS = ["kfp>=2.6.0", "kfp-kubernetes>=1.1.0"]
|
35
35
|
|
36
36
|
@classmethod
|
37
37
|
def flavors(cls) -> List[Type[Flavor]]:
|
@@ -13,14 +13,16 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""Tekton orchestrator flavor."""
|
15
15
|
|
16
|
-
from typing import TYPE_CHECKING, Any, Dict, Optional, Type
|
16
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Type
|
17
17
|
|
18
|
-
from pydantic import
|
18
|
+
from pydantic import model_validator
|
19
19
|
|
20
20
|
from zenml.constants import KUBERNETES_CLUSTER_RESOURCE_TYPE
|
21
21
|
from zenml.integrations.tekton import TEKTON_ORCHESTRATOR_FLAVOR
|
22
22
|
from zenml.models import ServiceConnectorRequirements
|
23
23
|
from zenml.orchestrators import BaseOrchestratorConfig, BaseOrchestratorFlavor
|
24
|
+
from zenml.utils.pydantic_utils import before_validator_handler
|
25
|
+
from zenml.utils.secret_utils import SecretField
|
24
26
|
|
25
27
|
if TYPE_CHECKING:
|
26
28
|
from zenml.integrations.tekton.orchestrators import TektonOrchestrator
|
@@ -36,42 +38,83 @@ class TektonOrchestratorSettings(BaseSettings):
|
|
36
38
|
"""Settings for the Tekton orchestrator.
|
37
39
|
|
38
40
|
Attributes:
|
39
|
-
|
41
|
+
synchronous: If `True`, the client running a pipeline using this
|
42
|
+
orchestrator waits until all steps finish running. If `False`,
|
43
|
+
the client returns immediately and the pipeline is executed
|
44
|
+
asynchronously. Defaults to `True`. This setting only
|
45
|
+
has an effect when specified on the pipeline and will be ignored if
|
46
|
+
specified on steps.
|
47
|
+
timeout: How many seconds to wait for synchronous runs.
|
48
|
+
client_args: Arguments to pass when initializing the KFP client.
|
49
|
+
client_username: Username to generate a session cookie for the kubeflow client. Both `client_username`
|
50
|
+
and `client_password` need to be set together.
|
51
|
+
client_password: Password to generate a session cookie for the kubeflow client. Both `client_username`
|
52
|
+
and `client_password` need to be set together.
|
53
|
+
user_namespace: The user namespace to use when creating experiments
|
54
|
+
and runs.
|
40
55
|
"""
|
41
56
|
|
57
|
+
synchronous: bool = True
|
58
|
+
timeout: int = 1200
|
59
|
+
|
60
|
+
client_args: Dict[str, Any] = {}
|
61
|
+
client_username: Optional[str] = SecretField(default=None)
|
62
|
+
client_password: Optional[str] = SecretField(default=None)
|
63
|
+
user_namespace: Optional[str] = None
|
64
|
+
node_selectors: Dict[str, str] = {}
|
65
|
+
node_affinity: Dict[str, List[str]] = {}
|
42
66
|
pod_settings: Optional[KubernetesPodSettings] = None
|
43
67
|
|
68
|
+
@model_validator(mode="before")
|
69
|
+
@classmethod
|
70
|
+
@before_validator_handler
|
71
|
+
def _validate_and_migrate_pod_settings(
|
72
|
+
cls, data: Dict[str, Any]
|
73
|
+
) -> Dict[str, Any]:
|
74
|
+
"""Validates settings and migrates pod settings from older version.
|
75
|
+
|
76
|
+
Args:
|
77
|
+
data: Dict representing user-specified runtime settings.
|
78
|
+
|
79
|
+
Returns:
|
80
|
+
Validated settings.
|
81
|
+
|
82
|
+
Raises:
|
83
|
+
ValueError: If username and password are not specified together.
|
84
|
+
"""
|
85
|
+
# Validate username and password for auth cookie logic
|
86
|
+
username = data.get("client_username")
|
87
|
+
password = data.get("client_password")
|
88
|
+
client_creds_error = "`client_username` and `client_password` both need to be set together."
|
89
|
+
if (username and password is None) or (password and username is None):
|
90
|
+
raise ValueError(client_creds_error)
|
91
|
+
return data
|
92
|
+
|
44
93
|
|
45
|
-
class TektonOrchestratorConfig(
|
94
|
+
class TektonOrchestratorConfig(
|
46
95
|
BaseOrchestratorConfig, TektonOrchestratorSettings
|
47
96
|
):
|
48
97
|
"""Configuration for the Tekton orchestrator.
|
49
98
|
|
50
99
|
Attributes:
|
100
|
+
tekton_hostname: Hostname of the Tekton server.
|
51
101
|
kubernetes_context: Name of a kubernetes context to run
|
52
102
|
pipelines in. If the stack component is linked to a Kubernetes
|
53
103
|
service connector, this field is ignored. Otherwise, it is
|
54
104
|
mandatory.
|
55
105
|
kubernetes_namespace: Name of the kubernetes namespace in which the
|
56
106
|
pods that run the pipeline steps should be running.
|
57
|
-
local: If `True`, the orchestrator will assume it is connected to a
|
58
|
-
local kubernetes cluster and will perform additional validations and
|
59
|
-
operations to allow using the orchestrator in combination with other
|
60
|
-
local stack components that store data in the local filesystem
|
61
|
-
(i.e. it will mount the local stores directory into the pipeline
|
62
|
-
containers).
|
63
|
-
skip_local_validations: If `True`, the local validations will be
|
64
|
-
skipped.
|
65
107
|
"""
|
66
108
|
|
109
|
+
tekton_hostname: Optional[str] = None
|
67
110
|
kubernetes_context: Optional[str] = None
|
68
|
-
kubernetes_namespace: str = "
|
69
|
-
local: bool = False
|
70
|
-
skip_local_validations: bool = False
|
111
|
+
kubernetes_namespace: str = "kubeflow"
|
71
112
|
|
72
|
-
@
|
113
|
+
@model_validator(mode="before")
|
114
|
+
@classmethod
|
115
|
+
@before_validator_handler
|
73
116
|
def _validate_deprecated_attrs(
|
74
|
-
cls,
|
117
|
+
cls, data: Dict[str, Any]
|
75
118
|
) -> Dict[str, Any]:
|
76
119
|
"""Pydantic root_validator for deprecated attributes.
|
77
120
|
|
@@ -80,7 +123,7 @@ class TektonOrchestratorConfig( # type: ignore[misc] # https://github.com/pydan
|
|
80
123
|
mandatory in the meantime.
|
81
124
|
|
82
125
|
Args:
|
83
|
-
|
126
|
+
data: Values passed to the object constructor
|
84
127
|
|
85
128
|
Returns:
|
86
129
|
Values passed to the object constructor
|
@@ -93,10 +136,10 @@ class TektonOrchestratorConfig( # type: ignore[misc] # https://github.com/pydan
|
|
93
136
|
|
94
137
|
# remove deprecated attributes from values dict
|
95
138
|
for attr in provisioning_attrs:
|
96
|
-
if attr in
|
97
|
-
del
|
139
|
+
if attr in data:
|
140
|
+
del data[attr]
|
98
141
|
|
99
|
-
return
|
142
|
+
return data
|
100
143
|
|
101
144
|
@property
|
102
145
|
def is_remote(self) -> bool:
|
@@ -109,7 +152,7 @@ class TektonOrchestratorConfig( # type: ignore[misc] # https://github.com/pydan
|
|
109
152
|
Returns:
|
110
153
|
True if this config is for a remote component, False otherwise.
|
111
154
|
"""
|
112
|
-
return
|
155
|
+
return True
|
113
156
|
|
114
157
|
@property
|
115
158
|
def is_local(self) -> bool:
|
@@ -118,7 +161,7 @@ class TektonOrchestratorConfig( # type: ignore[misc] # https://github.com/pydan
|
|
118
161
|
Returns:
|
119
162
|
True if this config is for a local component, False otherwise.
|
120
163
|
"""
|
121
|
-
return
|
164
|
+
return False
|
122
165
|
|
123
166
|
|
124
167
|
class TektonOrchestratorFlavor(BaseOrchestratorFlavor):
|