dagster-k8s 0.25.5__tar.gz → 0.25.7__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 dagster-k8s might be problematic. Click here for more details.
- {dagster-k8s-0.25.5/dagster_k8s.egg-info → dagster-k8s-0.25.7}/PKG-INFO +1 -1
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/client.py +8 -4
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/executor.py +4 -3
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/launcher.py +2 -2
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/models.py +1 -1
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/ops/k8s_job_op.py +18 -1
- dagster-k8s-0.25.7/dagster_k8s/version.py +1 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7/dagster_k8s.egg-info}/PKG-INFO +1 -1
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s.egg-info/requires.txt +1 -1
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/setup.py +1 -1
- dagster-k8s-0.25.5/dagster_k8s/version.py +0 -1
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/LICENSE +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/MANIFEST.in +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/README.md +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/__init__.py +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/container_context.py +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/job.py +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/kubernetes_version.py +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/ops/__init__.py +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/pipes.py +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/py.typed +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/test.py +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s/utils.py +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s.egg-info/SOURCES.txt +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s.egg-info/dependency_links.txt +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s.egg-info/not-zip-safe +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/dagster_k8s.egg-info/top_level.txt +0 -0
- {dagster-k8s-0.25.5 → dagster-k8s-0.25.7}/setup.cfg +0 -0
|
@@ -468,7 +468,7 @@ class DagsterKubernetesClient:
|
|
|
468
468
|
try:
|
|
469
469
|
job = self.batch_api.read_namespaced_job_status(job_name, namespace=namespace)
|
|
470
470
|
except kubernetes.client.rest.ApiException as e:
|
|
471
|
-
if e.
|
|
471
|
+
if e.status == 404:
|
|
472
472
|
return None
|
|
473
473
|
else:
|
|
474
474
|
raise
|
|
@@ -518,14 +518,14 @@ class DagsterKubernetesClient:
|
|
|
518
518
|
for error in errors:
|
|
519
519
|
if not (
|
|
520
520
|
isinstance(error, kubernetes.client.rest.ApiException)
|
|
521
|
-
and error.
|
|
521
|
+
and error.status == 404
|
|
522
522
|
):
|
|
523
523
|
raise error
|
|
524
524
|
raise errors[0]
|
|
525
525
|
|
|
526
526
|
return True
|
|
527
527
|
except kubernetes.client.rest.ApiException as e:
|
|
528
|
-
if e.
|
|
528
|
+
if e.status == 404:
|
|
529
529
|
return False
|
|
530
530
|
raise e
|
|
531
531
|
|
|
@@ -673,7 +673,6 @@ class DagsterKubernetesClient:
|
|
|
673
673
|
# State checks below, see:
|
|
674
674
|
# https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#containerstate-v1-core
|
|
675
675
|
state = container_status.state
|
|
676
|
-
|
|
677
676
|
if state.running is not None:
|
|
678
677
|
if wait_for_state == WaitForPodState.Ready:
|
|
679
678
|
# ready is boolean field of container status
|
|
@@ -684,6 +683,11 @@ class DagsterKubernetesClient:
|
|
|
684
683
|
continue
|
|
685
684
|
else:
|
|
686
685
|
ready_containers.add(container_status.name)
|
|
686
|
+
if container_status.name in initcontainers:
|
|
687
|
+
self.logger(
|
|
688
|
+
f'Init container "{container_status.name}" is ready, waiting for non-init containers...'
|
|
689
|
+
)
|
|
690
|
+
continue
|
|
687
691
|
if initcontainers.issubset(exited_containers | ready_containers):
|
|
688
692
|
self.logger(f'Pod "{pod_name}" is ready, done waiting')
|
|
689
693
|
break
|
|
@@ -237,9 +237,10 @@ class K8sStepHandler(StepHandler):
|
|
|
237
237
|
user_defined_k8s_config = get_user_defined_k8s_config(
|
|
238
238
|
step_handler_context.step_tags[step_key]
|
|
239
239
|
)
|
|
240
|
-
|
|
240
|
+
step_context = step_handler_context.get_step_context(step_key)
|
|
241
|
+
op_name = step_context.step.op_name
|
|
241
242
|
per_op_override = UserDefinedDagsterK8sConfig.from_dict(
|
|
242
|
-
self._per_step_k8s_config.get(
|
|
243
|
+
self._per_step_k8s_config.get(op_name, {})
|
|
243
244
|
)
|
|
244
245
|
|
|
245
246
|
return context.merge(K8sContainerContext(run_k8s_config=user_defined_k8s_config)).merge(
|
|
@@ -332,7 +333,7 @@ class K8sStepHandler(StepHandler):
|
|
|
332
333
|
container_context = self._get_container_context(step_handler_context)
|
|
333
334
|
|
|
334
335
|
status = self._api_client.get_job_status(
|
|
335
|
-
namespace=container_context.namespace,
|
|
336
|
+
namespace=container_context.namespace, # pyright: ignore[reportArgumentType]
|
|
336
337
|
job_name=job_name,
|
|
337
338
|
)
|
|
338
339
|
if not status:
|
|
@@ -400,7 +400,7 @@ class K8sRunLauncher(RunLauncher, ConfigurableClass):
|
|
|
400
400
|
)
|
|
401
401
|
|
|
402
402
|
else:
|
|
403
|
-
job_debug_info = self._api_client.get_job_debug_info(job_name, namespace=namespace)
|
|
403
|
+
job_debug_info = self._api_client.get_job_debug_info(job_name, namespace=namespace) # pyright: ignore[reportArgumentType]
|
|
404
404
|
full_msg = (
|
|
405
405
|
full_msg
|
|
406
406
|
+ "\n\n"
|
|
@@ -419,7 +419,7 @@ class K8sRunLauncher(RunLauncher, ConfigurableClass):
|
|
|
419
419
|
)
|
|
420
420
|
try:
|
|
421
421
|
status = self._api_client.get_job_status(
|
|
422
|
-
namespace=container_context.namespace,
|
|
422
|
+
namespace=container_context.namespace, # pyright: ignore[reportArgumentType]
|
|
423
423
|
job_name=job_name,
|
|
424
424
|
)
|
|
425
425
|
except Exception:
|
|
@@ -69,7 +69,7 @@ def _k8s_parse_value(data: Any, classname: str, attr_name: str) -> Any:
|
|
|
69
69
|
elif klass == object:
|
|
70
70
|
return data
|
|
71
71
|
elif klass == datetime.date:
|
|
72
|
-
return parse(data).date()
|
|
72
|
+
return parse(data).date() # pyright: ignore[reportAttributeAccessIssue]
|
|
73
73
|
elif klass == datetime.datetime:
|
|
74
74
|
return parse(data)
|
|
75
75
|
else:
|
|
@@ -371,7 +371,10 @@ def execute_k8s_job(
|
|
|
371
371
|
watch = kubernetes.watch.Watch() # consider moving in to api_client
|
|
372
372
|
|
|
373
373
|
api_client.wait_for_pod(
|
|
374
|
-
pod_to_watch,
|
|
374
|
+
pod_to_watch,
|
|
375
|
+
namespace, # pyright: ignore[reportArgumentType]
|
|
376
|
+
wait_timeout=timeout,
|
|
377
|
+
start_time=start_time, # pyright: ignore[reportArgumentType]
|
|
375
378
|
)
|
|
376
379
|
|
|
377
380
|
log_stream = watch.stream(
|
|
@@ -416,6 +419,20 @@ def execute_k8s_job(
|
|
|
416
419
|
num_pods_to_wait_for=num_pods_to_wait_for,
|
|
417
420
|
)
|
|
418
421
|
except (DagsterExecutionInterruptedError, Exception) as e:
|
|
422
|
+
try:
|
|
423
|
+
pods = api_client.get_pod_names_in_job(job_name=job_name, namespace=namespace)
|
|
424
|
+
pod_debug_info = "\n\n".join(
|
|
425
|
+
[api_client.get_pod_debug_info(pod_name, namespace) for pod_name in pods]
|
|
426
|
+
)
|
|
427
|
+
except Exception:
|
|
428
|
+
context.log.exception(
|
|
429
|
+
f"Error trying to get pod debug information for failed k8s job {job_name}"
|
|
430
|
+
)
|
|
431
|
+
else:
|
|
432
|
+
context.log.error(
|
|
433
|
+
f"Debug information for failed k8s job {job_name}:\n\n{pod_debug_info}"
|
|
434
|
+
)
|
|
435
|
+
|
|
419
436
|
if delete_failed_k8s_jobs:
|
|
420
437
|
context.log.info(
|
|
421
438
|
f"Deleting Kubernetes job {job_name} in namespace {namespace} due to exception"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.25.7"
|
|
@@ -43,7 +43,7 @@ setup(
|
|
|
43
43
|
include_package_data=True,
|
|
44
44
|
python_requires=">=3.9,<3.13",
|
|
45
45
|
install_requires=[
|
|
46
|
-
"dagster==1.9.
|
|
46
|
+
"dagster==1.9.7",
|
|
47
47
|
f"kubernetes<{KUBERNETES_VERSION_UPPER_BOUND}",
|
|
48
48
|
# exclude a google-auth release that added an overly restrictive urllib3 pin that confuses dependency resolvers
|
|
49
49
|
"google-auth!=2.23.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.25.5"
|
|
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
|