konduktor-nightly 0.1.0.dev20251023104627__tar.gz → 0.1.0.dev20251025104336__tar.gz
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.
Potentially problematic release.
This version of konduktor-nightly might be problematic. Click here for more details.
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/PKG-INFO +1 -1
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/__init__.py +2 -2
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/backends/jobset_utils.py +4 -5
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/cli.py +41 -21
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/resource.py +9 -2
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/task.py +1 -5
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/validator.py +12 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/pyproject.toml +1 -1
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/LICENSE +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/README.md +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/adaptors/__init__.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/adaptors/aws.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/adaptors/common.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/adaptors/gcp.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/authentication.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/backends/__init__.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/backends/backend.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/backends/constants.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/backends/deployment.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/backends/deployment_utils.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/backends/jobset.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/backends/pod_utils.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/check.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/config.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/constants.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/controller/__init__.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/controller/constants.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/controller/launch.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/controller/node.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/controller/parse.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/README.md +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/backend/main.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/backend/sockets.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/.eslintrc.json +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/.gitignore +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/api/jobs/route.js +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/api/namespaces/route.js +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/components/Grafana.jsx +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/components/JobsData.jsx +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/components/LogsData.jsx +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/components/NavMenu.jsx +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/components/NavTabs.jsx +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/components/NavTabs2.jsx +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/components/SelectBtn.jsx +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/components/lib/utils.js +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/components/ui/chip-select.jsx +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/components/ui/input.jsx +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/components/ui/navigation-menu.jsx +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/components/ui/select.jsx +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/favicon.ico +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/globals.css +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/jobs/page.js +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/layout.js +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/logs/page.js +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/app/page.js +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/jsconfig.json +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/next.config.mjs +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/package-lock.json +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/package.json +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/postcss.config.mjs +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/server.js +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/dashboard/frontend/tailwind.config.js +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/data/__init__.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/data/aws/__init__.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/data/aws/s3.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/data/constants.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/data/data_utils.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/data/gcp/__init__.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/data/gcp/constants.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/data/gcp/gcs.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/data/gcp/utils.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/data/registry.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/data/storage.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/data/storage_utils.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/execution.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/kube_client.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/logging.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/manifests/aibrix-setup.yaml +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/manifests/apoxy-setup.yaml +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/manifests/apoxy-setup2.yaml +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/manifests/controller_deployment.yaml +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/manifests/dashboard_deployment.yaml +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/manifests/dmesg_daemonset.yaml +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/manifests/pod_cleanup_controller.yaml +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/serving.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/templates/deployment.yaml.j2 +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/templates/jobset.yaml.j2 +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/templates/pod.yaml.j2 +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/usage/__init__.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/usage/constants.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/__init__.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/accelerator_registry.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/annotations.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/base64_utils.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/common_utils.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/constants.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/env_options.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/exceptions.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/kubernetes_enums.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/kubernetes_utils.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/log_utils.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/loki_utils.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/rich_utils.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/schemas.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/subprocess_utils.py +0 -0
- {konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/konduktor/utils/ux_utils.py +0 -0
|
@@ -11,7 +11,7 @@ from konduktor.task import Task
|
|
|
11
11
|
__all__ = ['launch', 'Resources', 'Task', 'Serving']
|
|
12
12
|
|
|
13
13
|
# Replaced with the current commit when building the wheels.
|
|
14
|
-
_KONDUKTOR_COMMIT_SHA = '
|
|
14
|
+
_KONDUKTOR_COMMIT_SHA = '431cdb62b9ab33df94d918db9d957bc4c54c2096'
|
|
15
15
|
os.makedirs(os.path.expanduser('~/.konduktor'), exist_ok=True)
|
|
16
16
|
|
|
17
17
|
|
|
@@ -45,5 +45,5 @@ def _get_git_commit():
|
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
__commit__ = _get_git_commit()
|
|
48
|
-
__version__ = '1.0.0.dev0.1.0.
|
|
48
|
+
__version__ = '1.0.0.dev0.1.0.dev20251025104336'
|
|
49
49
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
|
@@ -5,15 +5,12 @@ import json
|
|
|
5
5
|
import tempfile
|
|
6
6
|
import time
|
|
7
7
|
import typing
|
|
8
|
-
from datetime import datetime, timezone
|
|
8
|
+
from datetime import datetime, timedelta, timezone
|
|
9
9
|
from typing import Any, Dict, Optional, Tuple
|
|
10
10
|
|
|
11
11
|
import click
|
|
12
12
|
import colorama
|
|
13
13
|
|
|
14
|
-
if typing.TYPE_CHECKING:
|
|
15
|
-
from datetime import timedelta
|
|
16
|
-
|
|
17
14
|
import konduktor
|
|
18
15
|
from konduktor import kube_client, logging
|
|
19
16
|
from konduktor.backends import constants as backend_constants
|
|
@@ -428,7 +425,9 @@ def _parse_timestamp_filter(timestamp_str: str) -> datetime:
|
|
|
428
425
|
seconds=abs(local_offset)
|
|
429
426
|
)
|
|
430
427
|
else:
|
|
431
|
-
|
|
428
|
+
# Handle date-only format (local midnight --> UTC)
|
|
429
|
+
local_tz = datetime.now().astimezone().tzinfo
|
|
430
|
+
return dt.replace(tzinfo=local_tz).astimezone(timezone.utc)
|
|
432
431
|
return dt
|
|
433
432
|
except ValueError:
|
|
434
433
|
continue
|
|
@@ -161,7 +161,9 @@ def _make_task_with_overrides(
|
|
|
161
161
|
if workdir is not None:
|
|
162
162
|
task.workdir = workdir
|
|
163
163
|
|
|
164
|
-
|
|
164
|
+
# perform overrides from CLI
|
|
165
|
+
if override_params:
|
|
166
|
+
task.set_resources_override(override_params)
|
|
165
167
|
if task.serving:
|
|
166
168
|
task.set_serving_override(serving_override_params)
|
|
167
169
|
|
|
@@ -653,28 +655,23 @@ def status(
|
|
|
653
655
|
all_users: bool, limit: Optional[int], after: Optional[str], before: Optional[str]
|
|
654
656
|
):
|
|
655
657
|
# NOTE(dev): Keep the docstring consistent between the Python API and CLI.
|
|
656
|
-
"""Shows list of all the jobs with optional filtering and pagination
|
|
657
|
-
|
|
658
|
-
Args:
|
|
659
|
-
all_users (bool): whether to show all jobs for all users
|
|
660
|
-
limit (Optional[int]): maximum number of jobs to display
|
|
661
|
-
after (Optional[str]): show jobs created after this timestamp
|
|
662
|
-
before (Optional[str]): show jobs created before this timestamp
|
|
658
|
+
"""Shows list of all the jobs with optional filtering and pagination.
|
|
663
659
|
|
|
660
|
+
\b
|
|
664
661
|
Examples:
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
662
|
+
konduktor status --limit 10
|
|
663
|
+
konduktor status --before "08/06/25 03:53PM"
|
|
664
|
+
konduktor status --all-users --limit 10 --after "08/06/25 03:53PM"
|
|
665
|
+
|
|
666
|
+
\b
|
|
667
|
+
Notes:
|
|
668
|
+
• When using --before or --after timestamps, "08/06/25"
|
|
669
|
+
is equivalent to "08/06/25 00:00".
|
|
670
|
+
• "03:53PM" is equivalent to "03:53:00PM".
|
|
671
|
+
• Timestamps shown in "konduktor status" are truncated
|
|
672
|
+
and are in the local timezone.
|
|
673
|
+
Example: "03:53:55PM" → "03:53PM" — would show up in
|
|
674
|
+
--after "03:53PM" but not in --before "03:53PM".
|
|
678
675
|
"""
|
|
679
676
|
context = kubernetes_utils.get_current_kube_config_context_name()
|
|
680
677
|
namespace = kubernetes_utils.get_kube_config_context_namespace(context)
|
|
@@ -802,6 +799,13 @@ def logs(
|
|
|
802
799
|
# pylint: disable=bad-docstring-quotes
|
|
803
800
|
help='Skip confirmation prompt.',
|
|
804
801
|
)
|
|
802
|
+
@click.option(
|
|
803
|
+
'--skip-image-check',
|
|
804
|
+
'-s',
|
|
805
|
+
is_flag=True,
|
|
806
|
+
default=False,
|
|
807
|
+
help='Skip Docker image validation checks for faster startup.',
|
|
808
|
+
)
|
|
805
809
|
def launch(
|
|
806
810
|
entrypoint: Tuple[str, ...],
|
|
807
811
|
dryrun: bool,
|
|
@@ -820,6 +824,7 @@ def launch(
|
|
|
820
824
|
env: List[Tuple[str, str]],
|
|
821
825
|
disk_size: Optional[int],
|
|
822
826
|
yes: bool,
|
|
827
|
+
skip_image_check: bool,
|
|
823
828
|
):
|
|
824
829
|
"""Launch a task.
|
|
825
830
|
|
|
@@ -829,6 +834,9 @@ def launch(
|
|
|
829
834
|
# NOTE(dev): Keep the docstring consistent between the Python API and CLI.
|
|
830
835
|
env = _merge_env_vars(env_file, env)
|
|
831
836
|
|
|
837
|
+
if skip_image_check:
|
|
838
|
+
os.environ['KONDUKTOR_SKIP_IMAGE_CHECK'] = '1'
|
|
839
|
+
|
|
832
840
|
task = _make_task_with_overrides(
|
|
833
841
|
entrypoint=entrypoint,
|
|
834
842
|
name=name,
|
|
@@ -1694,6 +1702,13 @@ def serve():
|
|
|
1694
1702
|
# pylint: disable=bad-docstring-quotes
|
|
1695
1703
|
help='Skip confirmation prompt.',
|
|
1696
1704
|
)
|
|
1705
|
+
@click.option(
|
|
1706
|
+
'--skip-image-check',
|
|
1707
|
+
'-s',
|
|
1708
|
+
is_flag=True,
|
|
1709
|
+
default=False,
|
|
1710
|
+
help='Skip Docker image validation checks for faster startup.',
|
|
1711
|
+
)
|
|
1697
1712
|
def serve_launch(
|
|
1698
1713
|
entrypoint: Tuple[str, ...],
|
|
1699
1714
|
dryrun: bool,
|
|
@@ -1716,6 +1731,7 @@ def serve_launch(
|
|
|
1716
1731
|
ports: Optional[int],
|
|
1717
1732
|
probe: Optional[str],
|
|
1718
1733
|
yes: bool,
|
|
1734
|
+
skip_image_check: bool = False,
|
|
1719
1735
|
):
|
|
1720
1736
|
"""Launch a deployment to serve.
|
|
1721
1737
|
|
|
@@ -1725,6 +1741,9 @@ def serve_launch(
|
|
|
1725
1741
|
# NOTE(dev): Keep the docstring consistent between the Python API and CLI.
|
|
1726
1742
|
env = _merge_env_vars(env_file, env)
|
|
1727
1743
|
|
|
1744
|
+
if skip_image_check:
|
|
1745
|
+
os.environ['KONDUKTOR_SKIP_IMAGE_CHECK'] = '1'
|
|
1746
|
+
|
|
1728
1747
|
task = _make_task_with_overrides(
|
|
1729
1748
|
entrypoint=entrypoint,
|
|
1730
1749
|
name=name,
|
|
@@ -1739,6 +1758,7 @@ def serve_launch(
|
|
|
1739
1758
|
image_id=image_id,
|
|
1740
1759
|
env=env,
|
|
1741
1760
|
disk_size=disk_size,
|
|
1761
|
+
# serving stuff
|
|
1742
1762
|
min_replicas=min_replicas,
|
|
1743
1763
|
max_replicas=max_replicas,
|
|
1744
1764
|
ports=ports,
|
|
@@ -59,6 +59,8 @@ class Resources:
|
|
|
59
59
|
# Internal use only.
|
|
60
60
|
# pylint: disable=invalid-name
|
|
61
61
|
_cluster_config_overrides: Optional[Dict[str, Any]] = None,
|
|
62
|
+
# used to prevent double validation of image (would happen from overrides)
|
|
63
|
+
_validate_image: bool = True,
|
|
62
64
|
):
|
|
63
65
|
"""Initialize a Resources object.
|
|
64
66
|
|
|
@@ -124,7 +126,8 @@ class Resources:
|
|
|
124
126
|
if isinstance(image_id, str):
|
|
125
127
|
self._image_id = image_id.strip()
|
|
126
128
|
# Validate Docker image format and existence
|
|
127
|
-
|
|
129
|
+
if _validate_image:
|
|
130
|
+
validator.validate_and_warn_image(self._image_id, 'task')
|
|
128
131
|
|
|
129
132
|
self._labels = labels
|
|
130
133
|
self._cluster_config_overrides = _cluster_config_overrides
|
|
@@ -435,15 +438,19 @@ class Resources:
|
|
|
435
438
|
|
|
436
439
|
def copy(self, **override) -> 'Resources':
|
|
437
440
|
"""Returns a copy of the given Resources."""
|
|
441
|
+
# used to prevent double validation of image (would happen from overrides)
|
|
442
|
+
new_image_id = override.pop('image_id', self.image_id)
|
|
438
443
|
resources = Resources(
|
|
439
444
|
cloud=override.pop('cloud', self.cloud),
|
|
440
445
|
cpus=override.pop('cpus', self._cpus),
|
|
441
446
|
memory=override.pop('memory', self.memory),
|
|
442
447
|
accelerators=override.pop('accelerators', self.accelerators),
|
|
443
448
|
disk_size=override.pop('disk_size', self.disk_size),
|
|
444
|
-
image_id=
|
|
449
|
+
image_id=new_image_id,
|
|
445
450
|
labels=override.pop('labels', self.labels),
|
|
446
451
|
job_config=override.pop('job_config', self.job_config),
|
|
452
|
+
# used to prevent double validation of image (would happen from overrides)
|
|
453
|
+
_validate_image=(new_image_id != self.image_id),
|
|
447
454
|
)
|
|
448
455
|
assert len(override) == 0
|
|
449
456
|
return resources
|
|
@@ -29,7 +29,7 @@ import konduktor
|
|
|
29
29
|
from konduktor import constants, logging
|
|
30
30
|
from konduktor.data import data_utils
|
|
31
31
|
from konduktor.data import storage as storage_lib
|
|
32
|
-
from konduktor.utils import common_utils, exceptions, schemas, ux_utils
|
|
32
|
+
from konduktor.utils import common_utils, exceptions, schemas, ux_utils
|
|
33
33
|
|
|
34
34
|
logger = logging.get_logger(__name__)
|
|
35
35
|
|
|
@@ -388,10 +388,6 @@ class Task:
|
|
|
388
388
|
)
|
|
389
389
|
resources_config['_cluster_config_overrides'] = cluster_config_override
|
|
390
390
|
|
|
391
|
-
# Validate Docker image if specified in resources
|
|
392
|
-
if 'image_id' in resources_config and resources_config['image_id']:
|
|
393
|
-
validator.validate_and_warn_image(resources_config['image_id'], 'task')
|
|
394
|
-
|
|
395
391
|
task.set_resources(konduktor.Resources.from_yaml_config(resources_config))
|
|
396
392
|
|
|
397
393
|
# Parse serving field.
|
|
@@ -37,6 +37,11 @@ SCHEMA_URLS = {
|
|
|
37
37
|
logger = logging.get_logger(__name__)
|
|
38
38
|
|
|
39
39
|
|
|
40
|
+
def _skip_image_checks() -> bool:
|
|
41
|
+
val = os.getenv('KONDUKTOR_SKIP_IMAGE_CHECK', '')
|
|
42
|
+
return val.lower() in ('1', 'true', 'yes', 'y')
|
|
43
|
+
|
|
44
|
+
|
|
40
45
|
def case_insensitive_enum(validator, enums, instance, schema):
|
|
41
46
|
del validator, schema # Unused.
|
|
42
47
|
if instance.lower() not in [enum.lower() for enum in enums]:
|
|
@@ -419,6 +424,13 @@ def validate_and_warn_image(image_id: str, context: str = 'task') -> None:
|
|
|
419
424
|
if not image_id:
|
|
420
425
|
return
|
|
421
426
|
|
|
427
|
+
if _skip_image_checks():
|
|
428
|
+
logger.info(
|
|
429
|
+
'Skipping Docker image validation for %s',
|
|
430
|
+
image_id,
|
|
431
|
+
)
|
|
432
|
+
return
|
|
433
|
+
|
|
422
434
|
status, message = validate_docker_image(image_id)
|
|
423
435
|
|
|
424
436
|
if status == 'invalid':
|
{konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/LICENSE
RENAMED
|
File without changes
|
{konduktor_nightly-0.1.0.dev20251023104627 → konduktor_nightly-0.1.0.dev20251025104336}/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|