From 7374db6066124a972e0ac3198efaeefd3b3da5a5 Mon Sep 17 00:00:00 2001 From: sofyen dou Date: Mon, 31 Aug 2026 09:35:27 +0000 Subject: [PATCH 01/22] Initial commit --- README.md | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..4b16b27 --- /dev/null +++ b/README.md @@ -0,0 +1,93 @@ +# distributed-execution + + + +## Getting started + +To make it easy for you to get started with GitLab, here's a list of recommended next steps. + +Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! + +## Add your files + +* [Create](https://docs.gitlab.com/user/project/repository/web_editor/#create-a-file) or [upload](https://docs.gitlab.com/user/project/repository/web_editor/#upload-a-file) files +* [Add files using the command line](https://docs.gitlab.com/topics/git/add_files/#add-files-to-a-git-repository) or push an existing Git repository with the following command: + +``` +cd existing_repo +git remote add origin https://code.europa.eu/simpl/simpl-open/data/supporting-data-services/distributed-execution/distributed-execution.git +git branch -M main +git push -uf origin main +``` + +## Integrate with your tools + +* [Set up project integrations](https://code.europa.eu/simpl/simpl-open/data/supporting-data-services/distributed-execution/distributed-execution/-/settings/integrations) + +## Collaborate with your team + +* [Invite team members and collaborators](https://docs.gitlab.com/user/project/members/) +* [Create a new merge request](https://docs.gitlab.com/user/project/merge_requests/creating_merge_requests/) +* [Automatically close issues from merge requests](https://docs.gitlab.com/user/project/issues/managing_issues/#closing-issues-automatically) +* [Enable merge request approvals](https://docs.gitlab.com/user/project/merge_requests/approvals/) +* [Set auto-merge](https://docs.gitlab.com/user/project/merge_requests/auto_merge/) + +## Test and Deploy + +Use the built-in continuous integration in GitLab. + +* [Get started with GitLab CI/CD](https://docs.gitlab.com/ci/quick_start/) +* [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/user/application_security/sast/) +* [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/topics/autodevops/requirements/) +* [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/user/clusters/agent/) +* [Set up protected environments](https://docs.gitlab.com/ci/environments/protected_environments/) + +*** + +# Editing this README + +When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template. + +## Suggestions for a good README + +Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. + +## Name +Choose a self-explaining name for your project. + +## Description +Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. + +## Badges +On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. + +## Visuals +Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. + +## Installation +Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. + +## Usage +Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. + +## Support +Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. + +## Roadmap +If you have ideas for releases in the future, it is a good idea to list them in the README. + +## Contributing +State if you are open to contributions and what your requirements are for accepting them. + +For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. + +You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. + +## Authors and acknowledgment +Show your appreciation to those who have contributed to the project. + +## License +For open source projects, say how it is licensed. + +## Project status +If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. From 0d03e532343814ceb40fd33535e8c3acaf242961 Mon Sep 17 00:00:00 2001 From: sofyen dou Date: Mon, 31 Aug 2026 09:37:46 +0000 Subject: [PATCH 02/22] Add new file --- CODEOWNERS | 1 + 1 file changed, 1 insertion(+) create mode 100644 CODEOWNERS diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000..bcfc591 --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +* @simpl/simpl-users/sc1/codeowners/data-supporting-data-services-distributed-execution-distributed-execution \ No newline at end of file From fe295486f1a0d9422118a1bdcf799578e77078d1 Mon Sep 17 00:00:00 2001 From: sofyen dou Date: Mon, 31 Aug 2026 09:39:11 +0000 Subject: [PATCH 03/22] Add new file --- LICENSE | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f63b02f --- /dev/null +++ b/LICENSE @@ -0,0 +1,3 @@ +# EUROPEAN UNION PUBLIC LICENSE v. 1.2 + +Refer to [license description](https://eupl.eu/1.2/en/) \ No newline at end of file From cfa6afedd601c9f29cfbdf70a504fd2fa59de181 Mon Sep 17 00:00:00 2001 From: sofyen dou Date: Mon, 31 Aug 2026 09:40:56 +0000 Subject: [PATCH 04/22] Update 2 files - /CODEOWNERS - /.gitlab/CODEOWNERS --- CODEOWNERS => .gitlab/CODEOWNERS | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename CODEOWNERS => .gitlab/CODEOWNERS (100%) diff --git a/CODEOWNERS b/.gitlab/CODEOWNERS similarity index 100% rename from CODEOWNERS rename to .gitlab/CODEOWNERS From 0d8078889d5a5f2b31167c541dff17f8e87cf750 Mon Sep 17 00:00:00 2001 From: sofyen dou Date: Mon, 31 Aug 2026 09:41:39 +0000 Subject: [PATCH 05/22] Add new file --- pipeline.variables.sh | 1 + 1 file changed, 1 insertion(+) create mode 100644 pipeline.variables.sh diff --git a/pipeline.variables.sh b/pipeline.variables.sh new file mode 100644 index 0000000..2be5994 --- /dev/null +++ b/pipeline.variables.sh @@ -0,0 +1 @@ +PROJECT_VERSION_NUMBER="0.0.1" From c2a49f097115789cfe3ce550009147100c767762 Mon Sep 17 00:00:00 2001 From: ILay Date: Mon, 31 Aug 2026 16:12:57 +0200 Subject: [PATCH 06/22] [SIMPL-30451] Add sandbox deployment values and the pull-secret caveat yaml/sandbox/values-sandbox-gitea.yaml carries the registry coordinates, the pull secret both namespaces need, and the commit SHA the two images share. The sandbox registry rejects anonymous pulls, so a payload namespace without its own pull secret leaves the dispatching op waiting on a pod that never starts - readiness check L4 now says so. Changelog: added --- .../user-guide/distributed-execution-guide.md | 2 + documents/user-guide/readiness-checklist.md | 2 +- yaml/sandbox/values-sandbox-gitea.yaml | 57 +++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 yaml/sandbox/values-sandbox-gitea.yaml diff --git a/documents/user-guide/distributed-execution-guide.md b/documents/user-guide/distributed-execution-guide.md index e81ac61..ab2b94f 100644 --- a/documents/user-guide/distributed-execution-guide.md +++ b/documents/user-guide/distributed-execution-guide.md @@ -395,6 +395,7 @@ setting. There is no UI control that switches a workflow between the two pattern | `yaml/tightly-coupled/values-run-launcher.yaml` | Run launcher type, namespace, pod env | | `yaml/tightly-coupled/rbac-step-executor.yaml` | Permissions required by `k8s_job_executor` | | `yaml/loosely-coupled/values-pipes-payload.yaml` | Payload image reference and target namespace | +| `yaml/sandbox/values-sandbox-gitea.yaml` | Sandbox registry coordinates, pull secret, and the SHA both images share | | `yaml/loosely-coupled/rbac-pipes-dispatch.yaml` | Permissions required by the dispatching pod | | `yaml/values-dagster-distributed-execution.yaml` | Code location image and entry point | @@ -515,6 +516,7 @@ Tracked under SIMPL-30451. | Both images build; payload image passes the isolation check (L11) | Tech details | Complete | | Locally runnable jobs launched from the Dagster UI, evidence recorded in section 5.6 | Tech details | Complete | | Payload image published to a container registry | Tech details | Complete on the sandbox Gitea registry; the GitLab registry still pending | +| GitLab pipeline builds both images | Tech details | **Pending** — the shared `ds.gitlab-ci.yml` template builds one image from the root Dockerfile | | End-to-end run of `loosely_coupled_k8s_job` on a cluster | Tech details | **Pending** | | Screenshots of UI surfaces | Tech details | **Pending** — needs a deployed platform instance, not a local dev server | | Platform architecture document update | Tech details | **Pending** | diff --git a/documents/user-guide/readiness-checklist.md b/documents/user-guide/readiness-checklist.md index d6e5956..f187b43 100644 --- a/documents/user-guide/readiness-checklist.md +++ b/documents/user-guide/readiness-checklist.md @@ -46,7 +46,7 @@ location image. | L1 | Payload contract is intact | `uv run pytest tests/test_loosely_coupled.py` | `test_payload_does_not_import_dagster` passes — the payload imports `dagster_pipes` only | | L2 | Pipes round trip works | Launch `loosely_coupled_subprocess_job` | Run reaches `SUCCESS`; run logs contain the payload's `External payload started on …` line, proving `pipes.log` crossed the channel | | L3 | Silence is treated as failure | Same test module | `test_silent_message_path_is_treated_as_failure` passes — an empty message list raises rather than yielding an empty result | -| L4 | Payload image is pullable by the target cluster | `kubectl -n run pull-probe --image= --restart=Never --command -- true` | Pod reaches `Completed`; no `ImagePullBackOff` | +| L4 | Payload image is pullable by the target cluster | `kubectl -n run pull-probe --image= --restart=Never --command -- true` | Pod reaches `Completed`; no `ImagePullBackOff`. The sandbox Gitea registry rejects anonymous pulls, so the payload namespace needs its own pull secret — see `yaml/sandbox/values-sandbox-gitea.yaml` | | L5 | Dispatcher can create Jobs in the payload namespace | `kubectl -n auth can-i create jobs --as=system:serviceaccount:dagster:dagster-dev` | Returns `yes` | | L6 | Dispatcher can read pod logs — **the message channel** | `kubectl -n auth can-i get pods/log --as=system:serviceaccount:dagster:dagster-dev` | Returns `yes`. A `no` here breaks reporting *without* failing the workload | | L7 | Payload Job is actually created | Launch `loosely_coupled_k8s_job`, then `kubectl -n get jobs -l app.kubernetes.io/name=distributed-execution-payload` | One Job per dispatch, labelled `dagster/execution-target=loosely-coupled` | diff --git a/yaml/sandbox/values-sandbox-gitea.yaml b/yaml/sandbox/values-sandbox-gitea.yaml new file mode 100644 index 0000000..883ee37 --- /dev/null +++ b/yaml/sandbox/values-sandbox-gitea.yaml @@ -0,0 +1,57 @@ +# Sandbox deployment values - Gitea registry. +# +# NOT CLUSTER-VERIFIED. These values are written against images that exist and a +# registry whose auth behaviour was checked, but they have not been applied to a +# Simpl cluster. Confirm and amend after the first deployment. +# +# Use these instead of the code.europa.eu references in +# yaml/values-dagster-distributed-execution.yaml and +# yaml/loosely-coupled/values-pipes-payload.yaml when deploying to the +# dataprovider01 sandbox. Both images are published by +# .gitea/workflows/docker-publish.yml. +# +# The tag below is a short commit SHA and is the same for both images. That is +# the version lock: the code location and the payload it dispatches must come +# from one commit. Bump both together or not at all. +# +# The sandbox Gitea registry requires authentication - an anonymous manifest GET +# returns 401 - so a pull secret is required in every namespace that pulls either +# image. Create it with a Gitea access token that has read:package scope: +# +# kubectl -n create secret docker-registry gitea-registry \ +# --docker-server=gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu \ +# --docker-username= \ +# --docker-password= +# +# The payload namespace needs it too: PipesK8sClient creates that Job, and a +# missing pull secret there leaves the op waiting on a pod that never starts, +# which surfaces as pod_wait_timeout rather than as an image error. + +dagster: + dagster-user-deployments: + deployments: + - name: distributed-execution + image: + repository: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution + tag: 5122da4691f9 + pullPolicy: IfNotPresent + imagePullSecrets: + - name: gitea-registry + env: + - name: PIPES_PAYLOAD_IMAGE + value: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution-payload:5122da4691f9 + - name: PIPES_PAYLOAD_NAMESPACE + value: dagster + + runLauncher: + config: + k8sRunLauncher: + imagePullSecrets: + - name: gitea-registry + runK8sConfig: + containerConfig: + env: + - name: PIPES_PAYLOAD_IMAGE + value: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution-payload:5122da4691f9 + - name: PIPES_PAYLOAD_NAMESPACE + value: dagster From 6532d640f925f5fc4f6a207f294a8299cee37d00 Mon Sep 17 00:00:00 2001 From: ILay Date: Mon, 31 Aug 2026 16:13:05 +0200 Subject: [PATCH 07/22] [SIMPL-30451] Point image references at the project registry path The GitLab project lives at simpl-open/data/supporting-data-services/distributed-execution/distributed-execution, so CI_REGISTRY_IMAGE ends in the project name twice. The pipeline pushes to CI_REGISTRY_IMAGE and nowhere else, so the earlier one-segment path named an image nobody builds - the same mismatch that field-level-pseudo-anonymisation and dataframe-level-anonymisation carry today. Changelog: fixed --- .../loosely_coupled/jobs.py | 3 ++- .../loosely-coupled/values-pipes-payload.yaml | 19 +++++++++++++++++-- .../values-dagster-distributed-execution.yaml | 4 +++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/distributed_execution/loosely_coupled/jobs.py b/src/distributed_execution/loosely_coupled/jobs.py index 1e9c760..6497a21 100644 --- a/src/distributed_execution/loosely_coupled/jobs.py +++ b/src/distributed_execution/loosely_coupled/jobs.py @@ -38,7 +38,8 @@ PAYLOAD_SCRIPT = os.environ.get("PIPES_PAYLOAD_SCRIPT", str(_REPO_ROOT / "payloa PAYLOAD_IMAGE = os.environ.get( "PIPES_PAYLOAD_IMAGE", - "code.europa.eu:4567/simpl/simpl-open/data/supporting-data-services/distributed-execution/payload:0.1.0", + "code.europa.eu:4567/simpl/simpl-open/data/supporting-data-services" + "/distributed-execution/distributed-execution/payload:0.0.1", ) PAYLOAD_NAMESPACE = os.environ.get("PIPES_PAYLOAD_NAMESPACE", "dagster") diff --git a/yaml/loosely-coupled/values-pipes-payload.yaml b/yaml/loosely-coupled/values-pipes-payload.yaml index 98f93cd..b529d82 100644 --- a/yaml/loosely-coupled/values-pipes-payload.yaml +++ b/yaml/loosely-coupled/values-pipes-payload.yaml @@ -6,6 +6,19 @@ # Contrast with yaml/tightly-coupled/values-run-launcher.yaml: there, every # execution pod needed S3 and Vault credentials. Here the payload needs none - # only the dispatching pod does. +# +# VERSION LOCK. The payload tag below must equal the code location image tag in +# yaml/values-dagster-distributed-execution.yaml. The two images share a commit: +# the dispatching op and payload/work.py agree on the `units` extras key and on +# the custom-message shape, and nothing at runtime checks that agreement. A +# mismatched pair surfaces as "no pipes messages received", which reads like a +# broken message channel rather than a version skew. +# +# For values that work today, see yaml/sandbox/values-sandbox-gitea.yaml. The +# shared GitLab pipeline (ds.gitlab-ci.yml) builds exactly one image per project - +# $CI_REGISTRY_IMAGE from the root Dockerfile - so the payload reference below +# resolves only once that pipeline learns to build a second image. The Gitea +# workflow in .gitea/workflows/docker-publish.yml already builds both. dagster: dagster-user-deployments: @@ -14,7 +27,8 @@ dagster: envSecrets: [] env: - name: PIPES_PAYLOAD_IMAGE - value: code.europa.eu:4567/simpl/simpl-open/data/supporting-data-services/distributed-execution/payload:0.1.0 + # DO NOT CHANGE the tag - replaced automatically by the pipeline before releasing + value: code.europa.eu:4567/simpl/simpl-open/data/supporting-data-services/distributed-execution/distributed-execution/payload:0.0.0 - name: PIPES_PAYLOAD_NAMESPACE value: dagster @@ -27,6 +41,7 @@ dagster: containerConfig: env: - name: PIPES_PAYLOAD_IMAGE - value: code.europa.eu:4567/simpl/simpl-open/data/supporting-data-services/distributed-execution/payload:0.1.0 + # DO NOT CHANGE the tag - replaced automatically by the pipeline before releasing + value: code.europa.eu:4567/simpl/simpl-open/data/supporting-data-services/distributed-execution/distributed-execution/payload:0.0.0 - name: PIPES_PAYLOAD_NAMESPACE value: dagster diff --git a/yaml/values-dagster-distributed-execution.yaml b/yaml/values-dagster-distributed-execution.yaml index 370e24b..8a057b0 100644 --- a/yaml/values-dagster-distributed-execution.yaml +++ b/yaml/values-dagster-distributed-execution.yaml @@ -28,7 +28,9 @@ dagster: image: pullPolicy: IfNotPresent - repository: code.europa.eu:4567/simpl/simpl-open/data/supporting-data-services/distributed-execution + # $CI_REGISTRY_IMAGE for this project - the pipeline pushes here, so anything + # else is a reference to an image nobody builds. + repository: code.europa.eu:4567/simpl/simpl-open/data/supporting-data-services/distributed-execution/distributed-execution tag: 0.0.0 # DO NOT CHANGE - replaced automatically by the pipeline before releasing port: 4000 From 899429b10a9278866c708aa3424d85822ce6eeb6 Mon Sep 17 00:00:00 2001 From: ILay Date: Mon, 31 Aug 2026 17:26:08 +0200 Subject: [PATCH 08/22] [SIMPL-30451] Drop the Gitea workflow from the GitLab repository This repository is built by the shared ds.gitlab-ci.yml template; carrying a second CI system alongside it invited the reader to wonder which one is authoritative. The Gitea Actions workflow that builds both images stays in the sandbox Gitea mirror, which is where the sandbox images are produced. The README, the pipes payload values and the sandbox values no longer point at a file this repository does not contain. Changelog: removed --- .gitea/workflows/docker-publish.yml | 151 ------------------ README.md | 8 +- .../loosely-coupled/values-pipes-payload.yaml | 3 +- yaml/sandbox/values-sandbox-gitea.yaml | 4 +- 4 files changed, 7 insertions(+), 159 deletions(-) delete mode 100644 .gitea/workflows/docker-publish.yml diff --git a/.gitea/workflows/docker-publish.yml b/.gitea/workflows/docker-publish.yml deleted file mode 100644 index 61a0443..0000000 --- a/.gitea/workflows/docker-publish.yml +++ /dev/null @@ -1,151 +0,0 @@ -name: Build and Push Docker Images - -on: - push: - branches: - - main - workflow_dispatch: - -env: - BASE_DOMAIN: dataprovider01.sandbox-cat-dat.simpl-europe.eu - OWNER: ${{ github.repository_owner }} - -jobs: - build-and-push: - runs-on: orchestration-platform - defaults: - run: - shell: sh - env: - REGISTRY: gitea.${{ env.BASE_DOMAIN }} - IMAGE_REPO: gitea.${{ env.BASE_DOMAIN }}/${{ env.OWNER }}/distributed-execution - PAYLOAD_IMAGE_REPO: gitea.${{ env.BASE_DOMAIN }}/${{ env.OWNER }}/distributed-execution-payload - REPO_DIR: repo - REPO_CLONE_URL: https://gitea.${{ env.BASE_DOMAIN }}/${{ env.OWNER }}/distributed-execution.git - steps: - - name: Checkout repository (shell) - run: | - CLONE_USER="${{ secrets.REGISTRY_USERNAME }}" - CLONE_PASS="${{ secrets.REGISTRY_PASSWORD }}" - REF_NAME="${GITHUB_REF_NAME}" - if [ -z "${REF_NAME}" ]; then - REF_NAME="${GITHUB_REF#refs/heads/}" - fi - - if [ -z "${CLONE_USER}" ] || [ -z "${CLONE_PASS}" ]; then - echo "Missing REGISTRY_USERNAME or REGISTRY_PASSWORD secret" - exit 1 - fi - - rm -rf "${REPO_DIR}" - AUTH_HEADER="$(printf '%s:%s' "${CLONE_USER}" "${CLONE_PASS}" | base64 | tr -d '\n')" - git clone --depth 1 --branch "${REF_NAME}" \ - -c "http.extraHeader=Authorization: Basic ${AUTH_HEADER}" \ - "${REPO_CLONE_URL}" \ - "${REPO_DIR}" - - if [ ! -f "${REPO_DIR}/Dockerfile" ]; then - echo "Code location Dockerfile not found after clone" - exit 1 - fi - - if [ ! -f "${REPO_DIR}/payload/Dockerfile" ]; then - echo "Payload Dockerfile not found after clone" - exit 1 - fi - - - name: Validate registry secrets - run: | - if [ -z "${{ secrets.REGISTRY_USERNAME }}" ] || [ -z "${{ secrets.REGISTRY_PASSWORD }}" ]; then - echo "Missing REGISTRY_USERNAME or REGISTRY_PASSWORD secret" - exit 1 - fi - - - name: Login to registry - run: | - echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login "${REGISTRY}" \ - -u "${{ secrets.REGISTRY_USERNAME }}" --password-stdin - - # Both images take the same SHA tag: that is what keeps the code location and - # the payload it dispatches on the same version. - - name: Build code location image - run: | - COMMIT_SHA="${GITHUB_SHA:-$GITEA_SHA}" - SHORT_SHA="$(echo "${COMMIT_SHA}" | cut -c1-12)" - cd "${REPO_DIR}" - docker build \ - -t "${IMAGE_REPO}:latest" \ - -t "${IMAGE_REPO}:${SHORT_SHA}" \ - . - - - name: Build payload image - run: | - COMMIT_SHA="${GITHUB_SHA:-$GITEA_SHA}" - SHORT_SHA="$(echo "${COMMIT_SHA}" | cut -c1-12)" - cd "${REPO_DIR}" - docker build \ - -f payload/Dockerfile \ - -t "${PAYLOAD_IMAGE_REPO}:latest" \ - -t "${PAYLOAD_IMAGE_REPO}:${SHORT_SHA}" \ - payload/ - - - name: Validate code location image - run: | - COMMIT_SHA="${GITHUB_SHA:-$GITEA_SHA}" - SHORT_SHA="$(echo "${COMMIT_SHA}" | cut -c1-12)" - docker run --rm "${IMAGE_REPO}:${SHORT_SHA}" \ - dagster definitions validate -f src/distributed_execution/repository.py - docker run --rm "${IMAGE_REPO}:${SHORT_SHA}" \ - test -f /app/payload/work.py - - # Readiness checklist L11: the payload image must not carry the orchestration - # runtime, otherwise the isolation argument for the loosely coupled target is void. - - name: Validate payload image isolation - run: | - COMMIT_SHA="${GITHUB_SHA:-$GITEA_SHA}" - SHORT_SHA="$(echo "${COMMIT_SHA}" | cut -c1-12)" - docker run --rm "${PAYLOAD_IMAGE_REPO}:${SHORT_SHA}" python -c " - import importlib.util - assert importlib.util.find_spec('dagster_pipes') is not None, 'dagster_pipes missing from payload image' - assert importlib.util.find_spec('dagster') is None, 'payload image must not contain the dagster package' - print('payload isolation OK') - " - - - name: Push code location image tags - run: | - COMMIT_SHA="${GITHUB_SHA:-$GITEA_SHA}" - SHORT_SHA="$(echo "${COMMIT_SHA}" | cut -c1-12)" - docker push "${IMAGE_REPO}:latest" - docker push "${IMAGE_REPO}:${SHORT_SHA}" - - - name: Push payload image tags - run: | - COMMIT_SHA="${GITHUB_SHA:-$GITEA_SHA}" - SHORT_SHA="$(echo "${COMMIT_SHA}" | cut -c1-12)" - docker push "${PAYLOAD_IMAGE_REPO}:latest" - docker push "${PAYLOAD_IMAGE_REPO}:${SHORT_SHA}" - - - name: Report image references - run: | - COMMIT_SHA="${GITHUB_SHA:-$GITEA_SHA}" - SHORT_SHA="$(echo "${COMMIT_SHA}" | cut -c1-12)" - echo "Code location image: ${IMAGE_REPO}:${SHORT_SHA}" - echo "Payload image: ${PAYLOAD_IMAGE_REPO}:${SHORT_SHA}" - echo "" - echo "Set PIPES_PAYLOAD_IMAGE on both the code location and the run pods:" - echo " PIPES_PAYLOAD_IMAGE=${PAYLOAD_IMAGE_REPO}:${SHORT_SHA}" - echo "See yaml/loosely-coupled/values-pipes-payload.yaml." - - # The automated update of the deployment requires a technical user with - # their kube config in the secrets. See the template repository's user manual. - # - name: Update Dagster user deployment image - # run: | - # COMMIT_SHA="${GITHUB_SHA:-$GITEA_SHA}" - # SHORT_SHA="$(echo "${COMMIT_SHA}" | cut -c1-12)" - # kubectl patch deployment "${DEPLOYMENT_NAME}" \ - # -n "${K8S_NAMESPACE}" \ - # --type='strategic' \ - # -p="{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\":\"dagster-user-deployments\",\"image\":\"${IMAGE_REPO}:${SHORT_SHA}\",\"env\":[{\"name\":\"DAGSTER_CURRENT_IMAGE\",\"value\":\"${IMAGE_REPO}:${SHORT_SHA}\"},{\"name\":\"PIPES_PAYLOAD_IMAGE\",\"value\":\"${PAYLOAD_IMAGE_REPO}:${SHORT_SHA}\"}]}]}}}}" - # kubectl rollout status deployment/"${DEPLOYMENT_NAME}" \ - # -n "${K8S_NAMESPACE}" \ - # --timeout=5m diff --git a/README.md b/README.md index 14ed312..3241130 100644 --- a/README.md +++ b/README.md @@ -81,10 +81,10 @@ Both images build and have been smoke tested locally: the code location image loads its definitions, and the payload image contains `dagster_pipes` without `dagster` — check L11 in the readiness checklist. -[.gitea/workflows/docker-publish.yml](.gitea/workflows/docker-publish.yml) runs -the same two builds on every push to `main`, applies those checks as gates, and -tags both images with the same short commit SHA — that shared tag is what keeps a -code location and the payload it dispatches on the same version. +Both must be tagged from the same commit. That shared tag is what keeps a code +location and the payload it dispatches on the same version, and nothing at +runtime checks the pairing — see the *Outstanding work* section for what the +pipeline still has to learn. ## Status diff --git a/yaml/loosely-coupled/values-pipes-payload.yaml b/yaml/loosely-coupled/values-pipes-payload.yaml index b529d82..b49640b 100644 --- a/yaml/loosely-coupled/values-pipes-payload.yaml +++ b/yaml/loosely-coupled/values-pipes-payload.yaml @@ -17,8 +17,7 @@ # For values that work today, see yaml/sandbox/values-sandbox-gitea.yaml. The # shared GitLab pipeline (ds.gitlab-ci.yml) builds exactly one image per project - # $CI_REGISTRY_IMAGE from the root Dockerfile - so the payload reference below -# resolves only once that pipeline learns to build a second image. The Gitea -# workflow in .gitea/workflows/docker-publish.yml already builds both. +# resolves only once that pipeline learns to build a second image. dagster: dagster-user-deployments: diff --git a/yaml/sandbox/values-sandbox-gitea.yaml b/yaml/sandbox/values-sandbox-gitea.yaml index 883ee37..949cc63 100644 --- a/yaml/sandbox/values-sandbox-gitea.yaml +++ b/yaml/sandbox/values-sandbox-gitea.yaml @@ -7,8 +7,8 @@ # Use these instead of the code.europa.eu references in # yaml/values-dagster-distributed-execution.yaml and # yaml/loosely-coupled/values-pipes-payload.yaml when deploying to the -# dataprovider01 sandbox. Both images are published by -# .gitea/workflows/docker-publish.yml. +# dataprovider01 sandbox. Both images were built and published by a Gitea Actions +# workflow held in the sandbox Gitea mirror of this repository, not here. # # The tag below is a short commit SHA and is the same for both images. That is # the version lock: the code location and the payload it dispatches must come From b47c530d468752366edcb969d571683d1cf2ae6e Mon Sep 17 00:00:00 2001 From: ILay Date: Mon, 31 Aug 2026 17:34:18 +0200 Subject: [PATCH 09/22] [SIMPL-30451] Put the sandbox pull secrets where the chart actually reads them dagster 1.12.8 has no per-deployment imagePullSecrets field: deployment-user.yaml reads the dagster-user-deployments subchart value and the run launcher helper reads the parent chart value. The pull secret nested under the deployments[] entry was silently discarded, which would have produced ImagePullBackOff against a values file that reads as correct. Also records the unresolved 1.13.19 vs 1.12.8 skew between these images and the sandbox control plane. Changelog: fixed --- yaml/sandbox/values-sandbox-gitea.yaml | 29 ++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/yaml/sandbox/values-sandbox-gitea.yaml b/yaml/sandbox/values-sandbox-gitea.yaml index 949cc63..1d7be11 100644 --- a/yaml/sandbox/values-sandbox-gitea.yaml +++ b/yaml/sandbox/values-sandbox-gitea.yaml @@ -4,6 +4,13 @@ # registry whose auth behaviour was checked, but they have not been applied to a # Simpl cluster. Confirm and amend after the first deployment. # +# VERSION SKEW, unresolved. These images carry dagster 1.13.19 (requirements.txt +# pins no upper bound, so the build took whatever was current). The sandbox +# control plane is 1.12.8. A code server is a gRPC server the webserver and +# daemon call into, so the two versions have to be compatible; a minor-version +# gap is not a supported configuration. Pin dagster to the control plane version +# and rebuild before reading a failure here as a bug in this service. +# # Use these instead of the code.europa.eu references in # yaml/values-dagster-distributed-execution.yaml and # yaml/loosely-coupled/values-pipes-payload.yaml when deploying to the @@ -26,17 +33,33 @@ # The payload namespace needs it too: PipesK8sClient creates that Job, and a # missing pull secret there leaves the op waiting on a pod that never starts, # which surfaces as pod_wait_timeout rather than as an image error. +# +# PULL SECRET PLACEMENT. Checked against the chart templates in dagster 1.12.8, +# which is what the sandbox runs. There is no per-deployment imagePullSecrets +# field - deployment-user.yaml reads the SUBCHART value and the run launcher +# helper reads the PARENT value - so a pull secret nested under a deployments[] +# entry is silently discarded, and the pod fails with ImagePullBackOff against a +# values file that looks correct. +# +# Both keys below therefore apply to every code location in the release, not +# just this one. Extra pull secrets are ignored for registries they do not match, +# so the existing code locations are unaffected. dagster: + # Run pods, webserver and daemon. + imagePullSecrets: + - name: gitea-registry + dagster-user-deployments: + # Code server pods. + imagePullSecrets: + - name: gitea-registry deployments: - name: distributed-execution image: repository: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution tag: 5122da4691f9 pullPolicy: IfNotPresent - imagePullSecrets: - - name: gitea-registry env: - name: PIPES_PAYLOAD_IMAGE value: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution-payload:5122da4691f9 @@ -46,8 +69,6 @@ dagster: runLauncher: config: k8sRunLauncher: - imagePullSecrets: - - name: gitea-registry runK8sConfig: containerConfig: env: From 515eef7736f7f0d633efdb4fe2b80e6b3b8a1703 Mon Sep 17 00:00:00 2001 From: ILay Date: Mon, 31 Aug 2026 17:46:37 +0200 Subject: [PATCH 10/22] [SIMPL-30451] Add a standalone cluster probe for the pipes transport Runs loosely_coupled_k8s_job from one throwaway pod with only the RBAC the pipes client needs, clearing readiness checks L4-L9 without deploying a code location, a webserver or a database. Because the pod is its own control plane it also sidesteps the 1.13.19 vs 1.12.8 skew that blocks registering this service against the sandbox Dagster. Verified in the container beforehand: the CLI form reaches RUN_SUCCESS, the multiprocess executor fans out to four dynamic steps, and PipesK8sClient selects in-cluster credentials from KUBERNETES_SERVICE_HOST, so no code change is needed to run it in a pod. Changelog: added --- .../user-guide/distributed-execution-guide.md | 1 + documents/user-guide/readiness-checklist.md | 5 + yaml/loosely-coupled/probe-pipes-k8s.yaml | 170 ++++++++++++++++++ 3 files changed, 176 insertions(+) create mode 100644 yaml/loosely-coupled/probe-pipes-k8s.yaml diff --git a/documents/user-guide/distributed-execution-guide.md b/documents/user-guide/distributed-execution-guide.md index ab2b94f..8c64d45 100644 --- a/documents/user-guide/distributed-execution-guide.md +++ b/documents/user-guide/distributed-execution-guide.md @@ -397,6 +397,7 @@ setting. There is no UI control that switches a workflow between the two pattern | `yaml/loosely-coupled/values-pipes-payload.yaml` | Payload image reference and target namespace | | `yaml/sandbox/values-sandbox-gitea.yaml` | Sandbox registry coordinates, pull secret, and the SHA both images share | | `yaml/loosely-coupled/rbac-pipes-dispatch.yaml` | Permissions required by the dispatching pod | +| `yaml/loosely-coupled/probe-pipes-k8s.yaml` | Standalone cluster probe for the pipes transport (checklist L4–L9) | | `yaml/values-dagster-distributed-execution.yaml` | Code location image and entry point | The Launchpad can override *run configuration* — op config, resource config, tags diff --git a/documents/user-guide/readiness-checklist.md b/documents/user-guide/readiness-checklist.md index f187b43..7995271 100644 --- a/documents/user-guide/readiness-checklist.md +++ b/documents/user-guide/readiness-checklist.md @@ -58,6 +58,11 @@ location image. Checks L4–L9 require a cluster. L1–L3, L10 and L11 run on a laptop and should gate every change to the payload or the dispatching op. +`yaml/loosely-coupled/probe-pipes-k8s.yaml` clears L4–L9 in a single run from a +throwaway namespace, without deploying a code location or a Dagster control +plane. Prefer it over assembling the cluster checks by hand: the RBAC it grants +is exactly the set L5 and L6 ask about, so a failure localises immediately. + --- ## 4. Common misconfiguration symptoms diff --git a/yaml/loosely-coupled/probe-pipes-k8s.yaml b/yaml/loosely-coupled/probe-pipes-k8s.yaml new file mode 100644 index 0000000..d35cb9c --- /dev/null +++ b/yaml/loosely-coupled/probe-pipes-k8s.yaml @@ -0,0 +1,170 @@ +# Cluster probe for the loosely coupled Kubernetes transport. +# +# Runs `loosely_coupled_k8s_job` from a single throwaway pod. The point is to +# prove the part of this service that no test can reach: that the dispatching +# process creates payload Jobs and that messages come back over the pod log +# stream. It clears readiness checks L4-L9 in one run. +# +# Deliberately NOT a Dagster deployment. No webserver, no daemon, no database, +# no code location registration. That sidesteps the control-plane version skew - +# the pod is its own control plane, so the 1.13.19 images here have nothing to be +# compatible with. Everything lives in one namespace you delete afterwards. +# +# --- Before applying ------------------------------------------------------- +# +# 1. Pull secret. The registry rejects anonymous pulls, so both this pod and the +# payload Jobs it creates need credentials. Use a token with read:package. +# +# kubectl -n distexec-probe create secret docker-registry gitea-registry \ +# --docker-server=gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu \ +# --docker-username= \ +# --docker-password= +# +# 2. Payload pods inherit the pull secret from the default service account. +# PipesK8sClient does not set serviceAccountName on the Jobs it creates, so +# they run as `default`, and this service does not yet pass imagePullSecrets +# through base_pod_spec: +# +# kubectl -n distexec-probe patch serviceaccount default \ +# -p '{"imagePullSecrets":[{"name":"gitea-registry"}]}' +# +# Skip this and the payload pod never starts. That surfaces as the op waiting +# until pod_wait_timeout, which reads like a hung workload rather than a +# missing credential. +# +# Order does not matter much: apply this file first and the dispatcher pod sits +# in ImagePullBackOff until the secret appears, then pulls on the kubelet's next +# retry. The default service account only has to be patched before the first +# payload Job is created, which is after the dispatcher starts. +# +# kubectl apply -f yaml/loosely-coupled/probe-pipes-k8s.yaml +# +# `--dry-run=server` reports "namespaces distexec-probe not found" for the four +# namespaced objects. That is the dry run declining to create the namespace it +# would need, not a fault in the manifests; `--dry-run=client` passes clean. +# +# --- Reading the result ---------------------------------------------------- +# +# kubectl -n distexec-probe logs -f job/pipes-probe +# kubectl -n distexec-probe get jobs -l app.kubernetes.io/name=distributed-execution-payload +# +# Success is RUN_SUCCESS plus four payload Jobs, one per work unit. The +# summarise_results output carries contributing_workers; on a cluster those +# should be four distinct pod hostnames, which is the claim the guide makes and +# a laptop cannot demonstrate. +# +# A run that reaches RUN_FAILURE with "no pipes messages received" means the +# payload ran but its log stream never came back - check the pods/log rule +# below before suspecting the payload. +# +# --- Teardown -------------------------------------------------------------- +# +# kubectl delete namespace distexec-probe +# +# NOT CLUSTER-VERIFIED. Written against the published images and the RBAC the +# pipes client is documented to need, but not yet applied to a cluster. + +apiVersion: v1 +kind: Namespace +metadata: + name: distexec-probe + labels: + app.kubernetes.io/name: distributed-execution + app.kubernetes.io/component: probe +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: pipes-dispatcher + namespace: distexec-probe +imagePullSecrets: + - name: gitea-registry +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: pipes-dispatcher + namespace: distexec-probe +rules: + - apiGroups: ["batch"] + resources: ["jobs", "jobs/status"] + verbs: ["create", "get", "list", "watch", "delete"] + # pods/log is the message channel for PipesK8sPodLogsMessageReader, not just + # an observability convenience. Without it the payload runs to completion and + # reports nothing, and the op fails on an empty message list. + - apiGroups: [""] + resources: ["pods", "pods/log", "pods/status"] + verbs: ["get", "list", "watch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: pipes-dispatcher + namespace: distexec-probe +subjects: + - kind: ServiceAccount + name: pipes-dispatcher + namespace: distexec-probe +roleRef: + kind: Role + name: pipes-dispatcher + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: pipes-probe + namespace: distexec-probe +spec: + # One shot. A retry would obscure which attempt produced which payload Jobs. + backoffLimit: 0 + activeDeadlineSeconds: 1800 + template: + metadata: + labels: + app.kubernetes.io/name: distributed-execution + app.kubernetes.io/component: probe + spec: + restartPolicy: Never + serviceAccountName: pipes-dispatcher + securityContext: + runAsNonRoot: true + runAsUser: 1000 + runAsGroup: 1000 + # Makes the emptyDir writable by UID 1000, which DAGSTER_HOME needs. + fsGroup: 1000 + containers: + - name: dispatcher + image: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution:5122da4691f9 + imagePullPolicy: IfNotPresent + command: + - dagster + - job + - execute + - -f + - src/distributed_execution/repository.py + - -j + - loosely_coupled_k8s_job + env: + - name: DAGSTER_HOME + value: /dagster-home + # Must be the same commit as the image above. + - name: PIPES_PAYLOAD_IMAGE + value: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution-payload:5122da4691f9 + - name: PIPES_PAYLOAD_NAMESPACE + value: distexec-probe + volumeMounts: + - name: dagster-home + mountPath: /dagster-home + resources: + requests: + cpu: 200m + memory: 512Mi + limits: + cpu: "1" + memory: 1Gi + volumes: + # The job runs on multiprocess_executor, so the instance has to be a real + # sqlite instance on disk rather than an ephemeral one. + - name: dagster-home + emptyDir: {} From e686df5710b54b3f127f6aac991ba86711609d0e Mon Sep 17 00:00:00 2001 From: ILay Date: Mon, 31 Aug 2026 18:40:06 +0200 Subject: [PATCH 11/22] [SIMPL-30451] Harden the probe pod against restricted Pod Security The int cluster did not enforce Pod Security when this was written - no namespace labels, no Kyverno or Gatekeeper. The sandbox was NOT checked; there is no kubeconfig context for it. A cluster that does enforce it rejects the pod outright rather than degrading, which is slow to diagnose from an unrelated namespace. Records the matching gap it cannot fix: PipesK8sClient builds the payload pod specs, and this service passes no securityContext through base_pod_spec, so a restricted namespace would admit the dispatcher and reject every payload it creates. Changelog: changed --- yaml/loosely-coupled/probe-pipes-k8s.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/yaml/loosely-coupled/probe-pipes-k8s.yaml b/yaml/loosely-coupled/probe-pipes-k8s.yaml index d35cb9c..3acf329 100644 --- a/yaml/loosely-coupled/probe-pipes-k8s.yaml +++ b/yaml/loosely-coupled/probe-pipes-k8s.yaml @@ -43,6 +43,13 @@ # namespaced objects. That is the dry run declining to create the namespace it # would need, not a fault in the manifests; `--dry-run=client` passes clean. # +# LIMITATION under a restricted Pod Security namespace. This pod satisfies the +# restricted standard, but the payload Jobs do not: PipesK8sClient builds those +# pod specs and this service passes no securityContext through base_pod_spec, so +# such a namespace would admit the dispatcher and reject every payload it +# creates. Leave the probe namespace unlabelled, or add the fields to +# base_pod_spec in dispatch_external_work_k8s first. +# # --- Reading the result ---------------------------------------------------- # # kubectl -n distexec-probe logs -f job/pipes-probe @@ -133,10 +140,20 @@ spec: runAsGroup: 1000 # Makes the emptyDir writable by UID 1000, which DAGSTER_HOME needs. fsGroup: 1000 + seccompProfile: + type: RuntimeDefault containers: - name: dispatcher image: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution:5122da4691f9 imagePullPolicy: IfNotPresent + # Satisfies the restricted Pod Security standard. The int cluster did + # not enforce it when this was written and the sandbox was not checked; + # a cluster that does enforce it rejects the pod outright. + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL command: - dagster - job From 96caa3f81bb555543e0904c739b79877bcfee41a Mon Sep 17 00:00:00 2001 From: ILay Date: Mon, 31 Aug 2026 19:41:26 +0200 Subject: [PATCH 12/22] [SIMPL-30451] Verify the Kubernetes pipes transport on the sandbox Run cff9b348-bfc3-4ac1-ab51-a94892b8e3a0 of loosely_coupled_k8s_job reached RUN_SUCCESS in dataprovider01 on sandbox-cat-dat: four payload Jobs, four distinct payload pod hostnames in contributing_hosts, and the payload log lines in the run log. Checks L4-L10 are now observed rather than derived. Torn down afterwards; the namespace was left as it was found. Corrects two claims that were wrong. The registry does NOT require a pull secret - a bare GET returns 401, but that is the opening move of the Docker token handshake, and completing it anonymously returns the manifest for both images. And PIPES_PAYLOAD_NAMESPACE was set to a namespace named dagster, which does not exist on that cluster; the release is called dagster but runs in dataprovider01. Adds the sandbox probe variant. The generic probe cannot run there: sandbox access is Rancher project-scoped, so a new namespace grants its creator nothing and Role creation is denied everywhere. It is not needed either, since dagster-role already carries the exact pipes permissions. Changelog: added --- .../user-guide/distributed-execution-guide.md | 26 ++-- documents/user-guide/readiness-checklist.md | 39 ++++-- yaml/loosely-coupled/probe-pipes-k8s.yaml | 41 +++--- yaml/sandbox/probe-pipes-k8s-sandbox.yaml | 124 ++++++++++++++++++ yaml/sandbox/values-sandbox-gitea.yaml | 50 +++---- 5 files changed, 204 insertions(+), 76 deletions(-) create mode 100644 yaml/sandbox/probe-pipes-k8s-sandbox.yaml diff --git a/documents/user-guide/distributed-execution-guide.md b/documents/user-guide/distributed-execution-guide.md index 8c64d45..e8f0411 100644 --- a/documents/user-guide/distributed-execution-guide.md +++ b/documents/user-guide/distributed-execution-guide.md @@ -8,8 +8,10 @@ integration pattern for a Dagster workflow on the Simpl orchestration platform. > implementations in this repository. The tightly coupled setup and the loosely > coupled **subprocess** transport are verified end to end, including runs > launched from the Dagster UI — see [section 5.6](#56-what-a-verified-run-actually-produced). -> The loosely coupled **Kubernetes** transport is implemented and reviewed but -> has not yet been run against a cluster; statements specific to it are marked +> The loosely coupled **Kubernetes** transport was run on sandbox-cat-dat on +> 2026-08-31 and reached `RUN_SUCCESS`; see the readiness checklist for the +> evidence. What remains unproven on a cluster is the *tightly* coupled +> Kubernetes path — `k8s_job_executor` — whose rows stay marked > **NOT CLUSTER-VERIFIED**. See [Outstanding work](#8-outstanding-work). --- @@ -378,10 +380,12 @@ empty result. If your cluster's logging setup makes that transport unreliable, switch to an object-storage message reader, which needs a bucket plus credentials on both sides. -> **NOT CLUSTER-VERIFIED.** The Kubernetes transport above is implemented and -> its RBAC and configuration are recorded, but it has not yet been run against a -> Simpl cluster. The subprocess transport, which exercises the identical payload -> and the identical message-parsing path, is verified by the test suite. +> **CLUSTER-VERIFIED 2026-08-31.** Run `cff9b348…` of `loosely_coupled_k8s_job` +> reached `RUN_SUCCESS` on sandbox-cat-dat. Four payload Jobs were created, one +> per work unit, and `contributing_hosts` held four distinct payload pod names — +> so the work demonstrably ran off the orchestrator. The payload's log lines +> reached the run log, which is the pod log stream serving as the message +> channel exactly as described above. ### 5.4 Where setup selection is persisted @@ -398,6 +402,7 @@ setting. There is no UI control that switches a workflow between the two pattern | `yaml/sandbox/values-sandbox-gitea.yaml` | Sandbox registry coordinates, pull secret, and the SHA both images share | | `yaml/loosely-coupled/rbac-pipes-dispatch.yaml` | Permissions required by the dispatching pod | | `yaml/loosely-coupled/probe-pipes-k8s.yaml` | Standalone cluster probe for the pipes transport (checklist L4–L9) | +| `yaml/sandbox/probe-pipes-k8s-sandbox.yaml` | The same probe for sandbox-cat-dat, where project-scoped access forbids creating namespaces and RBAC | | `yaml/values-dagster-distributed-execution.yaml` | Code location image and entry point | The Launchpad can override *run configuration* — op config, resource config, tags @@ -507,17 +512,18 @@ Tracked under SIMPL-30451. |---|---|---| | Execution-target choices, prerequisites, workflow-level documentation | AC1 | Complete | | Comparison, environment-fit indicators, trade-offs | AC2 | Complete | -| Readiness checklist and evidence mapping | AC3 | Complete; K8s pipes checks not cluster-verified | -| Misconfiguration symptoms and corrections | AC3 | Complete; K8s pipes symptoms not cluster-verified | +| Readiness checklist and evidence mapping | AC3 | Complete; tightly coupled K8s executor rows not cluster-verified | +| Misconfiguration symptoms and corrections | AC3 | Complete; tightly coupled K8s symptoms not cluster-verified | | Configuration constructs and persistence | AC4 | Complete | | Before-and-after example, tightly coupled | AC4 | Complete | | Before-and-after example, switching to loosely coupled | AC4 | Complete | | Runnable tightly coupled reference implementations | AC4 | Complete | -| Runnable loosely coupled reference implementation | AC4 | Complete (subprocess verified, K8s not cluster-run) | +| Runnable loosely coupled reference implementation | AC4 | Complete (subprocess and Kubernetes transports both verified) | | Both images build; payload image passes the isolation check (L11) | Tech details | Complete | | Locally runnable jobs launched from the Dagster UI, evidence recorded in section 5.6 | Tech details | Complete | | Payload image published to a container registry | Tech details | Complete on the sandbox Gitea registry; the GitLab registry still pending | | GitLab pipeline builds both images | Tech details | **Pending** — the shared `ds.gitlab-ci.yml` template builds one image from the root Dockerfile | -| End-to-end run of `loosely_coupled_k8s_job` on a cluster | Tech details | **Pending** | +| End-to-end run of `loosely_coupled_k8s_job` on a cluster | Tech details | Complete — sandbox-cat-dat, 2026-08-31, run `cff9b348…`; see the readiness checklist | +| `distributed-execution` registered as a code location on a platform Dagster | Tech details | **Pending** — blocked on the 1.13.19 vs 1.12.8 control plane skew | | Screenshots of UI surfaces | Tech details | **Pending** — needs a deployed platform instance, not a local dev server | | Platform architecture document update | Tech details | **Pending** | diff --git a/documents/user-guide/readiness-checklist.md b/documents/user-guide/readiness-checklist.md index 7995271..9d4e928 100644 --- a/documents/user-guide/readiness-checklist.md +++ b/documents/user-guide/readiness-checklist.md @@ -7,11 +7,11 @@ Run these checks **before the first execution** of a workflow, and again after a change to the run launcher, the executor, the target namespace or the code location image. -> **NOT CLUSTER-VERIFIED.** Checks L4–L9 and the Kubernetes rows of section 4.3 -> are derived from the implemented reference but have not yet been run against a -> Simpl cluster. Checks L1–L3, L10 and L11, which exercise the payload contract, -> the message-parsing path, per-unit dispatch and image-level isolation, are -> verified locally. +> **L4–L10 were cleared on sandbox-cat-dat on 2026-08-31.** Checks L1–L3 and L11, +> which exercise the payload contract, the message-parsing path and image-level +> isolation, are verified locally. What remains unverified on a cluster is the +> **tightly coupled** Kubernetes path — the T rows and the Kubernetes rows of +> section 4.3 — which uses `k8s_job_executor` rather than the pipes client. --- @@ -46,7 +46,7 @@ location image. | L1 | Payload contract is intact | `uv run pytest tests/test_loosely_coupled.py` | `test_payload_does_not_import_dagster` passes — the payload imports `dagster_pipes` only | | L2 | Pipes round trip works | Launch `loosely_coupled_subprocess_job` | Run reaches `SUCCESS`; run logs contain the payload's `External payload started on …` line, proving `pipes.log` crossed the channel | | L3 | Silence is treated as failure | Same test module | `test_silent_message_path_is_treated_as_failure` passes — an empty message list raises rather than yielding an empty result | -| L4 | Payload image is pullable by the target cluster | `kubectl -n run pull-probe --image= --restart=Never --command -- true` | Pod reaches `Completed`; no `ImagePullBackOff`. The sandbox Gitea registry rejects anonymous pulls, so the payload namespace needs its own pull secret — see `yaml/sandbox/values-sandbox-gitea.yaml` | +| L4 | Payload image is pullable by the target cluster | `kubectl -n run pull-probe --image= --restart=Never --command -- true` | Pod reaches `Completed`; no `ImagePullBackOff`. Both Gitea images pull anonymously — a bare registry `GET` returns 401, but that is the start of the Docker token handshake, not a refusal | | L5 | Dispatcher can create Jobs in the payload namespace | `kubectl -n auth can-i create jobs --as=system:serviceaccount:dagster:dagster-dev` | Returns `yes` | | L6 | Dispatcher can read pod logs — **the message channel** | `kubectl -n auth can-i get pods/log --as=system:serviceaccount:dagster:dagster-dev` | Returns `yes`. A `no` here breaks reporting *without* failing the workload | | L7 | Payload Job is actually created | Launch `loosely_coupled_k8s_job`, then `kubectl -n get jobs -l app.kubernetes.io/name=distributed-execution-payload` | One Job per dispatch, labelled `dagster/execution-target=loosely-coupled` | @@ -63,6 +63,21 @@ throwaway namespace, without deploying a code location or a Dagster control plane. Prefer it over assembling the cluster checks by hand: the RBAC it grants is exactly the set L5 and L6 ask about, so a failure localises immediately. +**L4–L10 were cleared on sandbox-cat-dat on 2026-08-31** using the sandbox +variant `yaml/sandbox/probe-pipes-k8s-sandbox.yaml`. Run +`cff9b348-bfc3-4ac1-ab51-a94892b8e3a0` reached `RUN_SUCCESS` in `dataprovider01`: +four payload Jobs, four distinct payload pod hostnames in `contributing_hosts`, +and the payload's `External payload started on …` lines in the dispatcher's log, +which is the pod log stream doing its job as the message channel. No credentials +were needed anywhere. + +One trap the run exposed. The platform's `dagster-svc-account` sets +`automountServiceAccountToken: false`, and the Dagster chart overrides it to +`true` on every pod it manages. A hand-written pod that does not is a plausible +future failure: the pipes client selects in-cluster authentication correctly and +then fails on `Service token file does not exist`, which points at Kubernetes +rather than at the omission. + --- ## 4. Common misconfiguration symptoms @@ -101,9 +116,15 @@ is exactly the set L5 and L6 ask about, so a failure localises immediately. | Payload receives no `units` | `extras` key mismatch between dispatcher and `pipes.get_extra()` | Both sides must use the same key; a typo yields a `KeyError` inside the payload | | Run cancelled in the UI, payload pod keeps running | Cancellation is not propagated to dispatched workloads automatically | `delete_pod_on_completion` handles the normal path; for cancellation, verify orphaned Jobs and add a cleanup sensor | -> **NOT CLUSTER-VERIFIED.** Rows referencing Kubernetes behaviour follow from the -> implemented reference and the dagster-k8s API, but have not been observed on a -> Simpl cluster. Confirm and amend after the first cluster run. +> **Partly observed.** The pipes rows were exercised on sandbox-cat-dat on +> 2026-08-31. Rows describing the tightly coupled `k8s_job_executor` still follow +> from the dagster-k8s API rather than from observation. +> +> One symptom the cluster run added, absent from the table above: a service +> account with `automountServiceAccountToken: false` — which the platform's +> `dagster-svc-account` uses — makes the pipes client fail with +> `ConfigException: Service token file does not exist`. It reads as a Kubernetes +> fault; the fix is `automountServiceAccountToken: true` on the pod. --- diff --git a/yaml/loosely-coupled/probe-pipes-k8s.yaml b/yaml/loosely-coupled/probe-pipes-k8s.yaml index 3acf329..cadfb70 100644 --- a/yaml/loosely-coupled/probe-pipes-k8s.yaml +++ b/yaml/loosely-coupled/probe-pipes-k8s.yaml @@ -12,33 +12,24 @@ # # --- Before applying ------------------------------------------------------- # -# 1. Pull secret. The registry rejects anonymous pulls, so both this pod and the -# payload Jobs it creates need credentials. Use a token with read:package. +# Credentials, only if your registry needs them. The Gitea images referenced +# below do NOT: a bare GET returns 401, but that is the start of the Docker +# token handshake, and completing it anonymously returns the manifest. A probe +# pod carrying no credentials pulled and ran on the sandbox on 2026-08-31. # -# kubectl -n distexec-probe create secret docker-registry gitea-registry \ -# --docker-server=gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu \ -# --docker-username= \ -# --docker-password= -# -# 2. Payload pods inherit the pull secret from the default service account. -# PipesK8sClient does not set serviceAccountName on the Jobs it creates, so -# they run as `default`, and this service does not yet pass imagePullSecrets -# through base_pod_spec: -# -# kubectl -n distexec-probe patch serviceaccount default \ -# -p '{"imagePullSecrets":[{"name":"gitea-registry"}]}' -# -# Skip this and the payload pod never starts. That surfaces as the op waiting -# until pod_wait_timeout, which reads like a hung workload rather than a -# missing credential. -# -# Order does not matter much: apply this file first and the dispatcher pod sits -# in ImagePullBackOff until the secret appears, then pulls on the kubelet's next -# retry. The default service account only has to be patched before the first -# payload Job is created, which is after the dispatcher starts. +# If you point this at a registry that does require authentication, remember the +# payload Jobs need it too. PipesK8sClient sets no serviceAccountName, so they +# run as `default` and inherit nothing from the pod below; patch that account or +# pass imagePullSecrets through base_pod_spec in dispatch_external_work_k8s. A +# payload pod that cannot pull leaves the op waiting until pod_wait_timeout, +# which reads like a hung workload rather than a missing credential. # # kubectl apply -f yaml/loosely-coupled/probe-pipes-k8s.yaml # +# On sandbox-cat-dat use yaml/sandbox/probe-pipes-k8s-sandbox.yaml instead: that +# cluster's access is Rancher project-scoped, so this file's namespace and RBAC +# cannot be created there. The sandbox variant needs neither. +# # `--dry-run=server` reports "namespaces distexec-probe not found" for the four # namespaced objects. That is the dry run declining to create the namespace it # would need, not a fault in the manifests; `--dry-run=client` passes clean. @@ -134,6 +125,10 @@ spec: spec: restartPolicy: Never serviceAccountName: pipes-dispatcher + # A service account with automountServiceAccountToken: false - which the + # platform's dagster-svc-account uses - leaves the pipes client selecting + # in-cluster auth and then failing on "Service token file does not exist". + automountServiceAccountToken: true securityContext: runAsNonRoot: true runAsUser: 1000 diff --git a/yaml/sandbox/probe-pipes-k8s-sandbox.yaml b/yaml/sandbox/probe-pipes-k8s-sandbox.yaml new file mode 100644 index 0000000..c5e1feb --- /dev/null +++ b/yaml/sandbox/probe-pipes-k8s-sandbox.yaml @@ -0,0 +1,124 @@ +# Sandbox variant of the pipes cluster probe. +# +# Runs `loosely_coupled_k8s_job` as a single Job in dataprovider01, reusing the +# platform's own dagster-svc-account. Use this instead of +# yaml/loosely-coupled/probe-pipes-k8s.yaml on sandbox-cat-dat. +# +# WHY IT LOOKS DIFFERENT. The generic probe creates its own namespace, service +# account and RBAC. That cannot run here: sandbox access is Rancher +# project-scoped, so a freshly created namespace belongs to no project and the +# creator has no rights inside it, and `create roles` is denied in every +# namespace. Verified with `kubectl auth can-i`, not assumed. +# +# It does not need them anyway. The `dagster-role` bound to dagster-svc-account +# already grants batch/jobs (full verbs), jobs/status, pods, events, and +# pods/log - exactly the set the pipes client needs. Readiness checks L5 and L6 +# therefore already pass on this cluster; read the live Role to confirm: +# +# kubectl -n dataprovider01 get role dagster-role -o yaml +# +# WHAT THIS COSTS. Unlike the generic probe this is NOT isolated. It borrows a +# live service account and leaves payload Jobs in a shared namespace until they +# are deleted. Nothing it does is persistent, but it is visible to anyone else +# working in dataprovider01. +# +# --- Credentials: none needed ---------------------------------------------- +# +# Both Gitea images are anonymously pullable. A bare GET to the registry returns +# 401, which looks like a refusal but is just the start of the Docker token +# handshake; completing it anonymously and re-requesting the manifest returns +# 200 for both images. Verify with: +# +# TOK=$(curl -sS "https://gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/v2/token?service=container_registry&scope=repository:j.r/distributed-execution:pull" | jq -r .token) +# curl -sS -o /dev/null -w '%{http_code}\n' -H "Authorization: Bearer $TOK" \ +# https://gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/v2/j.r/distributed-execution/manifests/5122da4691f9 +# +# This also means the payload Jobs need nothing: they run as the `default` +# service account, which carries no pull secret, and do not need one. +# +# --- Running --------------------------------------------------------------- +# +# kubectl -n dataprovider01 apply -f yaml/sandbox/probe-pipes-k8s-sandbox.yaml +# kubectl -n dataprovider01 logs -f job/distexec-pipes-probe +# kubectl -n dataprovider01 get jobs -l app.kubernetes.io/name=distributed-execution-payload +# +# --- Teardown -------------------------------------------------------------- +# +# kubectl -n dataprovider01 delete job distexec-pipes-probe +# kubectl -n dataprovider01 delete jobs -l app.kubernetes.io/name=distributed-execution-payload +# +# VERIFIED 2026-08-31 on sandbox-cat-dat / dataprovider01. Run +# cff9b348-bfc3-4ac1-ab51-a94892b8e3a0 reached RUN_SUCCESS: four payload Jobs, +# four distinct payload pod hostnames in contributing_hosts, messages returned +# over the pod log stream. Checks L4-L10 pass. Torn down afterwards; the +# namespace was left as it was found. + +apiVersion: batch/v1 +kind: Job +metadata: + name: distexec-pipes-probe + namespace: dataprovider01 + labels: + app.kubernetes.io/name: distributed-execution + app.kubernetes.io/component: probe +spec: + backoffLimit: 0 + activeDeadlineSeconds: 1800 + template: + metadata: + labels: + app.kubernetes.io/name: distributed-execution + app.kubernetes.io/component: probe + spec: + restartPolicy: Never + # Already holds jobs + pods/log; this probe grants itself nothing. + serviceAccountName: dagster-svc-account + # dagster-svc-account sets automountServiceAccountToken: false, so every + # pod that uses it must opt back in - the chart does this for its own + # deployments. Without it the pipes client picks in-cluster auth correctly + # and then fails on "Service token file does not exist". + automountServiceAccountToken: true + securityContext: + runAsNonRoot: true + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + seccompProfile: + type: RuntimeDefault + containers: + - name: dispatcher + image: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution:5122da4691f9 + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + command: + - dagster + - job + - execute + - -f + - src/distributed_execution/repository.py + - -j + - loosely_coupled_k8s_job + env: + - name: DAGSTER_HOME + value: /dagster-home + - name: PIPES_PAYLOAD_IMAGE + value: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution-payload:5122da4691f9 + - name: PIPES_PAYLOAD_NAMESPACE + value: dataprovider01 + volumeMounts: + - name: dagster-home + mountPath: /dagster-home + resources: + requests: + cpu: 200m + memory: 512Mi + limits: + cpu: "1" + memory: 1Gi + volumes: + - name: dagster-home + emptyDir: {} diff --git a/yaml/sandbox/values-sandbox-gitea.yaml b/yaml/sandbox/values-sandbox-gitea.yaml index 1d7be11..8ac1b30 100644 --- a/yaml/sandbox/values-sandbox-gitea.yaml +++ b/yaml/sandbox/values-sandbox-gitea.yaml @@ -1,8 +1,9 @@ # Sandbox deployment values - Gitea registry. # -# NOT CLUSTER-VERIFIED. These values are written against images that exist and a -# registry whose auth behaviour was checked, but they have not been applied to a -# Simpl cluster. Confirm and amend after the first deployment. +# NOT CLUSTER-VERIFIED. The images and the registry behaviour here are confirmed +# - a probe pod ran from them on the sandbox on 2026-08-31 - but these values +# have never been applied as a code location. Registering this service against +# the sandbox Dagster is still blocked on the version skew below. # # VERSION SKEW, unresolved. These images carry dagster 1.13.19 (requirements.txt # pins no upper bound, so the build took whatever was current). The sandbox @@ -21,39 +22,18 @@ # the version lock: the code location and the payload it dispatches must come # from one commit. Bump both together or not at all. # -# The sandbox Gitea registry requires authentication - an anonymous manifest GET -# returns 401 - so a pull secret is required in every namespace that pulls either -# image. Create it with a Gitea access token that has read:package scope: +# The Gitea images are anonymously pullable, so NO pull secret is needed. A bare +# GET to the registry returns 401, which reads as a refusal but is only the start +# of the Docker token handshake; completing it anonymously and re-requesting the +# manifest returns 200 for both images. This was confirmed on 2026-08-31, and a +# probe pod carrying no credentials pulled and ran on the sandbox. # -# kubectl -n create secret docker-registry gitea-registry \ -# --docker-server=gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu \ -# --docker-username= \ -# --docker-password= -# -# The payload namespace needs it too: PipesK8sClient creates that Job, and a -# missing pull secret there leaves the op waiting on a pod that never starts, -# which surfaces as pod_wait_timeout rather than as an image error. -# -# PULL SECRET PLACEMENT. Checked against the chart templates in dagster 1.12.8, -# which is what the sandbox runs. There is no per-deployment imagePullSecrets -# field - deployment-user.yaml reads the SUBCHART value and the run launcher -# helper reads the PARENT value - so a pull secret nested under a deployments[] -# entry is silently discarded, and the pod fails with ImagePullBackOff against a -# values file that looks correct. -# -# Both keys below therefore apply to every code location in the release, not -# just this one. Extra pull secrets are ignored for registries they do not match, -# so the existing code locations are unaffected. +# An earlier revision of this file required a pull secret on both the deployment +# and the run launcher. That was wrong, and wrong in an expensive direction: it +# sent the reader looking for credentials that do not exist. dagster: - # Run pods, webserver and daemon. - imagePullSecrets: - - name: gitea-registry - dagster-user-deployments: - # Code server pods. - imagePullSecrets: - - name: gitea-registry deployments: - name: distributed-execution image: @@ -63,8 +43,10 @@ dagster: env: - name: PIPES_PAYLOAD_IMAGE value: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution-payload:5122da4691f9 + # The sandbox release is named `dagster` but lives in dataprovider01; + # there is no namespace called `dagster` on that cluster. - name: PIPES_PAYLOAD_NAMESPACE - value: dagster + value: dataprovider01 runLauncher: config: @@ -75,4 +57,4 @@ dagster: - name: PIPES_PAYLOAD_IMAGE value: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution-payload:5122da4691f9 - name: PIPES_PAYLOAD_NAMESPACE - value: dagster + value: dataprovider01 From 18cc46d132184e2f48dda1995cf35c460c82f6f5 Mon Sep 17 00:00:00 2001 From: ILay Date: Mon, 31 Aug 2026 19:57:38 +0200 Subject: [PATCH 13/22] [SIMPL-30451] Assess the tightly coupled path against the sandbox T2, T3, T5 and T8 are confirmed from the live dagster-instance ConfigMap and from dagster-role. None of the T checks could be executed: the tightly coupled path needs this code location registered on the platform Dagster, and unlike the pipes transport it cannot run from a standalone pod, because every step pod connects to the metadata database itself and so they must share instance storage rather than a local SQLite file. C6 fails on that cluster and explains why no run has ever executed there. The launcher sends run pods to namespace dagster while its instance_config_map, postgres_password_secret and dagster-shared-pvc all live in dataprovider01; those references do not cross namespaces. dataprovider01 holds no pods labelled dagster/run-id and the daemon log shows no launch activity. C6 now tells the reader to check the launcher's namespace-local dependencies, not just the namespace. Changelog: changed --- documents/user-guide/readiness-checklist.md | 48 ++++++++++++++++++--- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/documents/user-guide/readiness-checklist.md b/documents/user-guide/readiness-checklist.md index 9d4e928..d158d46 100644 --- a/documents/user-guide/readiness-checklist.md +++ b/documents/user-guide/readiness-checklist.md @@ -9,9 +9,10 @@ location image. > **L4–L10 were cleared on sandbox-cat-dat on 2026-08-31.** Checks L1–L3 and L11, > which exercise the payload contract, the message-parsing path and image-level -> isolation, are verified locally. What remains unverified on a cluster is the -> **tightly coupled** Kubernetes path — the T rows and the Kubernetes rows of -> section 4.3 — which uses `k8s_job_executor` rather than the pipes client. +> isolation, are verified locally. The **tightly coupled** Kubernetes path has +> been assessed against the same cluster but not executed — T2, T3, T5 and T8 +> are confirmed from the live instance configuration and C6 fails there. See +> [section 2.1](#21-sandbox-state-2026-08-31). --- @@ -23,8 +24,8 @@ location image. | C2 | Jobs are registered | Dagster UI → **Jobs** | The jobs listed in the guide's section 5.5 appear under the code location | | C3 | Image tag matches the intended release | `kubectl -n dagster get deploy -l dagster/code-location=distributed-execution -o jsonpath='{.items[*].spec.template.spec.containers[*].image}'` | Tag equals the version in `pipeline.variables.sh`; never `latest` | | C4 | Image architecture matches the nodes | `docker manifest inspect ` | Includes `linux/amd64`; a manifest with only `linux/arm64` produces `no match for platform` at pull time | -| C5 | Run launcher type is as intended | `kubectl -n dagster get cm dagster-instance -o yaml` | `run_launcher` block shows `K8sRunLauncher` and the expected `job_namespace` | -| C6 | Target namespace exists and is schedulable | `kubectl get ns ` and `kubectl -n get resourcequota` | Namespace is `Active`; remaining quota exceeds the job's aggregate requests | +| C5 | Run launcher type is as intended | `kubectl -n get cm dagster-instance -o yaml` | `run_launcher` block shows `K8sRunLauncher` and the expected `job_namespace` | +| C6 | Target namespace exists and is schedulable | `kubectl get ns ` and `kubectl -n get resourcequota` | Namespace is `Active`; remaining quota exceeds the job's aggregate requests. Also confirm the launcher's `instance_config_map`, `postgres_password_secret` and any PVC volumes exist **in that same namespace** — these references do not cross namespaces, and on sandbox-cat-dat they do not match `job_namespace` (see section 2.1) | ## 2. Tightly coupled checks @@ -39,6 +40,43 @@ location image. | T7 | Step pod egress is permitted | Same run | Steps do not hang in `STARTING`; run logs contain no connection timeouts to port 5432 | | T8 | Failure surfaces as a pod failure | Force a step failure in a scratch namespace | `failPodOnRunFailure: true` is set, and the step pod reports `Failed` rather than `Completed` | +### 2.1 Sandbox state, 2026-08-31 + +The T checks were assessed against sandbox-cat-dat by reading the live +`dagster-instance` ConfigMap in `dataprovider01`. None of them could be *executed*: +the tightly coupled Kubernetes path needs this code location registered on the +platform Dagster, which is blocked on the control plane skew, and unlike the +pipes transport it cannot be exercised from a standalone pod — every step pod +connects to the metadata database on its own, so they must share instance +storage rather than a local SQLite file. + +What the configuration shows: + +| # | Finding | +|---|---| +| C5 | `run_launcher` is `K8sRunLauncher` with `job_namespace: dagster` | +| T2 | Vault injection is configured — `pod_template_spec_metadata` carries the banzaicloud annotations with role `sandbox-cat-dat-role` | +| T3 | `S3_ENDPOINT_URL` is `https://s3.sandbox-cat-dat.simpl-europe.eu`, with access keys injected from Vault | +| T5 | Passes. `dagster-role`, bound to `dagster-svc-account`, grants `batch/jobs` with create, delete, get, list, patch, update and watch | +| T8 | `fail_pod_on_run_failure: true` is set | + +**C6 fails, and it is the reason nothing has ever run here.** The launcher sends +run pods to namespace `dagster`, but every namespace-local dependency it names — +`instance_config_map: dagster-instance`, `postgres_password_secret: +dagster-postgresql-secret`, and the `dagster-shared-pvc` volume — exists in +`dataprovider01`. A ConfigMap, Secret or PVC reference resolves only within the +pod's own namespace, so a run pod placed in `dagster` would reference three +objects that are not there. Consistent with that, `dataprovider01` holds no pods +labelled `dagster/run-id` and the daemon log shows no launch activity. + +One caveat on the evidence: project-scoped access means `kubectl get ns dagster` +returns `Forbidden` rather than `NotFound`, so whether that namespace exists is +unconfirmed. It does not change the conclusion — the dependencies are in the +wrong namespace either way. + +This is a platform configuration defect, not a defect in this service. It is +exactly what C6 exists to catch. + ## 3. Loosely coupled checks | # | Check | How to verify | Expected evidence | From 2bbecb1bddaf0197b9810e2d2b2be20cc2582deb Mon Sep 17 00:00:00 2001 From: ILay Date: Mon, 31 Aug 2026 20:09:50 +0200 Subject: [PATCH 14/22] [SIMPL-30451] Correct the C6 finding: the container context overrides job_namespace The previous revision claimed C6 failed on the sandbox because job_namespace is dagster while the launcher's ConfigMap, Secret and PVC live in dataprovider01. That read job_namespace in isolation. Each code location ships a DAGSTER_CONTAINER_CONTEXT whose k8s.namespace is dataprovider01, and the code location context is merged over the launcher's, so it wins - dagster_k8s/container_context.py resolves namespace as 'other.namespace if other.namespace else self.namespace'. Both deployed code locations carry it, so run pods land where their dependencies are. Still true: no run has ever executed on that cluster. That now looks like nothing having been launched rather than anything being broken. The residual risk is a code location reaching the launcher without a container context namespace, which the chart always sets, so it bites only hand-rolled pods. C5 now warns that job_namespace is a default rather than the effective namespace. Changelog: fixed --- documents/user-guide/readiness-checklist.md | 54 +++++++++++++-------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/documents/user-guide/readiness-checklist.md b/documents/user-guide/readiness-checklist.md index d158d46..cf8f5b7 100644 --- a/documents/user-guide/readiness-checklist.md +++ b/documents/user-guide/readiness-checklist.md @@ -10,9 +10,9 @@ location image. > **L4–L10 were cleared on sandbox-cat-dat on 2026-08-31.** Checks L1–L3 and L11, > which exercise the payload contract, the message-parsing path and image-level > isolation, are verified locally. The **tightly coupled** Kubernetes path has -> been assessed against the same cluster but not executed — T2, T3, T5 and T8 -> are confirmed from the live instance configuration and C6 fails there. See -> [section 2.1](#21-sandbox-state-2026-08-31). +> been assessed against the same cluster but not executed — C5, C6, T2, T3, T5 +> and T8 are confirmed from the live instance configuration and the deployed code +> locations. See [section 2.1](#21-sandbox-state-2026-08-31). --- @@ -24,8 +24,8 @@ location image. | C2 | Jobs are registered | Dagster UI → **Jobs** | The jobs listed in the guide's section 5.5 appear under the code location | | C3 | Image tag matches the intended release | `kubectl -n dagster get deploy -l dagster/code-location=distributed-execution -o jsonpath='{.items[*].spec.template.spec.containers[*].image}'` | Tag equals the version in `pipeline.variables.sh`; never `latest` | | C4 | Image architecture matches the nodes | `docker manifest inspect ` | Includes `linux/amd64`; a manifest with only `linux/arm64` produces `no match for platform` at pull time | -| C5 | Run launcher type is as intended | `kubectl -n get cm dagster-instance -o yaml` | `run_launcher` block shows `K8sRunLauncher` and the expected `job_namespace` | -| C6 | Target namespace exists and is schedulable | `kubectl get ns ` and `kubectl -n get resourcequota` | Namespace is `Active`; remaining quota exceeds the job's aggregate requests. Also confirm the launcher's `instance_config_map`, `postgres_password_secret` and any PVC volumes exist **in that same namespace** — these references do not cross namespaces, and on sandbox-cat-dat they do not match `job_namespace` (see section 2.1) | +| C5 | Run launcher type is as intended | `kubectl -n get cm dagster-instance -o yaml` | `run_launcher` block shows `K8sRunLauncher`. Note that `job_namespace` here is only a default — a code location's `DAGSTER_CONTAINER_CONTEXT` overrides it, so read that too before concluding where run pods land | +| C6 | Target namespace exists and is schedulable | `kubectl get ns ` and `kubectl -n get resourcequota` | Namespace is `Active`; remaining quota exceeds the job's aggregate requests. Also confirm the launcher's `instance_config_map`, `postgres_password_secret` and any PVC volumes exist **in the namespace run pods actually use** — these references do not cross namespaces (see section 2.1) | ## 2. Tightly coupled checks @@ -54,28 +54,42 @@ What the configuration shows: | # | Finding | |---|---| -| C5 | `run_launcher` is `K8sRunLauncher` with `job_namespace: dagster` | +| C5 | `run_launcher` is `K8sRunLauncher`; `job_namespace: dagster` is the default, overridden per code location to `dataprovider01` | | T2 | Vault injection is configured — `pod_template_spec_metadata` carries the banzaicloud annotations with role `sandbox-cat-dat-role` | | T3 | `S3_ENDPOINT_URL` is `https://s3.sandbox-cat-dat.simpl-europe.eu`, with access keys injected from Vault | | T5 | Passes. `dagster-role`, bound to `dagster-svc-account`, grants `batch/jobs` with create, delete, get, list, patch, update and watch | | T8 | `fail_pod_on_run_failure: true` is set | -**C6 fails, and it is the reason nothing has ever run here.** The launcher sends -run pods to namespace `dagster`, but every namespace-local dependency it names — -`instance_config_map: dagster-instance`, `postgres_password_secret: -dagster-postgresql-secret`, and the `dagster-shared-pvc` volume — exists in -`dataprovider01`. A ConfigMap, Secret or PVC reference resolves only within the -pod's own namespace, so a run pod placed in `dagster` would reference three -objects that are not there. Consistent with that, `dataprovider01` holds no pods -labelled `dagster/run-id` and the daemon log shows no launch activity. +**C6 passes, contrary to what `job_namespace` alone suggests.** The launcher's +`job_namespace: dagster` is only a default. Each code location ships a +`DAGSTER_CONTAINER_CONTEXT` environment variable — generated by the chart — whose +`k8s.namespace` is `dataprovider01`, and the code location's context is merged +*over* the launcher's, so it wins (`dagster_k8s/container_context.py`: `namespace += other.namespace if other.namespace else self.namespace`). Run pods therefore +land in `dataprovider01`, where `dagster-instance`, `dagster-postgresql-secret` +and `dagster-shared-pvc` all exist. -One caveat on the evidence: project-scoped access means `kubectl get ns dagster` -returns `Forbidden` rather than `NotFound`, so whether that namespace exists is -unconfirmed. It does not change the conclusion — the dependencies are in the -wrong namespace either way. +Both deployed code locations carry it, so both would launch correctly: -This is a platform configuration defect, not a defect in this service. It is -exactly what C6 exists to catch. +| Code location | `DAGSTER_CONTAINER_CONTEXT` `k8s.namespace` | +|---|---| +| `template-code-location` | `dataprovider01` | +| `semaphore-ui` | `dataprovider01` | + +What is still true is that **no run has ever executed on this cluster** — +`dataprovider01` holds no pods labelled `dagster/run-id` and the daemon log shows +no launch activity. That appears to be because nothing has been launched, not +because anything is broken. + +The residual risk is narrower than a broken namespace, but real: a code location +that reaches the launcher *without* a container context namespace inherits +`dagster` and would fail on three missing objects. The chart always sets it, so +this bites only hand-rolled pods — the reason the C6 row asks you to check the +launcher's namespace-local dependencies rather than just the namespace. + +> An earlier revision of this section claimed C6 failed and that this explained +> the absence of runs. That was wrong: it read `job_namespace` without accounting +> for the container-context override. ## 3. Loosely coupled checks From 554c92ec9286cebfd717e173aab1af0a17d950a4 Mon Sep 17 00:00:00 2001 From: ILay Date: Mon, 31 Aug 2026 20:17:45 +0200 Subject: [PATCH 15/22] [SIMPL-30451] Run T1 and T4 on the sandbox Executed from a pod in dataprovider01 with a local SQLite instance, deliberately not the platform's Postgres. T1 reachability passes: check_tcp_reachable against pg-cluster.common01.svc.cluster.local:5432 returned True. T4 passes: tightly_coupled_local_job reached RUN_SUCCESS with one entry in contributing_hosts and four distinct PIDs in contributing_workers, which is what the row predicts. Torn down afterwards. The run exposed a defect in this service. report_execution_target warns that DAGSTER_POSTGRES_HOST, DAGSTER_POSTGRES_USER and DAGSTER_POSTGRES_DB are missing and calls that a tightly coupled misconfiguration, but the Simpl chart never sets them - it injects DAGSTER_PG_PASSWORD and bakes host, user and database into dagster.yaml. TIGHTLY_COUPLED_ENV_VARS therefore reports a misconfiguration that is not one, and would do so on a correctly configured platform run pod. It also made the T6 obstacle concrete rather than theoretical: step outputs were written to /dagster-home/storage via PickledObjectFilesystemIOManager, which under k8s_job_executor lands on a volume no other step pod can read. Changelog: added --- documents/user-guide/readiness-checklist.md | 52 ++++++++-- .../probe-tightly-coupled-sandbox.yaml | 99 +++++++++++++++++++ 2 files changed, 145 insertions(+), 6 deletions(-) create mode 100644 yaml/sandbox/probe-tightly-coupled-sandbox.yaml diff --git a/documents/user-guide/readiness-checklist.md b/documents/user-guide/readiness-checklist.md index cf8f5b7..672666d 100644 --- a/documents/user-guide/readiness-checklist.md +++ b/documents/user-guide/readiness-checklist.md @@ -43,12 +43,12 @@ location image. ### 2.1 Sandbox state, 2026-08-31 The T checks were assessed against sandbox-cat-dat by reading the live -`dagster-instance` ConfigMap in `dataprovider01`. None of them could be *executed*: -the tightly coupled Kubernetes path needs this code location registered on the -platform Dagster, which is blocked on the control plane skew, and unlike the -pipes transport it cannot be exercised from a standalone pod — every step pod -connects to the metadata database on its own, so they must share instance -storage rather than a local SQLite file. +`dagster-instance` ConfigMap in `dataprovider01` and by running T1 and T4 from a +pod there. T6 and T7 could not be executed: the tightly coupled Kubernetes path +needs this code location registered on the platform Dagster, which is blocked on +the control plane skew, and unlike the pipes transport it cannot be exercised +from a self-contained pod — every step pod connects to the metadata database on +its own, so they must share instance storage rather than a local SQLite file. What the configuration shows: @@ -60,6 +60,46 @@ What the configuration shows: | T5 | Passes. `dagster-role`, bound to `dagster-svc-account`, grants `batch/jobs` with create, delete, get, list, patch, update and watch | | T8 | `fail_pod_on_run_failure: true` is set | +**T1 and T4 were executed on 2026-08-31** from a pod in `dataprovider01` +(`yaml/sandbox/probe-tightly-coupled-sandbox.yaml`), using a local SQLite +instance rather than the platform's Postgres. + +| # | Result | +|---|---| +| T1 | Reachability **passes** — `check_tcp_reachable('pg-cluster.common01.svc.cluster.local', 5432)` returned `passed: True`. The env-var half of the check does not hold; see below | +| T4 | **Passes.** `tightly_coupled_local_job` reached `RUN_SUCCESS` with `contributing_hosts: ['distexec-tc-probe-hbdfl']` — one entry — and four distinct PIDs in `contributing_workers`. Separate processes, same machine, exactly as the row predicts | + +`tightly_coupled_in_process_job` also succeeded, reporting a single worker. + +### T1's env-var check is wrong for this platform + +The run emitted: + +> Orchestration runtime env vars not visible to this process: +> `DAGSTER_POSTGRES_HOST`, `DAGSTER_POSTGRES_USER`, `DAGSTER_POSTGRES_DB`. +> Expected for a loosely coupled target; a misconfiguration for a tightly coupled one. + +That warning would fire on a **correctly configured** platform run pod. The chart +does not set those variables: it injects `DAGSTER_PG_PASSWORD` from +`dagster-postgresql-secret` and bakes host, user and database into `dagster.yaml`. +So `TIGHTLY_COUPLED_ENV_VARS` in `preflight.py` names variables Simpl does not +use, and the check reports a misconfiguration that is not one. The reachability +probe above is the part that carries real evidence. + +### Why T6 and T7 remain unexecuted + +The run made the obstacle concrete. Step outputs went to +`/dagster-home/storage//…` via `PickledObjectFilesystemIOManager`. Under +`k8s_job_executor` each step is its own pod with its own volume, so a downstream +step cannot read an upstream output. Running it needs both a shared I/O manager — +S3, or the RWX `dagster-shared-pvc` the launcher already mounts at +`/dagster/shared` — and shared instance storage, which means Postgres. + +The only Postgres available is the platform's live `dataprovider01_dagster`, and +these images carry dagster 1.13.19 against a 1.12.8 control plane. Pointing a +newer Dagster at an older schema is not a safe thing to try on a shared database. +Pin dagster to the control plane version and rebuild first. + **C6 passes, contrary to what `job_namespace` alone suggests.** The launcher's `job_namespace: dagster` is only a default. Each code location ships a `DAGSTER_CONTAINER_CONTEXT` environment variable — generated by the chart — whose diff --git a/yaml/sandbox/probe-tightly-coupled-sandbox.yaml b/yaml/sandbox/probe-tightly-coupled-sandbox.yaml new file mode 100644 index 0000000..a8a57ff --- /dev/null +++ b/yaml/sandbox/probe-tightly-coupled-sandbox.yaml @@ -0,0 +1,99 @@ +# Tightly coupled probe for sandbox-cat-dat - the part that is safe to run. +# +# Covers T4 and proves the run pod can reach the metadata database, using a +# LOCAL SQLite instance. It deliberately does NOT write to the platform's +# Postgres. See "What this cannot cover" below. +# +# Runs three things in one pod: +# 1. A TCP probe to Postgres using this repository's own check_tcp_reachable. +# 2. tightly_coupled_in_process_job - single process, no fan-out. +# 3. tightly_coupled_local_job - multiprocess fan-out inside one pod (T4). +# +# --- What this cannot cover ------------------------------------------------ +# +# T6 and T7 need `tightly_coupled_k8s_job`, and that cannot use a local SQLite +# instance: k8s_job_executor puts every step in its own pod, and each step pod +# opens the metadata database itself. That is the definition of tightly coupled. +# The step pods must therefore share instance storage, which means Postgres. +# +# The only Postgres available is `dataprovider01_dagster`, the platform's live +# metadata database, and these images carry dagster 1.13.19 against a control +# plane on 1.12.8. Pointing a newer Dagster at an older schema is not a safe +# operation on a shared database: at best it refuses to start with a schema +# mismatch, and it is not worth finding out the worse case on someone else's +# instance. Pin dagster to the control plane version and rebuild before trying. +# +# T1 is only partly covered. Its stated evidence expects DAGSTER_POSTGRES_HOST, +# DAGSTER_POSTGRES_USER and DAGSTER_POSTGRES_DB in the pod environment; the +# platform sets none of them - it passes DAGSTER_PG_PASSWORD and bakes the rest +# into dagster.yaml. Left unset here deliberately, so the run reports the real +# deployment's state rather than a flattering one. +# +# --- Running --------------------------------------------------------------- +# +# kubectl -n dataprovider01 apply -f yaml/sandbox/probe-tightly-coupled-sandbox.yaml +# kubectl -n dataprovider01 logs -f job/distexec-tc-probe +# kubectl -n dataprovider01 delete job distexec-tc-probe + +apiVersion: batch/v1 +kind: Job +metadata: + name: distexec-tc-probe + namespace: dataprovider01 + labels: + app.kubernetes.io/name: distributed-execution + app.kubernetes.io/component: probe +spec: + backoffLimit: 0 + activeDeadlineSeconds: 1800 + template: + metadata: + labels: + app.kubernetes.io/name: distributed-execution + app.kubernetes.io/component: probe + spec: + restartPolicy: Never + serviceAccountName: dagster-svc-account + automountServiceAccountToken: true + securityContext: + runAsNonRoot: true + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + seccompProfile: + type: RuntimeDefault + containers: + - name: runner + image: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution:5122da4691f9 + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + env: + - name: DAGSTER_HOME + value: /dagster-home + command: + - sh + - -c + - | + echo "===== T1: can this pod reach the metadata database? =====" + python -c "from distributed_execution.preflight import check_tcp_reachable; print(check_tcp_reachable('pg-cluster.common01.svc.cluster.local', 5432))" + echo "===== tightly_coupled_in_process_job =====" + dagster job execute -f src/distributed_execution/repository.py -j tightly_coupled_in_process_job + echo "===== T4: tightly_coupled_local_job =====" + dagster job execute -f src/distributed_execution/repository.py -j tightly_coupled_local_job + volumeMounts: + - name: dagster-home + mountPath: /dagster-home + resources: + requests: + cpu: 200m + memory: 512Mi + limits: + cpu: "1" + memory: 1Gi + volumes: + - name: dagster-home + emptyDir: {} From 35ef45de56501ad208e0a54bc4ea3f41d5039a77 Mon Sep 17 00:00:00 2001 From: ILay Date: Mon, 31 Aug 2026 20:26:29 +0200 Subject: [PATCH 16/22] [SIMPL-30451] Pin dagster to 1.12.8, the control plane version The dependency was previously an unbounded 'dagster', so the build took whatever was current and landed on 1.13.19 against a 1.12.8 control plane. A code location is a gRPC server the webserver and daemon call into, and under k8s_job_executor the step pods share a metadata database schema with them, so the version has to match. Pinned exactly rather than to the 1.12 line: patch releases can carry schema migrations, and 'close enough' is not a safe position against a shared database. Revisit when the platform upgrades. 17 tests pass and definitions validate on the downgraded stack. Changelog: fixed --- pyproject.toml | 13 ++- requirements.txt | 8 +- uv.lock | 294 +++++++---------------------------------------- 3 files changed, 55 insertions(+), 260 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 65de18c..5fe0d60 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,11 +3,16 @@ name = "distributed_execution" version = "0.1.0" description = "Reference implementations and user guide for Dagster distributed execution targets and integration patterns" requires-python = ">=3.12" +# Pinned to the exact control plane version, not just the 1.12 line. A code +# location is a gRPC server the webserver and daemon call into, and step pods +# share a metadata database schema with them. Patch releases can carry schema +# migrations, so "close enough" is not a safe position against a shared database. +# Revisit when the platform upgrades; the libraries track dagster as 0.28.x. dependencies = [ - "dagster", - "dagster-k8s>=0.27.16", - "dagster-postgres>=0.27.16", - "dagster-webserver>=1.11.16", + "dagster==1.12.8", + "dagster-k8s==0.28.8", + "dagster-postgres==0.28.8", + "dagster-webserver==1.12.8", "pip>=26.1.2", "pydantic>=2.0", ] diff --git a/requirements.txt b/requirements.txt index f1f635c..37bf6d6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,6 @@ -dagster -dagster-k8s>=0.27.16 -dagster-postgres>=0.27.16 -dagster-webserver>=1.11.16 +dagster==1.12.8 +dagster-k8s==0.28.8 +dagster-postgres==0.28.8 +dagster-webserver==1.12.8 pip>=26.1.2 pydantic>=2.0 diff --git a/uv.lock b/uv.lock index 588422d..96a63aa 100644 --- a/uv.lock +++ b/uv.lock @@ -7,128 +7,6 @@ resolution-markers = [ "python_full_version < '3.13'", ] -[[package]] -name = "aiohappyeyeballs" -version = "2.7.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ce/f4/eec0465c2f67b2664688d0240b3212d5196fd89e741df67ddb81f8d35658/aiohappyeyeballs-2.7.1.tar.gz", hash = "sha256:065665c041c42a5938ed220bdcd7230f22527fbec085e1853d2402c8a3615d9d", size = 24757, upload-time = "2026-07-01T17:11:55.501Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/71/43/1947f06babed6b3f1d7f38b0c767f52df66bfb2bc10b468c4a7de9eceff2/aiohappyeyeballs-2.7.1-py3-none-any.whl", hash = "sha256:9243213661e29250eb41368e5daa826fc017156c3b8a11440826b2e3ed376472", size = 15038, upload-time = "2026-07-01T17:11:54.055Z" }, -] - -[[package]] -name = "aiohttp" -version = "3.14.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohappyeyeballs" }, - { name = "aiosignal" }, - { name = "attrs" }, - { name = "frozenlist" }, - { name = "multidict" }, - { name = "propcache" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, - { name = "yarl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/58/d9/22ce5786ac0c1653ae8b6c23bded02c1686d11f0dbb45b31ce128e0df985/aiohttp-3.14.3.tar.gz", hash = "sha256:9491196535a88924a60afd5b5f434b5b203b6cc616250878dbdb223a8f7844bc", size = 7971213, upload-time = "2026-07-23T01:57:27.037Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/d4/eb96299230e20acf2efae207cb8d69051f1f68e357e5ea5e479bf6fb097a/aiohttp-3.14.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:39aded8c7f3b935b54aab1d8d73c70ec0ee2d3ec3b943e0e86611bc150ba47f5", size = 754690, upload-time = "2026-07-23T01:53:47.332Z" }, - { url = "https://files.pythonhosted.org/packages/88/11/e7a70a209eb9a067c0d3212b518a0134e3484f5178c7533878b6b514d469/aiohttp-3.14.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5bcb6ff3fdab1258a192679ff1a05d44f59626430aa05cd1a9d2447423599228", size = 509484, upload-time = "2026-07-23T01:53:51.159Z" }, - { url = "https://files.pythonhosted.org/packages/30/07/4bbc222cc8dbe31d4c3e8a5baad2286e4d42026ac0c570027b89afce6344/aiohttp-3.14.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:617105e2c3018ee38d0c8ce5ee3c84f621a6d8b9f723202aacaff28449ca91ee", size = 511949, upload-time = "2026-07-23T01:53:55.083Z" }, - { url = "https://files.pythonhosted.org/packages/54/b9/42e74c46b7b7c794b995bbc1f573fb48950c38b19d8600c62a6804ee2d67/aiohttp-3.14.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f631fe87a6f30df5fbe6d79640b25e4cffb38c31c7fb6f10871517b84b0f8c1a", size = 1765282, upload-time = "2026-07-23T01:53:59.662Z" }, - { url = "https://files.pythonhosted.org/packages/6b/ed/62bc4d74363ad346d518e0720363a949f63e2e23439a79eb5813d4d29bb3/aiohttp-3.14.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a94dbaae5ae27bd849c93570669bff91e0510f33a80805738e3de72a7be0447b", size = 1741511, upload-time = "2026-07-23T01:54:04.063Z" }, - { url = "https://files.pythonhosted.org/packages/d0/9f/181e8a8bc79e47d13c7fc4540bd7a3b729d9505609c61f392a8dd2fbfe55/aiohttp-3.14.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8f2f1c4c032c7cedd7d8da6f54c97b70266c6570c3108d3fdffee7188bb70529", size = 1810680, upload-time = "2026-07-23T01:54:09.882Z" }, - { url = "https://files.pythonhosted.org/packages/5c/9a/dec94d6ad694552fe3424e3f1928d7a606a5d9d9433a04e7ecdd9d38ae7f/aiohttp-3.14.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ea05e1f97ceea523942d9b2a7d7c0359d781d683d6b043f5943a602b14da4787", size = 1905646, upload-time = "2026-07-23T01:54:13.475Z" }, - { url = "https://files.pythonhosted.org/packages/52/b7/7cd31f29d6055bd711ae6e669367fba6f5ae9de463910a793e30556a8db7/aiohttp-3.14.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:543906c127fb1d929b95076db19b83fa2d46751006ff1e23b093aa5ac4d8db42", size = 1792122, upload-time = "2026-07-23T01:54:15.752Z" }, - { url = "https://files.pythonhosted.org/packages/66/73/10b1ef93afa61f4963c746257b70ced619cf31a4798671de5fdb2608501d/aiohttp-3.14.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0a5ff2dfbb9ce645fa5b8ef3e02c6c0b9cc3f6030ff863d0c51fffc50cb5541b", size = 1591127, upload-time = "2026-07-23T01:54:19.489Z" }, - { url = "https://files.pythonhosted.org/packages/49/ed/3b203fa6de1b338c14acdc06bf6ca9b043b7944f005966958c2ced932cde/aiohttp-3.14.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:041badb8f84396357c4d3ad26de6afd7a32b112f43d3c63045c0c8278cfd2043", size = 1725210, upload-time = "2026-07-23T01:54:24.129Z" }, - { url = "https://files.pythonhosted.org/packages/28/b7/1c2aab8c706436dcc28598452488ac9cd7c409da815237c28c27d58993e6/aiohttp-3.14.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:530125ee1163c4219af35dc3aa1206e541e7b31b6efc1a3f93b70a136f65d427", size = 1764848, upload-time = "2026-07-23T01:54:27.973Z" }, - { url = "https://files.pythonhosted.org/packages/54/50/94c28f08b131c4bf10984ea2c7a536c9920608bb2d6e7f95642c30cc87b7/aiohttp-3.14.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c8653fd547c93a61aadc612007790f5555cdd18946fa48cf45e26d8ea4ea473d", size = 1777102, upload-time = "2026-07-23T01:54:31.775Z" }, - { url = "https://files.pythonhosted.org/packages/13/d4/e7d09ba7d345fb2d74440fd2fa033c5e079fac05552927705986f41a364f/aiohttp-3.14.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:89176250f686cb9853c0fb7ead90e639e915b84a6f43eedc2a4e7ec21f1037f0", size = 1580205, upload-time = "2026-07-23T01:54:34.518Z" }, - { url = "https://files.pythonhosted.org/packages/a3/84/072a91d68e1e1eb587985b54baab94221277f877e8ef274fc213a0ceae28/aiohttp-3.14.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3a26434dafe408229ff3403458ca58de24fb51936504decac49ce6755f77e59d", size = 1797219, upload-time = "2026-07-23T01:54:36.995Z" }, - { url = "https://files.pythonhosted.org/packages/e0/eb/aad34e897e668424d6e995da5dff8a4a09af93363d3392488772957a63aa/aiohttp-3.14.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d1558173930a5a8d3069cee5c92fc91c87c4dbcb099debbb3622053717145a19", size = 1768629, upload-time = "2026-07-23T01:54:40.103Z" }, - { url = "https://files.pythonhosted.org/packages/b6/2b/6bb88ddba0fecd9122aa3ebcad25996cf6c083a4a7040dbb3a4f97972af6/aiohttp-3.14.3-cp312-cp312-win32.whl", hash = "sha256:16100ad3ab8d649fdfbee87602d9d2dcdca9df0b9eda8a1b5fdc0d41f96da559", size = 451481, upload-time = "2026-07-23T01:54:42.547Z" }, - { url = "https://files.pythonhosted.org/packages/76/9b/f2f8f108da17ecef2cc3efc424e8b7ad3782b1a8360f7b8eae8ced84f6ea/aiohttp-3.14.3-cp312-cp312-win_amd64.whl", hash = "sha256:33a2d7c28d33797a2e99923dffa63f83d908a19b6bf26cfe80fa790aa5e1a75a", size = 476845, upload-time = "2026-07-23T01:54:44.853Z" }, - { url = "https://files.pythonhosted.org/packages/3e/44/28dac80a8941b604f4da10ce21097614ca1bf905ce93dca28d8d7de9c1e7/aiohttp-3.14.3-cp312-cp312-win_arm64.whl", hash = "sha256:362a3fd481769cac1a824514bcd86fda51c65e8fe6e051099e008fddde6db17c", size = 448050, upload-time = "2026-07-23T01:54:47.087Z" }, - { url = "https://files.pythonhosted.org/packages/57/be/5afd201cc0ab139029aadb75392efe85a293403d9dd3a3226161c21ce00c/aiohttp-3.14.3-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:2e9878ae68e4a5f1c0abe4dd497dbc3d51946f5837b56759e2a02e78fa90ef86", size = 506269, upload-time = "2026-07-23T01:54:49.075Z" }, - { url = "https://files.pythonhosted.org/packages/22/09/dec8189d62b45ade009f6792a2264b942a90cb88aeaf181239933cd72c3c/aiohttp-3.14.3-cp313-cp313-android_21_x86_64.whl", hash = "sha256:f3d2669fe7dec7fc359ecdb5984b29b50d85d5d00f8c1cb61de4f4a24ee42627", size = 515166, upload-time = "2026-07-23T01:54:51.894Z" }, - { url = "https://files.pythonhosted.org/packages/28/24/2854869d29ed8a8b19d74f9ec6629515f7e04d02dd329d9d179201e58e47/aiohttp-3.14.3-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:cc7cb243a68167172f48c1fd43cee91ec4b1d40cefd190edd43369d1a6bc9c82", size = 486263, upload-time = "2026-07-23T01:54:54.223Z" }, - { url = "https://files.pythonhosted.org/packages/d4/dd/57187c8be2a35aea65eaee3bd2c3dcbbcf0204f5106c89637e3610380cd1/aiohttp-3.14.3-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:78253b573e6ffab5028924fc98bc281aae05445969982a10864bc360dea2016c", size = 492299, upload-time = "2026-07-23T01:54:56.236Z" }, - { url = "https://files.pythonhosted.org/packages/b9/11/06ae6ed8f0d414edf4068861e233d8fe23ee699bfd4b3ceb8663db948a62/aiohttp-3.14.3-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7041d52c3a7fa20c9e8c182b534704abb19502c8bdcbde7ab23bfda6f642394f", size = 502235, upload-time = "2026-07-23T01:54:58.377Z" }, - { url = "https://files.pythonhosted.org/packages/7e/a3/559639c34a345d2cf7c52dff6838119f2eaf29eb508227b5b83f573af813/aiohttp-3.14.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ac74facc01463f138b0da5580329cfcc82818dea5656e83ddcd11268fc12ff80", size = 750883, upload-time = "2026-07-23T01:55:00.65Z" }, - { url = "https://files.pythonhosted.org/packages/91/cd/41e131f13afd1e7b0172a9d9eda085ef90eb8439f41f0d279db81ed3ae60/aiohttp-3.14.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d6218d92e450824e9b4881f44e8c09f1853b490f9a64130801024a4793b1b3b0", size = 508473, upload-time = "2026-07-23T01:55:02.945Z" }, - { url = "https://files.pythonhosted.org/packages/bc/6b/e7f13410d391c6e55b4c007a8de024355389d7d459e3d64c42b2d33617e5/aiohttp-3.14.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:11fb37ef075669eee52ab1928fbf6e1741fada40409fa309ebde9607a962aebf", size = 509190, upload-time = "2026-07-23T01:55:05.173Z" }, - { url = "https://files.pythonhosted.org/packages/97/21/6464573e53d69672cc1eada3e5c5cb2d2efa82701e8305a0f2047a576967/aiohttp-3.14.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55bdcc472aafe2de4a253045cc128007a64f1e0264fb675791e132ea5edaa3bd", size = 1761478, upload-time = "2026-07-23T01:55:07.383Z" }, - { url = "https://files.pythonhosted.org/packages/1a/81/d217043a4c17fbce360905e3b2bdd20139ebc9a2de836d035d179c4da006/aiohttp-3.14.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c39846c3aad97a8530c89d7a3869a8f8e9e3762c6ac0504481e5c80948f7e807", size = 1735092, upload-time = "2026-07-23T01:55:09.803Z" }, - { url = "https://files.pythonhosted.org/packages/a1/66/e13a02d0eeb1a9a502402a977abb4e4abff9fe4051c26f80558c57a7c975/aiohttp-3.14.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5895ef58c4620afe02fa16044f023dc4dafec08158f9d08874a46a7dbc0341b8", size = 1800546, upload-time = "2026-07-23T01:55:12.012Z" }, - { url = "https://files.pythonhosted.org/packages/26/5e/57d42fca1d18cb5acc1cad945d017fabc5d6ae71d8a08ad66be8dc3ee544/aiohttp-3.14.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fa9467a8113aa69d3d7c55a70ef0b7c636010a40993f3df9d9d0d73b3eb7ef24", size = 1895250, upload-time = "2026-07-23T01:55:14.357Z" }, - { url = "https://files.pythonhosted.org/packages/ca/1c/7da8d08e74d56f00070822f9638ff3f1c563f8ad87d1efa996c87bfc8644/aiohttp-3.14.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7d2deec16eeedf55f2c7cf75b521ea3856a5177e123844f8fd0f114ce252cb5", size = 1789289, upload-time = "2026-07-23T01:55:16.668Z" }, - { url = "https://files.pythonhosted.org/packages/cd/0f/cf16bcf56896981c1a0319f5d5db9337994b5165730c48a8fa07e9b34be6/aiohttp-3.14.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dd54d0e8717de95939766febac482ac0474d8ac3b048115f9f2b1d23a16e7db4", size = 1586706, upload-time = "2026-07-23T01:55:18.913Z" }, - { url = "https://files.pythonhosted.org/packages/fe/6f/76eac12a7f2480e1e304f842efdb07db33256b0d9165b866b6ef0806c202/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:df82f3787c940c94986b34222d59c9e38843fba85139f36e85255a82ad5355a9", size = 1724652, upload-time = "2026-07-23T01:55:21.296Z" }, - { url = "https://files.pythonhosted.org/packages/39/b6/19c8c592baeeb94b75f966547d40c02ac7590902306ec5863d5c027cf506/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:42a67efc36300d052fb4508a53e8b6901b9284b599ae63945c377569c5fcc1e1", size = 1756239, upload-time = "2026-07-23T01:55:23.705Z" }, - { url = "https://files.pythonhosted.org/packages/dc/c9/4e9383150296f97f873b680c4de8fb2cd88608fb9f48c79edcb111611abc/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7a75aa63cbf9b21cfaf60dc2657e19df2c2867d91707d653fee171ffeedd1371", size = 1769161, upload-time = "2026-07-23T01:55:26.082Z" }, - { url = "https://files.pythonhosted.org/packages/aa/1e/147bdc6cc5de5f3ab011be8bf5d6e786633249f22c20bae06f85e45f5387/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e92eb8acc45eb6a9f4935071a77edf5b85cc6f8dfad5cd99e97653c26593cdde", size = 1578759, upload-time = "2026-07-23T01:55:28.846Z" }, - { url = "https://files.pythonhosted.org/packages/fd/31/78388a9d6040ece2e11df62ea229a822cf5e52d238374b220ae9975b2623/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b014a6ed7cf912e787149fdc529166d3ceabac23f26efeea3158c9aba2354e7e", size = 1792025, upload-time = "2026-07-23T01:55:31.457Z" }, - { url = "https://files.pythonhosted.org/packages/03/51/a3d29fdf2c25d796746af8ad6fe56a45d6256c38b0a8a2ed752e1160b3a2/aiohttp-3.14.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3d4f72af88ac2474bb5bca640030320e3d38a0163a1d7533500e87be458eef71", size = 1768477, upload-time = "2026-07-23T01:55:33.87Z" }, - { url = "https://files.pythonhosted.org/packages/29/a6/442e18b5afeade534d877a2dc3c3e392aff8d49787890b0cf84790410267/aiohttp-3.14.3-cp313-cp313-win32.whl", hash = "sha256:5f08ec777f35ee70720233b8b9811d3bb5d728137f30ac91b7457709c3261ac0", size = 451069, upload-time = "2026-07-23T01:55:36.121Z" }, - { url = "https://files.pythonhosted.org/packages/9d/69/3d876ac02659f271cf7f6769f14a8e3de5b6e888ed8b5a7e998086a4cec8/aiohttp-3.14.3-cp313-cp313-win_amd64.whl", hash = "sha256:dff9461ec275f22135650d5ba4b4931a11f3958df7dfbb8db630000d4dee0883", size = 476518, upload-time = "2026-07-23T01:55:38.303Z" }, - { url = "https://files.pythonhosted.org/packages/b2/0e/50d6e6471cd31edce8b282bdec59375a3a69124d8a989a0b1313355cae52/aiohttp-3.14.3-cp313-cp313-win_arm64.whl", hash = "sha256:ddcac3c6b382e81f1dd0499199d4136b877beb4cb5ef770bbbfba56c4b8f55d2", size = 447676, upload-time = "2026-07-23T01:55:40.451Z" }, - { url = "https://files.pythonhosted.org/packages/c8/20/887fdcf832326571b370ffc347b3e70abe101096f3720126aac161b1d872/aiohttp-3.14.3-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:49f7325beb0f85ef4aef5f48f490269575f83e6e2acad00a1d80b807eb027062", size = 509067, upload-time = "2026-07-23T01:55:42.618Z" }, - { url = "https://files.pythonhosted.org/packages/ad/a3/92cec936f78cc4bf0fa5554ebe593b73459d94e3c62303e1902a4cccb6f7/aiohttp-3.14.3-cp314-cp314-android_24_x86_64.whl", hash = "sha256:e3be98a7c30b8c25d573dafba7171d66dfb05ee6a9070fc46535464ff97700a6", size = 514774, upload-time = "2026-07-23T01:55:44.937Z" }, - { url = "https://files.pythonhosted.org/packages/29/ba/2a0c38df3fc557620b6a5acd98364af050053b6285b4dc7ee74100c63c18/aiohttp-3.14.3-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:614c61d478b83953e261d02bb2df750f17227cd33ef8002945bf5aebbde21919", size = 488134, upload-time = "2026-07-23T01:55:47.135Z" }, - { url = "https://files.pythonhosted.org/packages/48/d6/d51b7d4bf309af3693940d8ffd2b9ed0b682434ef85959b7c9c137f60cf8/aiohttp-3.14.3-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:1caa7b0d05f3e3a36f87788c59e970a7ee1cefcfcbb924a9f138c4a6551c9cb7", size = 494201, upload-time = "2026-07-23T01:55:49.451Z" }, - { url = "https://files.pythonhosted.org/packages/3f/5a/8f624384e5f1efabb5229b94157eb966b021e97bdb188c62860c2ae243c2/aiohttp-3.14.3-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:dfa68deb2a443bdaa3ea5297b0699c1464f08aef3812b486d1348eee61b07dc0", size = 502766, upload-time = "2026-07-23T01:55:51.656Z" }, - { url = "https://files.pythonhosted.org/packages/a6/26/4ff0164370deec18fb19254ee4ab10b7a73304ac0c860b13f5f84663759b/aiohttp-3.14.3-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:e72ee89e28d907a18f46959b4eb0bb06701cc7f8cf4366e00029e2ccfaaf5924", size = 756557, upload-time = "2026-07-23T01:55:53.964Z" }, - { url = "https://files.pythonhosted.org/packages/97/a3/7056b86dc0d9ec709ea9777eae3b0161428f943372f8b98c01c11593b682/aiohttp-3.14.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ad4c8b7488d745d2ca4838ebd8ae5ba9b56341d30b1da43640e4ce87f9f49646", size = 510168, upload-time = "2026-07-23T01:55:56.22Z" }, - { url = "https://files.pythonhosted.org/packages/85/ed/0357a015892fd68058bf2d39d3fd1958e459b997a7db30aaa6aaa434ae96/aiohttp-3.14.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:db332af25642007330fca8be5c4d194caf2bea7a7fc84415aff3497af5dfee6b", size = 512957, upload-time = "2026-07-23T01:55:58.437Z" }, - { url = "https://files.pythonhosted.org/packages/47/d1/8aba53f15ccb2238405f5e9d30e2a8ca44f93878c26e7165ade00d374b1c/aiohttp-3.14.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:25bd2708db6bdf6a6630dd37bdcdfcb47c4434d22ac69c64665b802910140b30", size = 1750149, upload-time = "2026-07-23T01:56:00.856Z" }, - { url = "https://files.pythonhosted.org/packages/49/bd/40c3fee327529284375c6701cbb0fa4600cc2e8432af1378f897e2ef7d3a/aiohttp-3.14.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:cef89a58e628c4efcac3275c2d68083f82426dcdc89c1492a6f654f9f7ea6ab9", size = 1707685, upload-time = "2026-07-23T01:56:03.371Z" }, - { url = "https://files.pythonhosted.org/packages/2a/a3/ca0cc6724cca8114b05694abd916060758c79894c3aa5b012cdadc1bc28e/aiohttp-3.14.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c23ec8ee9d5ab2f5421f9c7fffce208435607af27fd46d4a44e031954352838f", size = 1803911, upload-time = "2026-07-23T01:56:05.817Z" }, - { url = "https://files.pythonhosted.org/packages/95/b5/85b099c299c3ffd38ad9b3e43694c8a346934e4a30c88c4fd5a841234f77/aiohttp-3.14.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e2667f0bbe7eb6c74eae5e9691441ad186e5845ca3cff63230fc09c4e7514f5d", size = 1876929, upload-time = "2026-07-23T01:56:08.413Z" }, - { url = "https://files.pythonhosted.org/packages/d5/b7/1da684a04175473fa4cddbf9a2f572e79514c3fd27a74597f43057d4f3da/aiohttp-3.14.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18cb43369747b2ae007bd2655fb8e63a099c2ff1d207962943636dac989b3147", size = 1761112, upload-time = "2026-07-23T01:56:10.918Z" }, - { url = "https://files.pythonhosted.org/packages/d1/16/bc4b55e3e5cb175fd69c53c90d60d2f47797cb343da5106e23863dc4dba4/aiohttp-3.14.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d77640cc618c1d99fc4f8589c0f24a730adfa54eb1e57ef7bf0c8dfb78da898c", size = 1583500, upload-time = "2026-07-23T01:56:13.613Z" }, - { url = "https://files.pythonhosted.org/packages/2a/e8/13a9d957a1ee40837f46aa30f0f4c657e673ad86a2e6362a9f9be20d26d9/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:53e5179d8abb5710f8e83ba207c41c8d1261fcffd4616500e15ca2b7a33be10a", size = 1713940, upload-time = "2026-07-23T01:56:15.969Z" }, - { url = "https://files.pythonhosted.org/packages/38/05/d33c680c1bcf1c7e130f9cbfc1fc02fe8bb0c4af2a94a53dd5fb56131e5c/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:cd817772b2fcf2b8c0905795318485f9ec16eae60b29feb7f4c77085311637f0", size = 1724413, upload-time = "2026-07-23T01:56:18.591Z" }, - { url = "https://files.pythonhosted.org/packages/85/1d/af798d306f7a74b6a632dbcabcf62a4c91391b7582d2a8c6d7712e2cc54e/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:4e3ac92d90e92773b2362d506068e9a948192bd553e743c5b2429e28527c8661", size = 1770748, upload-time = "2026-07-23T01:56:21.074Z" }, - { url = "https://files.pythonhosted.org/packages/a8/92/ad720d472556a995049206867765e9410969684f86ee09423ff9969044c1/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:3f42e9b78301f11c8f861746175d8b9c1ccef713fcad9eab396e2f6db8ed4a22", size = 1577564, upload-time = "2026-07-23T01:56:23.475Z" }, - { url = "https://files.pythonhosted.org/packages/60/ad/0ed7586cbef7a884e23a752fa2bb987a122e6a5dd50dab109258d0a95193/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:9d9edccfe496b476db5f398d97b865e9a6752bcf8aec4eef8390ce20fb64bb41", size = 1782080, upload-time = "2026-07-23T01:56:25.994Z" }, - { url = "https://files.pythonhosted.org/packages/97/ea/dbaed0d73e8a69aad653b045dab451c67c2454bb731a37b45a86593e9422/aiohttp-3.14.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1c5ec8fb1bcc31a8466f74aaf26c345d5c386fa4bd08a3f0eb9c7a4a3fe8b5bf", size = 1745813, upload-time = "2026-07-23T01:56:28.604Z" }, - { url = "https://files.pythonhosted.org/packages/81/1b/6893d4bc57e434fc93a6c9217c637d967a0b651d989f6e3265179375754a/aiohttp-3.14.3-cp314-cp314-win32.whl", hash = "sha256:38901a84da3ce22249f6e860bf8f90d141bcab7da090cc398f8bb58c0e44b7da", size = 455872, upload-time = "2026-07-23T01:56:31.031Z" }, - { url = "https://files.pythonhosted.org/packages/f5/8b/c7baa1ba1eda4db6989baefe5de6d99834921b84ebd7918624febcb9f290/aiohttp-3.14.3-cp314-cp314-win_amd64.whl", hash = "sha256:8b3b60de05f3dcb6f6a00f818bb2ec781cee4de0645f59ccaf99b1d1823b6100", size = 481030, upload-time = "2026-07-23T01:56:33.365Z" }, - { url = "https://files.pythonhosted.org/packages/22/8c/c29d067df825a2df88ca432db848aa2fe8199598359cc06c12b09320cac9/aiohttp-3.14.3-cp314-cp314-win_arm64.whl", hash = "sha256:1576145bdceeb92382d899751e12743a3a5b8e460a841e3e50543859e54864dc", size = 453669, upload-time = "2026-07-23T01:56:35.731Z" }, - { url = "https://files.pythonhosted.org/packages/6a/a4/9c033beb355d39b6147980597ec9645e4729243f686ee4dc73945de72030/aiohttp-3.14.3-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:8800c996b01c2772a783e3e46f3e1abd5823029adca0df54231960de9bfefa5b", size = 791403, upload-time = "2026-07-23T01:56:37.972Z" }, - { url = "https://files.pythonhosted.org/packages/80/ca/87c32a0a7704583cfc49660bd817889bae5b830bf53b5dcb4e92145ac2da/aiohttp-3.14.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ebe8e504f058fe91223351cecd2d9d6946c9d241bb0250d898ffbdf584cc72b0", size = 526413, upload-time = "2026-07-23T01:56:40.523Z" }, - { url = "https://files.pythonhosted.org/packages/9e/d8/8ec0e471248c500acdce2be3f46db8fb62b5eb60efef072529cc85ee1d26/aiohttp-3.14.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:30402d03a7c0ff52bce290b57e564e9079fd9d0cb545c8aba73f86a103162d2e", size = 532135, upload-time = "2026-07-23T01:56:42.876Z" }, - { url = "https://files.pythonhosted.org/packages/fe/45/f8919fd936e8b79fcd9bda7b6d8e62613462a713f4f17987fd7c34399142/aiohttp-3.14.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9fc7b5bfec6573f3ae844f457fdde5adeb713f8b8e4a81ad64fc207b49383716", size = 1922742, upload-time = "2026-07-23T01:56:45.528Z" }, - { url = "https://files.pythonhosted.org/packages/f6/ec/9ca76b28a27525b0cc53e20842e0228b022f301ce1f436b7d814b4aaf2df/aiohttp-3.14.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8a5fd34f7f7410d1730d5c2ba873cacb2eed3fede366feb268a70ba22581ed8f", size = 1787371, upload-time = "2026-07-23T01:56:48.045Z" }, - { url = "https://files.pythonhosted.org/packages/b1/04/6acdbf17315f7b55f1937e3387acb89a3cddeb4995689553d064af8e92ab/aiohttp-3.14.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:270d3dace9ca2f10f0da5d8ebe519b7a310fc6112ed916e32df5866df0888553", size = 1912623, upload-time = "2026-07-23T01:56:50.605Z" }, - { url = "https://files.pythonhosted.org/packages/86/e6/438b0c79ca6f45eb9fd9817dd4c01a91919a38c0de5ee9e05e2b4dc0ece7/aiohttp-3.14.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3ae5b3a59436d089b5395d910121a390feed4d00578eb95a0fd1a329fe963100", size = 2005515, upload-time = "2026-07-23T01:56:53.153Z" }, - { url = "https://files.pythonhosted.org/packages/bb/6b/62cbd6577758699525f5c712d1ddef57d9875fbab0ae8d5f5a202fd598f8/aiohttp-3.14.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2498f0fe69ead802f9675beca44a7c21c62fdaa4ec5145ea1c3ad6edbee29f85", size = 1879906, upload-time = "2026-07-23T01:56:55.818Z" }, - { url = "https://files.pythonhosted.org/packages/00/95/18bcbf830a21dc3aae24d8f6b6feaf3db1d2090242d00a7868db2ffb0b67/aiohttp-3.14.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a0dc483c00da8b673abbb367eb6f8d8f4bcec30eb58529ea13cb42e7fd2dfa33", size = 1675849, upload-time = "2026-07-23T01:56:58.861Z" }, - { url = "https://files.pythonhosted.org/packages/a9/19/47f4968659c5e23606c3790c80fc624e691c153d036148449ee84d31b287/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c7d3a97c678d34fc5b59da671ee9cd630096ddc643e7b5a30d54a2a6f3574d3f", size = 1843496, upload-time = "2026-07-23T01:57:01.591Z" }, - { url = "https://files.pythonhosted.org/packages/64/af/38c33c4dd82fddcb4e56c4653b6f1072a8edbc6b7fa15809f14932c41e2d/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:f8fb78a83c9e5f741ca3a68cfb455c1f5bb83b4e7249a3848b3cd78d0a8563b0", size = 1827746, upload-time = "2026-07-23T01:57:05.131Z" }, - { url = "https://files.pythonhosted.org/packages/a1/9d/0537cda4885ac8f5b7053d164dd06312f4c483a4edcb8ee5b8aaf2a989bf/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:74ab5b6a9fb13e873e5a90946588baecaf488745e1db1a4a5c433f971f035098", size = 1853810, upload-time = "2026-07-23T01:57:08.043Z" }, - { url = "https://files.pythonhosted.org/packages/19/fe/26f9c5e6458385aa86497836b0dea6fb2f027827d63f37c7856cce9286ee/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:bd52f811e65f6fb634b1047159657c98f52b407f8efec907bcfc09da9a4c0a25", size = 1668895, upload-time = "2026-07-23T01:57:10.837Z" }, - { url = "https://files.pythonhosted.org/packages/ec/4c/618b1db9b9ba079b8875d2cdf78e7c4a3bf72903bd5850fee7dd9544600a/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:f0f177d1b195b9e06376cfd7d308d8a1b920909a609d03ac82a8c73bbb16d3b9", size = 1883833, upload-time = "2026-07-23T01:57:13.672Z" }, - { url = "https://files.pythonhosted.org/packages/94/c6/bd959bd1e4771f9fd944e9e436224c48c77b018b73b519b5aad346335bcc/aiohttp-3.14.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:498c6c623134f8e09a3c4e60bcd607a0b4590dd7dbf08dd40851b27cbb520ccb", size = 1844251, upload-time = "2026-07-23T01:57:16.593Z" }, - { url = "https://files.pythonhosted.org/packages/5e/19/08d41839658bdd44a0ed2480f3891705ecb487ce28c0dde62c9040c997e0/aiohttp-3.14.3-cp314-cp314t-win32.whl", hash = "sha256:b304db572b4368edd8dda8a2274f73156fe15558fca4a917cb8a09fc47af5963", size = 474180, upload-time = "2026-07-23T01:57:19.306Z" }, - { url = "https://files.pythonhosted.org/packages/99/5d/3cd6ef0a2b2851f7ab913b5b079334781bd50ff56a323e4454063377a080/aiohttp-3.14.3-cp314-cp314t-win_amd64.whl", hash = "sha256:b20032766aedf6261c7a566585a40867d092ac03a0d81592d5370ef9b054f99b", size = 500528, upload-time = "2026-07-23T01:57:21.762Z" }, - { url = "https://files.pythonhosted.org/packages/a4/37/cfd1ed540a4d318da025590d96b728e63713c09e9377950fc655dadeb856/aiohttp-3.14.3-cp314-cp314t-win_arm64.whl", hash = "sha256:2e1161602f45a54de2ce0905243a95f58cb42dcd378402f3697f5e0b21e9d2e7", size = 469280, upload-time = "2026-07-23T01:57:24.241Z" }, -] - -[[package]] -name = "aiosignal" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "frozenlist" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, -] - [[package]] name = "alembic" version = "1.19.1" @@ -174,15 +52,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" }, ] -[[package]] -name = "attrs" -version = "26.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, -] - [[package]] name = "backoff" version = "2.2.1" @@ -598,7 +467,7 @@ wheels = [ [[package]] name = "dagster" -version = "1.13.19" +version = "1.12.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "alembic" }, @@ -619,6 +488,7 @@ dependencies = [ { name = "pywin32", marker = "sys_platform == 'win32'" }, { name = "requests" }, { name = "rich" }, + { name = "setuptools" }, { name = "six" }, { name = "sqlalchemy" }, { name = "structlog" }, @@ -630,14 +500,14 @@ dependencies = [ { name = "universal-pathlib" }, { name = "watchdog" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0b/3e/23ebd048231c36c7c063a7d972756268ef714deedb58366134a4d3c94ef7/dagster-1.13.19.tar.gz", hash = "sha256:c2b3d06c198dc3bd99be7b2c0ec5022c919b1acf20c058bf652f2498e0119ec7", size = 3629331, upload-time = "2026-08-21T15:12:15.466Z" } +sdist = { url = "https://files.pythonhosted.org/packages/65/03/a5108fe3b882fe40baa1d34da6f2fe292ac5a75db9a8c7254de8b51a4e5a/dagster-1.12.8.tar.gz", hash = "sha256:38551907f2f261d63f290a364df9fea5abbf3e38cf64f837a8ef2afdd80f9d34", size = 1566204, upload-time = "2025-12-29T19:10:21.207Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/46/8dbed1a3dc6299b5e92525ae29295ee264902343b0ad7297a4f537d4ef7f/dagster-1.13.19-py3-none-any.whl", hash = "sha256:22896569d6b371f42394ea36961e9fcc485f61c795aed2a733634979ce74f86b", size = 2025984, upload-time = "2026-08-21T15:12:12.95Z" }, + { url = "https://files.pythonhosted.org/packages/a7/50/44e8fb3c2f67b252bbab83f4048a1f6f668c1e73eb8ca5fe19233b271786/dagster-1.12.8-py3-none-any.whl", hash = "sha256:102eb110762fb9c2db7443a7d5df2863f32054eb764db575074421ff16706813", size = 1950472, upload-time = "2025-12-29T19:10:18.876Z" }, ] [[package]] name = "dagster-graphql" -version = "1.13.19" +version = "1.12.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "dagster" }, @@ -646,50 +516,50 @@ dependencies = [ { name = "requests" }, { name = "starlette" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/fb/f0e76e0b276de31f84cc6687aeeb01cd27d15dbdf65d739400e3110bf691/dagster_graphql-1.13.19.tar.gz", hash = "sha256:30ffbfbb0e7b17a3c6dabfb2887ed0c5c8da13bccf239f1bc3e3252683f08484", size = 695728, upload-time = "2026-08-21T15:13:01.058Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/0e/515c2966532410a1d3b7427c00cc6fc3bc6061ef64327a25a437e20b070a/dagster_graphql-1.12.8.tar.gz", hash = "sha256:b732bcdc91fc4874b5aa2e3572f16b169764ddbf10498aabf14593f185b40473", size = 158881, upload-time = "2025-12-29T19:10:37.456Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/09/ecd0a13a34a22930a723035d683960892d0b58d988bfc677c930233880d3/dagster_graphql-1.13.19-py3-none-any.whl", hash = "sha256:276a27cd1c09d226775cff509a31dfba582d430712c33af662695a1643c897c2", size = 228534, upload-time = "2026-08-21T15:12:59.746Z" }, + { url = "https://files.pythonhosted.org/packages/f1/7b/81fe0eed6f88cd3084e25b8bc9090881e53a2eddd2de676c39a04c71d019/dagster_graphql-1.12.8-py3-none-any.whl", hash = "sha256:5ae8ea80d5bb94ef70ab6e87d3c8f55e1570fa8402ffffb1e85fa28c34502b7c", size = 206012, upload-time = "2025-12-29T19:10:36.294Z" }, ] [[package]] name = "dagster-k8s" -version = "0.29.19" +version = "0.28.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "dagster" }, { name = "google-auth" }, { name = "kubernetes" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/94/06/38a258c3570d754df8c9768cc13fdb844046f7a4259b3ce64cd61cce0ccd/dagster_k8s-0.29.19.tar.gz", hash = "sha256:1d4b0e69f3fcff0704ffbce5a9554811163ff5df0a14059d566695041b928848", size = 309360, upload-time = "2026-08-21T15:22:56.758Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/4d/19337f52238cd0ec071d381dc5030ff4928613f930c1e8601ef7f4a7e538/dagster_k8s-0.28.8.tar.gz", hash = "sha256:edd6af1476b3ef5c2d37da6217ea02f9756bda5fcd53e1c808aceab3e4662a4c", size = 51513, upload-time = "2025-12-29T19:21:42.738Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/b5/0472da80caffa94dbebac98791fda6d51c9995889960e77a5dfb77db4a3e/dagster_k8s-0.29.19-py3-none-any.whl", hash = "sha256:cabe40918a895bd6c0ef8c12a875bd4eb68be9915ce337a618672593a35c2da4", size = 57796, upload-time = "2026-08-21T15:22:55.422Z" }, + { url = "https://files.pythonhosted.org/packages/0a/cf/d324ca38d738c96af17e2a65c2337281dd2583ea8cc55179ccbec3688a6c/dagster_k8s-0.28.8-py3-none-any.whl", hash = "sha256:6864b26a38f8bb2048eabd2a2aa8a930ca57481b95407fe1143e8460d1cf652f", size = 56616, upload-time = "2025-12-29T19:21:41.653Z" }, ] [[package]] name = "dagster-pipes" -version = "1.13.19" +version = "1.12.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/f7/a7c6f1c347ae01d2eaa8dbdc36f927a71a19481f1d180c10d297b4044ba5/dagster_pipes-1.13.19.tar.gz", hash = "sha256:df0c3b3582dec0bdd2f19acd12672c2923d5601d35f66b222a2780d3c7247a0d", size = 149679, upload-time = "2026-08-21T15:12:49.982Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/63/2eb5eb7a18683d9feebb023140ed10935570d3c23f6b62aa50616fbb0bb0/dagster_pipes-1.12.8.tar.gz", hash = "sha256:0c590e3e42e2f94eaa013af7f8f049bca58962e4d013758f84d8608e4bc668a1", size = 21091, upload-time = "2025-12-29T19:10:32.306Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/54/0dc0f7404eca8c9759336f3cee562b59851197e3c7c1b65ce5047d774165/dagster_pipes-1.13.19-py3-none-any.whl", hash = "sha256:3a4af8d4e72f1b8da673fabf53d1e598236e1274f77327de790e31aab00b8df8", size = 20242, upload-time = "2026-08-21T15:12:48.903Z" }, + { url = "https://files.pythonhosted.org/packages/7b/82/6fd7fede962812656f6f279e43e45b62f42c1e9c8f0d6b745ab3bb43ee87/dagster_pipes-1.12.8-py3-none-any.whl", hash = "sha256:12fa5049c5719b2b83c8702031779833cc5f34e8da270cf8483958378ba104c1", size = 20839, upload-time = "2025-12-29T19:10:31.051Z" }, ] [[package]] name = "dagster-postgres" -version = "0.29.19" +version = "0.28.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "dagster" }, { name = "psycopg2-binary" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e4/28/5c59e5227268d0330837f3dfe699e6733a85fc6ab0638c8c7e972a4668ad/dagster_postgres-0.29.19.tar.gz", hash = "sha256:3cd350b716faf492210f9541bbcdc70eea90df3b0a69cd8d4dff514af1ac6b31", size = 406345, upload-time = "2026-08-21T15:22:18.789Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/54/0f681df1d31f88dc4ef514a323957bdc139af3ff0df006010131a6940cef/dagster_postgres-0.28.8.tar.gz", hash = "sha256:3a5957445792294000454b2a56b81c2e607a18248abc522ccf53cca794e5f682", size = 16456, upload-time = "2025-12-29T19:19:23.51Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/49/8f62e575a5a560ded18247b355a4a037a0fea501fdcd86bc06a422f81093/dagster_postgres-0.29.19-py3-none-any.whl", hash = "sha256:8a89aecbec1a0e4bea6abe766ffa9f3e06b9779885b5914f8d072b1bebd9c89f", size = 25558, upload-time = "2026-08-21T15:22:17.716Z" }, + { url = "https://files.pythonhosted.org/packages/75/80/d063bf1d4a489b84a33b84c138822b15ae01729082db0b9d11e895549bf6/dagster_postgres-0.28.8-py3-none-any.whl", hash = "sha256:ae21b163d6ba2c2b5b73b724ab5b0b6ef4434aa6ed4e7106fa6a91fa03f969a0", size = 22944, upload-time = "2025-12-29T19:19:22.464Z" }, ] [[package]] name = "dagster-shared" -version = "1.13.19" +version = "1.12.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, @@ -699,14 +569,14 @@ dependencies = [ { name = "tomlkit" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6b/d3/5c6090138b27a51c9f92722a05e4fe0f1eebbf1f14badd8ef5d4e32f84ba/dagster_shared-1.13.19.tar.gz", hash = "sha256:76f920b20866e28092fe02983dca4bfba55bd8596b5f5c20429343dfb5d7a39a", size = 124096, upload-time = "2026-08-21T15:27:12.517Z" } +sdist = { url = "https://files.pythonhosted.org/packages/78/5c/7f5463895c357117bf9285452e5525c54f4aca02ac331b20817d08cdd938/dagster_shared-1.12.8.tar.gz", hash = "sha256:b22beeb43dd0a6da8744a2409fd1c56f0864da81fb7a59b7b97db2d520b0eff8", size = 78154, upload-time = "2025-12-29T19:20:42.532Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/5d/938ba2c23f0b19938b1bad63f03a2bb12a1c43175c02db99dbc3c024542f/dagster_shared-1.13.19-py3-none-any.whl", hash = "sha256:35653847a031ebcf4f9e1b37b4f509938d18adf1088b2331a44182ccf124a898", size = 96420, upload-time = "2026-08-21T15:27:11.392Z" }, + { url = "https://files.pythonhosted.org/packages/54/55/15b8aa49fd4b9cf0eccd13b19a63b024a782fea1890667c0db9045f84793/dagster_shared-1.12.8-py3-none-any.whl", hash = "sha256:1522a8da2f821014e9307bd03f5e9d9d9dbe657d74de3742501f3538b8d36572", size = 91408, upload-time = "2025-12-29T19:20:41.609Z" }, ] [[package]] name = "dagster-webserver" -version = "1.13.19" +version = "1.12.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -715,9 +585,9 @@ dependencies = [ { name = "starlette" }, { name = "uvicorn", extra = ["standard"] }, ] -sdist = { url = "https://files.pythonhosted.org/packages/40/9c/12017b879d2e8893fe749617e0154e03d0edbbee9591d419bfa865b1669c/dagster_webserver-1.13.19.tar.gz", hash = "sha256:4192e80321623975b3cff4623aba48a4dbc63dc48d01f37f4be160a31d3dffa9", size = 12366742, upload-time = "2026-08-21T15:20:08.722Z" } +sdist = { url = "https://files.pythonhosted.org/packages/60/3d/f96da5c164b337b763b75e0c084bd52be95eaa2a60d021261e90d9d06b10/dagster_webserver-1.12.8.tar.gz", hash = "sha256:c12ed724cc6258f948cd0e3800cf9ff01e986e73b9eca6e923cf75a2f98aa5de", size = 12241193, upload-time = "2025-12-29T19:18:24.8Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/08/dec5071faa1e0c33f0b78c1ac4ff37a37ab469f8e93451f4e972c6ef9828/dagster_webserver-1.13.19-py3-none-any.whl", hash = "sha256:65115560fd197a6ead94e4a25d141447d10238fc650540f0f0fa61cd48c3d4ad", size = 12516446, upload-time = "2026-08-21T15:20:06.387Z" }, + { url = "https://files.pythonhosted.org/packages/cb/94/1ba8d099c25e2a14a0d3923c137ea971827f8dd3fae475310b6f77917c21/dagster_webserver-1.12.8-py3-none-any.whl", hash = "sha256:49a64df19d420c398593ff7582e1dd8cf0dbf02a9752e52aed6e758490364de2", size = 12582830, upload-time = "2025-12-29T19:18:22.46Z" }, ] [[package]] @@ -741,10 +611,10 @@ dev = [ [package.metadata] requires-dist = [ - { name = "dagster" }, - { name = "dagster-k8s", specifier = ">=0.27.16" }, - { name = "dagster-postgres", specifier = ">=0.27.16" }, - { name = "dagster-webserver", specifier = ">=1.11.16" }, + { name = "dagster", specifier = "==1.12.8" }, + { name = "dagster-k8s", specifier = "==0.28.8" }, + { name = "dagster-postgres", specifier = "==0.28.8" }, + { name = "dagster-webserver", specifier = "==1.12.8" }, { name = "pip", specifier = ">=26.1.2" }, { name = "pydantic", specifier = ">=2.0" }, ] @@ -782,95 +652,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/01/a4/9b63d595d748e3aff8812b65eacc1a2c4bd90b7c2012e08e72373b4835eb/filelock-3.32.4-py3-none-any.whl", hash = "sha256:22e58ca3b1ae3b98993b762d7338367ae64fe50252bf78d59da3bfebcdf1cedd", size = 99864, upload-time = "2026-08-23T17:37:53.913Z" }, ] -[[package]] -name = "frozenlist" -version = "1.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, - { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594, upload-time = "2025-10-06T05:36:07.69Z" }, - { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, - { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411, upload-time = "2025-10-06T05:36:09.801Z" }, - { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014, upload-time = "2025-10-06T05:36:11.394Z" }, - { url = "https://files.pythonhosted.org/packages/d8/cb/cb6c7b0f7d4023ddda30cf56b8b17494eb3a79e3fda666bf735f63118b35/frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8", size = 234909, upload-time = "2025-10-06T05:36:12.598Z" }, - { url = "https://files.pythonhosted.org/packages/31/c5/cd7a1f3b8b34af009fb17d4123c5a778b44ae2804e3ad6b86204255f9ec5/frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b", size = 250049, upload-time = "2025-10-06T05:36:14.065Z" }, - { url = "https://files.pythonhosted.org/packages/c0/01/2f95d3b416c584a1e7f0e1d6d31998c4a795f7544069ee2e0962a4b60740/frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52", size = 256485, upload-time = "2025-10-06T05:36:15.39Z" }, - { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619, upload-time = "2025-10-06T05:36:16.558Z" }, - { url = "https://files.pythonhosted.org/packages/69/fa/f8abdfe7d76b731f5d8bd217827cf6764d4f1d9763407e42717b4bed50a0/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3", size = 250320, upload-time = "2025-10-06T05:36:17.821Z" }, - { url = "https://files.pythonhosted.org/packages/f5/3c/b051329f718b463b22613e269ad72138cc256c540f78a6de89452803a47d/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143", size = 246820, upload-time = "2025-10-06T05:36:19.046Z" }, - { url = "https://files.pythonhosted.org/packages/0f/ae/58282e8f98e444b3f4dd42448ff36fa38bef29e40d40f330b22e7108f565/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608", size = 250518, upload-time = "2025-10-06T05:36:20.763Z" }, - { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096, upload-time = "2025-10-06T05:36:22.129Z" }, - { url = "https://files.pythonhosted.org/packages/66/bb/852b9d6db2fa40be96f29c0d1205c306288f0684df8fd26ca1951d461a56/frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf", size = 39985, upload-time = "2025-10-06T05:36:23.661Z" }, - { url = "https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746", size = 44591, upload-time = "2025-10-06T05:36:24.958Z" }, - { url = "https://files.pythonhosted.org/packages/a7/06/1dc65480ab147339fecc70797e9c2f69d9cea9cf38934ce08df070fdb9cb/frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd", size = 40102, upload-time = "2025-10-06T05:36:26.333Z" }, - { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" }, - { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651, upload-time = "2025-10-06T05:36:28.855Z" }, - { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" }, - { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" }, - { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, - { url = "https://files.pythonhosted.org/packages/f9/c0/8746afb90f17b73ca5979c7a3958116e105ff796e718575175319b5bb4ce/frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121", size = 226549, upload-time = "2025-10-06T05:36:33.706Z" }, - { url = "https://files.pythonhosted.org/packages/7e/eb/4c7eefc718ff72f9b6c4893291abaae5fbc0c82226a32dcd8ef4f7a5dbef/frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5", size = 239833, upload-time = "2025-10-06T05:36:34.947Z" }, - { url = "https://files.pythonhosted.org/packages/c2/4e/e5c02187cf704224f8b21bee886f3d713ca379535f16893233b9d672ea71/frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e", size = 245363, upload-time = "2025-10-06T05:36:36.534Z" }, - { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, - { url = "https://files.pythonhosted.org/packages/5d/6f/4ae69c550e4cee66b57887daeebe006fe985917c01d0fff9caab9883f6d0/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1", size = 243365, upload-time = "2025-10-06T05:36:40.152Z" }, - { url = "https://files.pythonhosted.org/packages/7a/58/afd56de246cf11780a40a2c28dc7cbabbf06337cc8ddb1c780a2d97e88d8/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1", size = 237763, upload-time = "2025-10-06T05:36:41.355Z" }, - { url = "https://files.pythonhosted.org/packages/cb/36/cdfaf6ed42e2644740d4a10452d8e97fa1c062e2a8006e4b09f1b5fd7d63/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8", size = 240110, upload-time = "2025-10-06T05:36:42.716Z" }, - { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" }, - { url = "https://files.pythonhosted.org/packages/1e/0b/1b5531611e83ba7d13ccc9988967ea1b51186af64c42b7a7af465dcc9568/frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496", size = 39628, upload-time = "2025-10-06T05:36:45.423Z" }, - { url = "https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231", size = 43882, upload-time = "2025-10-06T05:36:46.796Z" }, - { url = "https://files.pythonhosted.org/packages/c1/17/502cd212cbfa96eb1388614fe39a3fc9ab87dbbe042b66f97acb57474834/frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62", size = 39676, upload-time = "2025-10-06T05:36:47.8Z" }, - { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" }, - { url = "https://files.pythonhosted.org/packages/d2/d6/f03961ef72166cec1687e84e8925838442b615bd0b8854b54923ce5b7b8a/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c", size = 50742, upload-time = "2025-10-06T05:36:49.837Z" }, - { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" }, - { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, - { url = "https://files.pythonhosted.org/packages/e6/3b/b991fe1612703f7e0d05c0cf734c1b77aaf7c7d321df4572e8d36e7048c8/frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82", size = 274161, upload-time = "2025-10-06T05:36:54.309Z" }, - { url = "https://files.pythonhosted.org/packages/ca/ec/c5c618767bcdf66e88945ec0157d7f6c4a1322f1473392319b7a2501ded7/frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714", size = 294676, upload-time = "2025-10-06T05:36:55.566Z" }, - { url = "https://files.pythonhosted.org/packages/7c/ce/3934758637d8f8a88d11f0585d6495ef54b2044ed6ec84492a91fa3b27aa/frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d", size = 300638, upload-time = "2025-10-06T05:36:56.758Z" }, - { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, - { url = "https://files.pythonhosted.org/packages/dc/48/c7b163063d55a83772b268e6d1affb960771b0e203b632cfe09522d67ea5/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51", size = 292101, upload-time = "2025-10-06T05:36:59.237Z" }, - { url = "https://files.pythonhosted.org/packages/9f/d0/2366d3c4ecdc2fd391e0afa6e11500bfba0ea772764d631bbf82f0136c9d/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e", size = 289901, upload-time = "2025-10-06T05:37:00.811Z" }, - { url = "https://files.pythonhosted.org/packages/b8/94/daff920e82c1b70e3618a2ac39fbc01ae3e2ff6124e80739ce5d71c9b920/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0", size = 289395, upload-time = "2025-10-06T05:37:02.115Z" }, - { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" }, - { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" }, - { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" }, - { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" }, - { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" }, - { url = "https://files.pythonhosted.org/packages/8e/e8/a1185e236ec66c20afd72399522f142c3724c785789255202d27ae992818/frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f", size = 49698, upload-time = "2025-10-06T05:37:09.48Z" }, - { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" }, - { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" }, - { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, - { url = "https://files.pythonhosted.org/packages/dc/94/be719d2766c1138148564a3960fc2c06eb688da592bdc25adcf856101be7/frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", size = 225038, upload-time = "2025-10-06T05:37:14.577Z" }, - { url = "https://files.pythonhosted.org/packages/e4/09/6712b6c5465f083f52f50cf74167b92d4ea2f50e46a9eea0523d658454ae/frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e", size = 240130, upload-time = "2025-10-06T05:37:15.781Z" }, - { url = "https://files.pythonhosted.org/packages/f8/d4/cd065cdcf21550b54f3ce6a22e143ac9e4836ca42a0de1022da8498eac89/frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a", size = 242845, upload-time = "2025-10-06T05:37:17.037Z" }, - { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, - { url = "https://files.pythonhosted.org/packages/6c/52/232476fe9cb64f0742f3fde2b7d26c1dac18b6d62071c74d4ded55e0ef94/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f", size = 240542, upload-time = "2025-10-06T05:37:19.771Z" }, - { url = "https://files.pythonhosted.org/packages/5f/85/07bf3f5d0fb5414aee5f47d33c6f5c77bfe49aac680bfece33d4fdf6a246/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7", size = 237308, upload-time = "2025-10-06T05:37:20.969Z" }, - { url = "https://files.pythonhosted.org/packages/11/99/ae3a33d5befd41ac0ca2cc7fd3aa707c9c324de2e89db0e0f45db9a64c26/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30", size = 238210, upload-time = "2025-10-06T05:37:22.252Z" }, - { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" }, - { url = "https://files.pythonhosted.org/packages/3f/ab/945b2f32de889993b9c9133216c068b7fcf257d8595a0ac420ac8677cab0/frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806", size = 40536, upload-time = "2025-10-06T05:37:25.581Z" }, - { url = "https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0", size = 44330, upload-time = "2025-10-06T05:37:26.928Z" }, - { url = "https://files.pythonhosted.org/packages/82/13/e6950121764f2676f43534c555249f57030150260aee9dcf7d64efda11dd/frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b", size = 40627, upload-time = "2025-10-06T05:37:28.075Z" }, - { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" }, - { url = "https://files.pythonhosted.org/packages/d1/29/55c5f0689b9c0fb765055629f472c0de484dcaf0acee2f7707266ae3583c/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed", size = 50738, upload-time = "2025-10-06T05:37:30.792Z" }, - { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" }, - { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" }, - { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, - { url = "https://files.pythonhosted.org/packages/05/23/6bde59eb55abd407d34f77d39a5126fb7b4f109a3f611d3929f14b700c66/frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37", size = 273830, upload-time = "2025-10-06T05:37:37.663Z" }, - { url = "https://files.pythonhosted.org/packages/d2/3f/22cff331bfad7a8afa616289000ba793347fcd7bc275f3b28ecea2a27909/frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a", size = 294289, upload-time = "2025-10-06T05:37:39.261Z" }, - { url = "https://files.pythonhosted.org/packages/a4/89/5b057c799de4838b6c69aa82b79705f2027615e01be996d2486a69ca99c4/frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2", size = 300318, upload-time = "2025-10-06T05:37:43.213Z" }, - { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, - { url = "https://files.pythonhosted.org/packages/59/f7/970141a6a8dbd7f556d94977858cfb36fa9b66e0892c6dd780d2219d8cd8/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe", size = 291762, upload-time = "2025-10-06T05:37:46.657Z" }, - { url = "https://files.pythonhosted.org/packages/c1/15/ca1adae83a719f82df9116d66f5bb28bb95557b3951903d39135620ef157/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8", size = 289470, upload-time = "2025-10-06T05:37:47.946Z" }, - { url = "https://files.pythonhosted.org/packages/ac/83/dca6dc53bf657d371fbc88ddeb21b79891e747189c5de990b9dfff2ccba1/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a", size = 289042, upload-time = "2025-10-06T05:37:49.499Z" }, - { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" }, - { url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" }, - { url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" }, - { url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" }, - { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, -] - [[package]] name = "fsspec" version = "2026.7.0" @@ -1148,12 +929,12 @@ wheels = [ [[package]] name = "kubernetes" -version = "36.0.3" +version = "34.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "aiohttp" }, { name = "certifi" }, { name = "durationpy" }, + { name = "google-auth" }, { name = "python-dateutil" }, { name = "pyyaml" }, { name = "requests" }, @@ -1162,9 +943,9 @@ dependencies = [ { name = "urllib3" }, { name = "websocket-client" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ca/57/b07b96353f902aa1bdbe00e878e3a12a137977d03a962479785576aa8ec9/kubernetes-36.0.3.tar.gz", hash = "sha256:36993ed25ce59b789c9341473a228fcf268504a2fec7c2b2b1531d73072e5ce7", size = 2337528, upload-time = "2026-07-13T20:38:12.128Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/55/3f880ef65f559cbed44a9aa20d3bdbc219a2c3a3bac4a30a513029b03ee9/kubernetes-34.1.0.tar.gz", hash = "sha256:8fe8edb0b5d290a2f3ac06596b23f87c658977d46b5f8df9d0f4ea83d0003912", size = 1083771, upload-time = "2025-09-29T20:23:49.283Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/30/a96d47df739689ac0001ade0afefc16e3b477fc2fb426b568515fdc8afce/kubernetes-36.0.3-py2.py3-none-any.whl", hash = "sha256:8fde9241c4b298e6374a069dcf728359b4e72c2fb29489a975ba4e1c047cf10f", size = 4618066, upload-time = "2026-07-13T20:38:10.172Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ec/65f7d563aa4a62dd58777e8f6aa882f15db53b14eb29aba0c28a20f7eb26/kubernetes-34.1.0-py2.py3-none-any.whl", hash = "sha256:bffba2272534e224e6a7a74d582deb0b545b7c9879d2cd9e4aae9481d1f2cc2a", size = 2008380, upload-time = "2025-09-29T20:23:47.684Z" }, ] [[package]] @@ -1896,6 +1677,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, ] +[[package]] +name = "setuptools" +version = "84.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6d/44/f5da03a8ef95d369145c5bb53050e7877c9f3d312e128605fd9504829143/setuptools-84.0.0.tar.gz", hash = "sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73", size = 1168449, upload-time = "2026-08-08T18:27:58.365Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/9c/c510029fc6ef33a6275cd2c5d3cecd6613dfd6aa401d57c54f1c18852ccf/setuptools-84.0.0-py3-none-any.whl", hash = "sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670", size = 818216, upload-time = "2026-08-08T18:27:56.719Z" }, +] + [[package]] name = "six" version = "1.17.0" @@ -2091,11 +1881,11 @@ wheels = [ [[package]] name = "urllib3" -version = "2.7.0" +version = "2.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268, upload-time = "2024-12-22T07:47:30.032Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, + { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369, upload-time = "2024-12-22T07:47:28.074Z" }, ] [[package]] From 3f8175a17f0a82a9ecc878058ba4856450ac3d06 Mon Sep 17 00:00:00 2001 From: ILay Date: Mon, 31 Aug 2026 20:39:33 +0200 Subject: [PATCH 17/22] [SIMPL-30451] Stop freezing the k8s executor config with .configured() k8s_job_executor.configured({...}) collapses the executor config schema to Any, so a run config execution: block is accepted and then silently discarded. That makes job_image and job_namespace impossible to supply at launch time, which is what a probe - or any deployment that is not the chart - needs. Found on the sandbox: the run reported 'No image included in either executor config or the job' and then tried to clean up in namespace dagster, both values coming from the run launcher because the executor config never applied. The same defaults now go through to_job(config=...), where they remain overridable from run config and the Launchpad. Changelog: fixed --- .../tightly_coupled/jobs.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/distributed_execution/tightly_coupled/jobs.py b/src/distributed_execution/tightly_coupled/jobs.py index 3b4abcf..c5f82f9 100644 --- a/src/distributed_execution/tightly_coupled/jobs.py +++ b/src/distributed_execution/tightly_coupled/jobs.py @@ -81,12 +81,19 @@ tightly_coupled_k8s_job = distributed_execution_reference.to_job( "Tightly coupled, one Kubernetes Job per step. Each step pod must reach the metadata " "database, object storage and Vault. Requires a cluster - not runnable locally." ), - executor_def=k8s_job_executor.configured( - { - "image_pull_policy": "IfNotPresent", - "step_k8s_config": STEP_K8S_CONFIG, + # Defaults go through `config` rather than `executor_def=...configured(...)`. + # `.configured()` collapses the executor's config schema to Any, so a run + # config `execution:` block is accepted and then silently discarded - which + # also makes job_image and job_namespace impossible to supply at launch time. + executor_def=k8s_job_executor, + config={ + "execution": { + "config": { + "image_pull_policy": "IfNotPresent", + "step_k8s_config": STEP_K8S_CONFIG, + } } - ), + }, tags={**COMMON_TAGS, "executor": "k8s_job"}, ) From 64cace2952982388e7000250743868af5d8008a1 Mon Sep 17 00:00:00 2001 From: ILay Date: Mon, 31 Aug 2026 22:10:12 +0200 Subject: [PATCH 18/22] [SIMPL-30451] Execute T6 and T7 on the sandbox Adds the k8s_job_executor probe and records the result. Six step Jobs were created, one per step, and four steps executed and succeeded against the platform's live Postgres. The run then failed before summarise_results: run monitoring polls for a dagster-run- Job that a hand-rolled probe never creates, and with no launcher-supplied container context it looked in the launcher's default namespace, where dagster-svc-account is denied jobs/status. Two step pods had already started and logged 'Skipping step execution' before exiting 0, which is why all six Jobs read Complete while only four steps ran. Changelog: added --- documents/user-guide/readiness-checklist.md | 59 +++++-- yaml/sandbox/probe-k8s-executor-sandbox.yaml | 161 +++++++++++++++++++ 2 files changed, 203 insertions(+), 17 deletions(-) create mode 100644 yaml/sandbox/probe-k8s-executor-sandbox.yaml diff --git a/documents/user-guide/readiness-checklist.md b/documents/user-guide/readiness-checklist.md index 672666d..832b7e7 100644 --- a/documents/user-guide/readiness-checklist.md +++ b/documents/user-guide/readiness-checklist.md @@ -43,12 +43,8 @@ location image. ### 2.1 Sandbox state, 2026-08-31 The T checks were assessed against sandbox-cat-dat by reading the live -`dagster-instance` ConfigMap in `dataprovider01` and by running T1 and T4 from a -pod there. T6 and T7 could not be executed: the tightly coupled Kubernetes path -needs this code location registered on the platform Dagster, which is blocked on -the control plane skew, and unlike the pipes transport it cannot be exercised -from a self-contained pod — every step pod connects to the metadata database on -its own, so they must share instance storage rather than a local SQLite file. +`dagster-instance` ConfigMap in `dataprovider01` and by running T1, T4, T6 and T7 +from pods there. What the configuration shows: @@ -86,19 +82,48 @@ So `TIGHTLY_COUPLED_ENV_VARS` in `preflight.py` names variables Simpl does not use, and the check reports a misconfiguration that is not one. The reachability probe above is the part that carries real evidence. -### Why T6 and T7 remain unexecuted +### T6 and T7, executed 2026-08-31 -The run made the obstacle concrete. Step outputs went to -`/dagster-home/storage//…` via `PickledObjectFilesystemIOManager`. Under -`k8s_job_executor` each step is its own pod with its own volume, so a downstream -step cannot read an upstream output. Running it needs both a shared I/O manager — -S3, or the RWX `dagster-shared-pvc` the launcher already mounts at -`/dagster/shared` — and shared instance storage, which means Postgres. +Running them needed three things the earlier attempt lacked: dagster pinned to +1.12.8 to match the control plane, so writing to the live `dataprovider01_dagster` +could not trigger a migration; `DAGSTER_HOME` moved onto the RWX +`dagster-shared-pvc`, because the default I/O manager writes step outputs under +`$DAGSTER_HOME/storage` and each step pod otherwise gets its own empty volume; +and `automount_service_account_token: true` in `step_k8s_config`, because +`dagster-svc-account` disables it by default. The probe is +`yaml/sandbox/probe-k8s-executor-sandbox.yaml`; the run is +`d05c736a-8ec7-4e59-8cb0-9cb238db40dc`. -The only Postgres available is the platform's live `dataprovider01_dagster`, and -these images carry dagster 1.13.19 against a 1.12.8 control plane. Pointing a -newer Dagster at an older schema is not a safe thing to try on a shared database. -Pin dagster to the control plane version and rebuild first. +| # | Result | +|---|---| +| T6 | **Passes.** Six Jobs labelled `dagster/job=tightly_coupled_k8s_job` were created, one per step, each in its own pod | +| T7 | **Passes.** No step hung in `STARTING` and no step reported a connection timeout to port 5432. Every step pod opened the platform Postgres itself — the outputs and inputs below were all recorded through it | + +Four steps executed and succeeded: `generate_work_units` (four dynamic outputs), +`report_execution_target`, and `process_work_unit[unit_0]` and `[unit_1]`, each +loading its input from the shared volume that a different pod wrote. + +**The run then failed, and `summarise_results` never started.** The cause is a +property of the probe, not of the code or the platform: + +> `Detected run worker status UNKNOWN: DagsterK8sUnrecoverableAPIError … jobs.batch` +> `"dagster-run-d05c736a-…" is forbidden: User "system:serviceaccount:dataprovider01:` +> `dagster-svc-account" cannot get resource "jobs/status" … in the namespace "dagster"` + +Run monitoring polls for a run worker Job named `dagster-run-`. The probe +starts the run with `dagster job execute` from a hand-rolled Job, so no such +object exists; and with no launcher-supplied container context the monitor looked +in the launcher's default namespace, `dagster`, where `dagster-svc-account` holds +no rights. The 403 turned *absent* into *unknown*, and the monitor failed the run +at its first poll. `process_work_unit[unit_2]` and `[unit_3]` had their pods +started already; both logged `Skipping step execution … since the run is in status +DagsterRunStatus.FAILURE` and exited 0 — which is why all six Jobs read `Complete` +while only four steps ran. + +A run submitted the normal way, through the webserver to `K8sRunLauncher`, gets a +`dagster-run-` Job in `dataprovider01` and is not exposed to this. Closing +T6/T7 end to end, including `summarise_results`, needs the code location +registered on the platform Dagster. **C6 passes, contrary to what `job_namespace` alone suggests.** The launcher's `job_namespace: dagster` is only a default. Each code location ships a diff --git a/yaml/sandbox/probe-k8s-executor-sandbox.yaml b/yaml/sandbox/probe-k8s-executor-sandbox.yaml new file mode 100644 index 0000000..7ab8448 --- /dev/null +++ b/yaml/sandbox/probe-k8s-executor-sandbox.yaml @@ -0,0 +1,161 @@ +# T6/T7 probe - tightly coupled via k8s_job_executor, one pod per step. +# +# This is the invasive one. Unlike the pipes probe it writes to the platform's +# live metadata database, because that is what tightly coupled means: every step +# pod opens the database itself, so they must share instance storage. Safe only +# because the images are pinned to dagster 1.12.8, exactly matching the control +# plane, so no schema migration can be triggered. +# +# Two things the loosely coupled probe did not need: +# +# 1. Shared instance storage. DAGSTER_HOME is copied from the platform's +# `dagster-instance` ConfigMap into a writable volume, so run and event +# storage are the same Postgres the platform uses. Step pods get the same +# config via the run launcher's `instance_config_map`. +# +# 2. A shared I/O manager. The default writes step outputs to pod-local disk, +# which under this executor means a downstream step cannot read an upstream +# output. base_dir is redirected to the RWX `dagster-shared-pvc` the +# launcher already declares. +# +# The run config lives in its own ConfigMap rather than a heredoc inside the +# container command. A heredoc nested in a YAML block scalar silently produced an +# empty file on the first attempt, and an empty run config is valid YAML, so the +# run started and only failed later with "No image included in either executor +# config or the job" - a confusing distance from the actual cause. The command +# echoes the config before using it so that failure mode cannot recur silently. +# +# --- Running --------------------------------------------------------------- +# +# kubectl -n dataprovider01 apply -f yaml/sandbox/probe-k8s-executor-sandbox.yaml +# kubectl -n dataprovider01 logs -f job/distexec-k8sexec-probe +# kubectl -n dataprovider01 get jobs -l dagster/job=tightly_coupled_k8s_job # T6 +# +# --- Teardown -------------------------------------------------------------- +# +# kubectl -n dataprovider01 delete job distexec-k8sexec-probe +# kubectl -n dataprovider01 delete jobs -l dagster/job=tightly_coupled_k8s_job +# kubectl -n dataprovider01 delete cm distexec-probe-run-config +# +# The run itself stays in the platform's Dagster database and will be visible in +# its UI. That is not reversible with kubectl. + +apiVersion: v1 +kind: ConfigMap +metadata: + name: distexec-probe-run-config + namespace: dataprovider01 + labels: + app.kubernetes.io/name: distributed-execution + app.kubernetes.io/component: probe +data: + run-config.yaml: | + execution: + config: + job_namespace: dataprovider01 + job_image: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution:3f8175a17f0a + service_account_name: dagster-svc-account + image_pull_policy: IfNotPresent + max_concurrent: 2 + # Step pods inherit DAGSTER_HOME from the launching process otherwise, + # which points at a volume only that pod has. + env_vars: + - DAGSTER_HOME=/dagster/shared/distexec-probe/home + volumes: + - name: dagster-shared-storage + persistent_volume_claim: + claim_name: dagster-shared-pvc + volume_mounts: + - name: dagster-shared-storage + mount_path: /dagster/shared + step_k8s_config: + pod_spec_config: + automount_service_account_token: true +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: distexec-k8sexec-probe + namespace: dataprovider01 + labels: + app.kubernetes.io/name: distributed-execution + app.kubernetes.io/component: probe +spec: + backoffLimit: 0 + activeDeadlineSeconds: 1800 + template: + metadata: + labels: + app.kubernetes.io/name: distributed-execution + app.kubernetes.io/component: probe + spec: + restartPolicy: Never + serviceAccountName: dagster-svc-account + automountServiceAccountToken: true + securityContext: + runAsNonRoot: true + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + seccompProfile: + type: RuntimeDefault + containers: + - name: runner + image: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution:3f8175a17f0a + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + env: + # On the RWX volume, not a pod-local one: the default I/O manager writes + # step outputs under $DAGSTER_HOME/storage, and every step pod has to + # read what the previous one wrote. + - name: DAGSTER_HOME + value: /dagster/shared/distexec-probe/home + # How the chart tells a code location which image its steps run as. + - name: DAGSTER_CURRENT_IMAGE + value: gitea.dataprovider01.sandbox-cat-dat.simpl-europe.eu/j.r/distributed-execution:3f8175a17f0a + - name: DAGSTER_PG_PASSWORD + valueFrom: + secretKeyRef: + name: dagster-postgresql-secret + key: postgresql-password + command: + - sh + - -c + - | + set -e + mkdir -p "$DAGSTER_HOME" + cp /instance-cm/dagster.yaml "$DAGSTER_HOME/dagster.yaml" + echo "===== run config in use =====" + cat /run-config/run-config.yaml + echo "===== T6/T7: tightly_coupled_k8s_job =====" + dagster job execute -f src/distributed_execution/repository.py -j tightly_coupled_k8s_job -c /run-config/run-config.yaml + volumeMounts: + - name: instance-cm + mountPath: /instance-cm + readOnly: true + - name: run-config + mountPath: /run-config + readOnly: true + - name: dagster-shared-storage + mountPath: /dagster/shared + resources: + requests: + cpu: 200m + memory: 512Mi + limits: + cpu: "1" + memory: 1Gi + volumes: + - name: instance-cm + configMap: + name: dagster-instance + - name: run-config + configMap: + name: distexec-probe-run-config + - name: dagster-shared-storage + persistentVolumeClaim: + claimName: dagster-shared-pvc From ba93a20ae27ab3b102ccd34f0c3e7430e14d3ab5 Mon Sep 17 00:00:00 2001 From: ILay Date: Tue, 1 Sep 2026 19:12:27 +0200 Subject: [PATCH 19/22] [SIMPL-30451] Mount shared storage in step pods Configure Kubernetes executor step pods with the shared Dagster home and persistent volume used by the code location. Changelog: fixed --- .../tightly_coupled/jobs.py | 18 ++++++++++++++++++ tests/test_tightly_coupled.py | 13 +++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/distributed_execution/tightly_coupled/jobs.py b/src/distributed_execution/tightly_coupled/jobs.py index c5f82f9..cfa88da 100644 --- a/src/distributed_execution/tightly_coupled/jobs.py +++ b/src/distributed_execution/tightly_coupled/jobs.py @@ -31,13 +31,31 @@ COMMON_TAGS = { # Per-step pod shape. Only honoured by k8s_job_executor. STEP_K8S_CONFIG = { "container_config": { + "env": [ + { + "name": "DAGSTER_HOME", + "value": "/dagster/shared/distributed-execution", + } + ], "resources": { "requests": {"cpu": "100m", "memory": "128Mi"}, "limits": {"cpu": "500m", "memory": "512Mi"}, }, + "volume_mounts": [ + { + "name": "dagster-shared-storage", + "mount_path": "/dagster/shared", + } + ], }, "pod_spec_config": { "restart_policy": "Never", + "volumes": [ + { + "name": "dagster-shared-storage", + "persistent_volume_claim": {"claim_name": "dagster-shared-pvc"}, + } + ], }, } diff --git a/tests/test_tightly_coupled.py b/tests/test_tightly_coupled.py index de03428..e3571a1 100644 --- a/tests/test_tightly_coupled.py +++ b/tests/test_tightly_coupled.py @@ -5,6 +5,7 @@ import pytest from distributed_execution.preflight import check_env_vars, describe_pod_identity from distributed_execution.repository import defs from distributed_execution.tightly_coupled.jobs import ( + STEP_K8S_CONFIG, tightly_coupled_in_process_job, tightly_coupled_k8s_job, tightly_coupled_local_job, @@ -35,6 +36,18 @@ def test_each_job_declares_its_execution_target(job, expected_executor): assert job.tags["executor"] == expected_executor +def test_k8s_step_pods_mount_shared_dagster_storage(): + container_config = STEP_K8S_CONFIG["container_config"] + pod_spec_config = STEP_K8S_CONFIG["pod_spec_config"] + + assert {"name": "DAGSTER_HOME", "value": "/dagster/shared/distributed-execution"} in container_config["env"] + assert {"name": "dagster-shared-storage", "mount_path": "/dagster/shared"} in container_config["volume_mounts"] + assert { + "name": "dagster-shared-storage", + "persistent_volume_claim": {"claim_name": "dagster-shared-pvc"}, + } in pod_spec_config["volumes"] + + def test_in_process_job_runs_end_to_end(): result = tightly_coupled_in_process_job.execute_in_process() From 41312889602f884d41a9b56dc134cee27d3db378 Mon Sep 17 00:00:00 2001 From: ILay Date: Tue, 1 Sep 2026 20:03:23 +0200 Subject: [PATCH 20/22] fix(tightly-coupled): pin k8s step IO manager to shared storage --- src/distributed_execution/tightly_coupled/jobs.py | 15 ++++++++------- tests/test_tightly_coupled.py | 9 ++++++++- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/distributed_execution/tightly_coupled/jobs.py b/src/distributed_execution/tightly_coupled/jobs.py index cfa88da..dc49278 100644 --- a/src/distributed_execution/tightly_coupled/jobs.py +++ b/src/distributed_execution/tightly_coupled/jobs.py @@ -12,7 +12,7 @@ is the instance-level run launcher (see ``yaml/tightly-coupled/``). from __future__ import annotations -from dagster import graph, in_process_executor, multiprocess_executor +from dagster import fs_io_manager, graph, in_process_executor, multiprocess_executor from dagster_k8s import k8s_job_executor from distributed_execution.ops import ( @@ -28,15 +28,14 @@ COMMON_TAGS = { "business_operation": "DISTRIBUTED_EXECUTION_REFERENCE", } +# RWX PVC mounted into the run worker and every step pod. Set as the I/O manager +# base_dir rather than via DAGSTER_HOME: the Dagster chart already injects +# DAGSTER_HOME=/tmp/dagster and the earlier duplicate wins in the step pod. +SHARED_IO_BASE_DIR = "/dagster/shared/distributed-execution/storage" + # Per-step pod shape. Only honoured by k8s_job_executor. STEP_K8S_CONFIG = { "container_config": { - "env": [ - { - "name": "DAGSTER_HOME", - "value": "/dagster/shared/distributed-execution", - } - ], "resources": { "requests": {"cpu": "100m", "memory": "128Mi"}, "limits": {"cpu": "500m", "memory": "512Mi"}, @@ -104,6 +103,8 @@ tightly_coupled_k8s_job = distributed_execution_reference.to_job( # config `execution:` block is accepted and then silently discarded - which # also makes job_image and job_namespace impossible to supply at launch time. executor_def=k8s_job_executor, + # Steps run in separate pods, so step outputs have to land on shared storage. + resource_defs={"io_manager": fs_io_manager.configured({"base_dir": SHARED_IO_BASE_DIR})}, config={ "execution": { "config": { diff --git a/tests/test_tightly_coupled.py b/tests/test_tightly_coupled.py index e3571a1..2a4b921 100644 --- a/tests/test_tightly_coupled.py +++ b/tests/test_tightly_coupled.py @@ -5,6 +5,7 @@ import pytest from distributed_execution.preflight import check_env_vars, describe_pod_identity from distributed_execution.repository import defs from distributed_execution.tightly_coupled.jobs import ( + SHARED_IO_BASE_DIR, STEP_K8S_CONFIG, tightly_coupled_in_process_job, tightly_coupled_k8s_job, @@ -40,12 +41,18 @@ def test_k8s_step_pods_mount_shared_dagster_storage(): container_config = STEP_K8S_CONFIG["container_config"] pod_spec_config = STEP_K8S_CONFIG["pod_spec_config"] - assert {"name": "DAGSTER_HOME", "value": "/dagster/shared/distributed-execution"} in container_config["env"] assert {"name": "dagster-shared-storage", "mount_path": "/dagster/shared"} in container_config["volume_mounts"] assert { "name": "dagster-shared-storage", "persistent_volume_claim": {"claim_name": "dagster-shared-pvc"}, } in pod_spec_config["volumes"] + assert SHARED_IO_BASE_DIR.startswith("/dagster/shared/") + + +def test_k8s_job_pins_io_manager_to_shared_storage(): + io_manager = tightly_coupled_k8s_job.resource_defs["io_manager"] + resolved = io_manager.apply_config_mapping({}).value + assert resolved["config"]["base_dir"] == SHARED_IO_BASE_DIR def test_in_process_job_runs_end_to_end(): From 9b1b7056b0650b45f749f263936a82eaea5f3f94 Mon Sep 17 00:00:00 2001 From: ILay Date: Wed, 2 Sep 2026 18:47:27 +0200 Subject: [PATCH 21/22] [SIMPL-30451] Close the distributed execution reference service Check the chart's actual DAGSTER_PG_PASSWORD injection in the tightly coupled preflight instead of DAGSTER_POSTGRES_*, which the Simpl chart never sets; the old check warned about a misconfiguration on a correctly configured run pod. Evidence reports the variable name only, never its value. Record the platform k8s_job_executor run as cluster-verified in the guide and readiness checklist, add the Dagster UI screenshots covering job list, graph, code-configured tags and a successful run. Changelog: fixed --- CHANGELOG.md | 25 ++++-- README.md | 10 +-- .../user-guide/distributed-execution-guide.md | 80 ++++++++++++++---- .../distributed-execution-job-graph.png | Bin 0 -> 111054 bytes .../images/distributed-execution-job-list.png | Bin 0 -> 79615 bytes .../distributed-execution-launchpad.png | Bin 0 -> 116836 bytes .../distributed-execution-successful-run.png | Bin 0 -> 158941 bytes documents/user-guide/readiness-checklist.md | 78 ++++++++++++----- src/distributed_execution/preflight.py | 4 +- tests/test_loosely_coupled.py | 4 +- tests/test_tightly_coupled.py | 10 +++ 11 files changed, 155 insertions(+), 56 deletions(-) create mode 100644 documents/user-guide/images/distributed-execution-job-graph.png create mode 100644 documents/user-guide/images/distributed-execution-job-list.png create mode 100644 documents/user-guide/images/distributed-execution-launchpad.png create mode 100644 documents/user-guide/images/distributed-execution-successful-run.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 3985417..7d53f02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,10 +9,25 @@ (`PipesSubprocessClient`, `PipesK8sClient`) with a standalone external payload image. - Working example configuration and RBAC for both execution targets. +### verified + +- `tightly_coupled_k8s_job` executed end to end on sandbox-cat-dat through the + platform `K8sRunLauncher` (run `1d8cb167-9fb8-4a34-a036-789eac381e13`), closing + readiness rows T6 and T7. Step outputs are written to the shared + `dagster-shared-pvc` by pinning `fs_io_manager`'s `base_dir`; `DAGSTER_HOME` set + through `step_k8s_config` is ignored, because the Dagster chart injects + `DAGSTER_HOME=/tmp/dagster` ahead of it. +- `loosely_coupled_k8s_job` reached `RUN_SUCCESS` on sandbox-cat-dat through the + standalone probe (run `cff9b348-bfc3-4ac1-ab51-a94892b8e3a0`), with four + external payload pods reporting over the pod-log message channel. +- Tightly coupled preflight evidence now checks the chart's actual + `DAGSTER_PG_PASSWORD` injection without exposing its value. +- Dagster UI screenshots cover the registered jobs, graph, code-configured + execution-target tags and a successful reference run. +- The platform deployment diagram includes the service and both integration + patterns. + ### pending -- Publish the payload image to the container registry. -- End-to-end run of `loosely_coupled_k8s_job` against a cluster, and confirmation - of the Kubernetes rows in the readiness checklist. -- Screenshots of UI surfaces and integration-pattern diagrams. -- Platform architecture document update. +- Extend the project-level GitLab pipeline to publish the payload image as well + as the code-location image. diff --git a/README.md b/README.md index 3241130..75a92e0 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ actually run, and how does runtime information get back to the control plane?* | User guide | [documents/user-guide/distributed-execution-guide.md](documents/user-guide/distributed-execution-guide.md) | Complete | | Readiness checklist | [documents/user-guide/readiness-checklist.md](documents/user-guide/readiness-checklist.md) | Complete | | Tightly coupled reference | [src/distributed_execution/tightly_coupled/jobs.py](src/distributed_execution/tightly_coupled/jobs.py) | Runnable | -| Loosely coupled reference | [src/distributed_execution/loosely_coupled/jobs.py](src/distributed_execution/loosely_coupled/jobs.py) | Runnable (subprocess verified) | +| Loosely coupled reference | [src/distributed_execution/loosely_coupled/jobs.py](src/distributed_execution/loosely_coupled/jobs.py) | Runnable and cluster-verified | | External payload | [payload/work.py](payload/work.py) | Runnable | | Example configuration | [yaml/](yaml/) | Complete | @@ -88,10 +88,10 @@ pipeline still has to learn. ## Status -Both execution targets are implemented. The tightly coupled jobs and the loosely -coupled **subprocess** transport are verified by the test suite. The loosely -coupled **Kubernetes** transport is implemented but has not yet been run against -a cluster; see the guide's *Outstanding work* section. +Both execution targets are implemented. Local variants are verified by the test +suite, `tightly_coupled_k8s_job` has run end to end through the platform launcher, +and `loosely_coupled_k8s_job` has run end to end through the standalone cluster +probe. See the guide and readiness checklist for the recorded evidence. ## Licence diff --git a/documents/user-guide/distributed-execution-guide.md b/documents/user-guide/distributed-execution-guide.md index e8f0411..18a881c 100644 --- a/documents/user-guide/distributed-execution-guide.md +++ b/documents/user-guide/distributed-execution-guide.md @@ -5,14 +5,10 @@ integration pattern for a Dagster workflow on the Simpl orchestration platform. > **Document status.** Both setups are backed by runnable reference -> implementations in this repository. The tightly coupled setup and the loosely -> coupled **subprocess** transport are verified end to end, including runs -> launched from the Dagster UI — see [section 5.6](#56-what-a-verified-run-actually-produced). -> The loosely coupled **Kubernetes** transport was run on sandbox-cat-dat on -> 2026-08-31 and reached `RUN_SUCCESS`; see the readiness checklist for the -> evidence. What remains unproven on a cluster is the *tightly* coupled -> Kubernetes path — `k8s_job_executor` — whose rows stay marked -> **NOT CLUSTER-VERIFIED**. See [Outstanding work](#8-outstanding-work). +> implementations and verified end to end. The loosely coupled Kubernetes path +> reached `RUN_SUCCESS` on sandbox-cat-dat on 2026-08-31; the tightly coupled +> `k8s_job_executor` path reached `RUN_SUCCESS` through the platform launcher on +> 2026-09-01. See the readiness checklist for the recorded evidence. --- @@ -233,12 +229,18 @@ tightly_coupled_local_job = distributed_execution_reference.to_job( ```python tightly_coupled_k8s_job = distributed_execution_reference.to_job( name="tightly_coupled_k8s_job", - executor_def=k8s_job_executor.configured( - { - "image_pull_policy": "IfNotPresent", - "step_k8s_config": STEP_K8S_CONFIG, + executor_def=k8s_job_executor, + resource_defs={ + "io_manager": fs_io_manager.configured({"base_dir": SHARED_IO_BASE_DIR}) + }, + config={ + "execution": { + "config": { + "image_pull_policy": "IfNotPresent", + "step_k8s_config": STEP_K8S_CONFIG, + } } - ), + }, tags={**COMMON_TAGS, "executor": "k8s_job"}, ) ``` @@ -253,6 +255,22 @@ operationally: [yaml/tightly-coupled/rbac-step-executor.yaml](../../yaml/tightly-coupled/rbac-step-executor.yaml). - Per-step resource requests apply per pod, so the aggregate request for a fan-out step is the per-step request multiplied by concurrency. +- **Step outputs must land on storage every step pod can read.** With the default + filesystem I/O manager each pod writes to its own container filesystem, so a + downstream step opens a path that does not exist there. `STEP_K8S_CONFIG` mounts + the RWX `dagster-shared-pvc` at `/dagster/shared`, and the job pins + `fs_io_manager`'s `base_dir` underneath it. +- Pin `base_dir` directly rather than relying on `DAGSTER_HOME`. The default + `base_dir` is `$DAGSTER_HOME/storage`, but the Dagster chart already injects + `DAGSTER_HOME=/tmp/dagster` into the step container; a second entry appended by + `step_k8s_config` does not displace it, so the override is silently ignored and + outputs keep going to `/tmp/dagster/storage`. + +The executor's defaults go through `config=` rather than +`k8s_job_executor.configured(...)`. `.configured()` collapses the executor's +config schema to `Any`, which makes a run-config `execution:` block accepted and +then discarded, and makes `job_image` and `job_namespace` impossible to supply at +launch time. The evidence that the switch took effect is in `summarise_results` output metadata, and the two fields say different things: @@ -485,6 +503,32 @@ on a cluster it is what distinguishes `k8s_job_executor` from holds the namespace the run pod landed in, which is the placement half of the execution target. +### 5.7 Dagster UI reference + +The screenshots below were captured from the local reference service on +2026-09-02. They show the surfaces participants use to inspect job linkage and +run evidence. Cluster placement is evidenced separately by the sandbox run IDs +in the readiness checklist. + +All five reference jobs are registered under one code location: + +![Distributed execution job list](images/distributed-execution-job-list.png) + +The job overview exposes the graph whose executor or dispatch op defines the +integration pattern: + +![Tightly coupled reference graph](images/distributed-execution-job-graph.png) + +The Launchpad shows that `execution_target` and `executor` are job tags persisted +by code configuration, not a separate runtime-only selector: + +![Execution-target tags in Launchpad](images/distributed-execution-launchpad.png) + +A successful local run displays the step events and final status used alongside +output metadata as retained evidence: + +![Successful tightly coupled reference run](images/distributed-execution-successful-run.png) + --- ## 6. Upstream documentation @@ -512,8 +556,8 @@ Tracked under SIMPL-30451. |---|---|---| | Execution-target choices, prerequisites, workflow-level documentation | AC1 | Complete | | Comparison, environment-fit indicators, trade-offs | AC2 | Complete | -| Readiness checklist and evidence mapping | AC3 | Complete; tightly coupled K8s executor rows not cluster-verified | -| Misconfiguration symptoms and corrections | AC3 | Complete; tightly coupled K8s symptoms not cluster-verified | +| Readiness checklist and evidence mapping | AC3 | Complete; both Kubernetes paths cluster-verified | +| Misconfiguration symptoms and corrections | AC3 | Complete; corrected with observed cluster failure modes | | Configuration constructs and persistence | AC4 | Complete | | Before-and-after example, tightly coupled | AC4 | Complete | | Before-and-after example, switching to loosely coupled | AC4 | Complete | @@ -524,6 +568,6 @@ Tracked under SIMPL-30451. | Payload image published to a container registry | Tech details | Complete on the sandbox Gitea registry; the GitLab registry still pending | | GitLab pipeline builds both images | Tech details | **Pending** — the shared `ds.gitlab-ci.yml` template builds one image from the root Dockerfile | | End-to-end run of `loosely_coupled_k8s_job` on a cluster | Tech details | Complete — sandbox-cat-dat, 2026-08-31, run `cff9b348…`; see the readiness checklist | -| `distributed-execution` registered as a code location on a platform Dagster | Tech details | **Pending** — blocked on the 1.13.19 vs 1.12.8 control plane skew | -| Screenshots of UI surfaces | Tech details | **Pending** — needs a deployed platform instance, not a local dev server | -| Platform architecture document update | Tech details | **Pending** | +| `distributed-execution` registered as a code location on a platform Dagster | Tech details | Complete — tightly coupled run `1d8cb167…` launched through the platform webserver | +| Screenshots of UI surfaces | Tech details | Complete — job list, graph, Launchpad linkage and successful run captured in section 5.7 | +| Platform architecture document update | Tech details | Complete — root `deployment_diagram.md` includes the service and both runtime-information paths | diff --git a/documents/user-guide/images/distributed-execution-job-graph.png b/documents/user-guide/images/distributed-execution-job-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..79f88903fe52c1548bd5dc5f59e8a1d514ccef84 GIT binary patch literal 111054 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 N@x0-=Ld~o9{|ATOzJ34z literal 0 HcmV?d00001 diff --git a/documents/user-guide/images/distributed-execution-job-list.png b/documents/user-guide/images/distributed-execution-job-list.png new file mode 100644 index 0000000000000000000000000000000000000000..57b53718889048bf2a83092cb74237403b61d971 GIT binary patch literal 79615 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
!aT#{99~}GUbx=@H5c^B+WG9hfhEK1QxIOd+ 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 YkozANn5Opr^V^k`Qj#qH_$A=~0Cbyr=Kufz literal 0 HcmV?d00001 diff --git a/documents/user-guide/images/distributed-execution-successful-run.png b/documents/user-guide/images/distributed-execution-successful-run.png new file mode 100644 index 0000000000000000000000000000000000000000..d693dbe00d8ccce797a4a85d19a4fb0e3054e4a5 GIT binary patch literal 158941 zcmcF}^;cU_({4)(6e|S^6fecSSaB#`ytqSK+}$N@X>oTC?rs5sw75g?Ai-UOC0O$H zz2AM;y8pnPU(Vh?oSAcG*4i`Av!961>WT!ol(KA_!>%weGdAA#aTZ)&Gh00@jKSM@Wse)U-qCZhdHaOt8Qc{ zCyD-3;eNgMuXtY-gDu>iEuyn%49E?>NPp~K+q-e~-c@t{6S&tYgnJ?2^!#H;UjMwB zijvH~X#Z=hYA>Jucm3o$76HcF|7Z8||NBn;>3^e_rDtbT=j4}tEY@Ou{XE!8{`YST zN#NjC!J!2!I~zM2#MaZ7O2Ai!@%1^T_^H0S8Fz(bNdqowAaA`I36S&g+^YQh7K6u1hwsce&)aS`~fOhctK| z%#WN~n1<-)Y4J~MRdQD47svE&HYIOUXEgR38P*>E$E|?vYeq%=yrI#2ENxA4b46BS zTt7@C%boKDF0Q-##pei$??AnTy0W^wJUwo~-o3{`_J79uDsL$-?_)~RJ<~nBsvqI; zm^U=MafJ=Mu_-B~pQ_vTxG3ljcnEe)?tRR3 zv2~2>9)N?SnV8(JdbJk9qhhx&eamPUjJf`kUP|Ujae1>8`oSW>S%szFw?BJKYU0g% zD-%3J-*r{6DgH2i`s5t%)eEFJH>j@e$=r)T7=T##&!7!v!2pAN*&XX^5z&wz=E@^H z!D?G#Ym?Uz)rD!mH0%Qn+24&rzgpk$<5hO7tkm98ms`0mMou2`^H0Bhyv^CDJuUhr zOe68^;rE|C6+$0df%f)LW^O%>gSg|PYHmLfKW2

CfNTw>asZeg_!ym+7?dX(CED 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 a-2wV`NWg6J1vj13&J=#$sN$^4t$zbL2ANC% literal 0 HcmV?d00001 diff --git a/documents/user-guide/readiness-checklist.md b/documents/user-guide/readiness-checklist.md index 832b7e7..9c721a8 100644 --- a/documents/user-guide/readiness-checklist.md +++ b/documents/user-guide/readiness-checklist.md @@ -7,12 +7,11 @@ Run these checks **before the first execution** of a workflow, and again after a change to the run launcher, the executor, the target namespace or the code location image. -> **L4–L10 were cleared on sandbox-cat-dat on 2026-08-31.** Checks L1–L3 and L11, -> which exercise the payload contract, the message-parsing path and image-level -> isolation, are verified locally. The **tightly coupled** Kubernetes path has -> been assessed against the same cluster but not executed — C5, C6, T2, T3, T5 -> and T8 are confirmed from the live instance configuration and the deployed code -> locations. See [section 2.1](#21-sandbox-state-2026-08-31). +> **Both Kubernetes paths are cluster-verified.** L4–L10 were cleared on +> sandbox-cat-dat on 2026-08-31. The tightly coupled `k8s_job_executor` path +> reached `RUN_SUCCESS` through the platform launcher on 2026-09-01. Checks +> L1–L3 and L11, which exercise the payload contract, message parsing and image +> isolation, are also verified locally. See [section 2.1](#21-sandbox-state-2026-08-31). --- @@ -31,7 +30,7 @@ location image. | # | Check | How to verify | Expected evidence | |---|---|---|---| -| T1 | Run pod reaches the metadata database | Launch `tightly_coupled_in_process_job` | Run reaches `SUCCESS`; `report_execution_target` output metadata lists `DAGSTER_POSTGRES_HOST`, `DAGSTER_POSTGRES_USER` and `DAGSTER_POSTGRES_DB` under `env_vars_present`, and `env_vars_missing` is empty | +| T1 | Run pod reaches the metadata database | Launch `tightly_coupled_in_process_job` | Run reaches `SUCCESS`; `report_execution_target` metadata lists `DAGSTER_PG_PASSWORD` under `env_vars_present` without exposing its value, and `env_vars_missing` is empty. Successful step startup is the connectivity proof because the step loads run state from Postgres before executing the op | | T2 | Vault injection works | Same run; inspect the run pod | `kubectl -n dagster describe pod ` shows the `vault-env` init container completed; no `vault:` literal remains in the process environment | | T3 | Object storage is reachable | Same run, if the workflow uses S3 | No `EndpointConnectionError` in run logs; `S3_ENDPOINT_URL` present in `env_vars_present` | | T4 | Multiprocess fan-out actually fans out | Launch `tightly_coupled_local_job` | Run succeeds; `summarise_results` metadata shows one entry per unit in `contributing_workers` and a single entry in `contributing_hosts` — separate processes, same machine | @@ -67,7 +66,7 @@ instance rather than the platform's Postgres. `tightly_coupled_in_process_job` also succeeded, reporting a single worker. -### T1's env-var check is wrong for this platform +### T1's env-var check and platform contract The run emitted: @@ -75,19 +74,20 @@ The run emitted: > `DAGSTER_POSTGRES_HOST`, `DAGSTER_POSTGRES_USER`, `DAGSTER_POSTGRES_DB`. > Expected for a loosely coupled target; a misconfiguration for a tightly coupled one. -That warning would fire on a **correctly configured** platform run pod. The chart -does not set those variables: it injects `DAGSTER_PG_PASSWORD` from -`dagster-postgresql-secret` and bakes host, user and database into `dagster.yaml`. -So `TIGHTLY_COUPLED_ENV_VARS` in `preflight.py` names variables Simpl does not -use, and the check reports a misconfiguration that is not one. The reachability -probe above is the part that carries real evidence. +That warning was a false positive on a **correctly configured** platform run +pod. The chart does not set those variables: it injects `DAGSTER_PG_PASSWORD` +from `dagster-postgresql-secret` and stores host, user and database in +`dagster.yaml`. The reference check now tests for `DAGSTER_PG_PASSWORD` and +reports only its name, never its value. Database reachability is evidenced by +successful step startup: a tightly coupled step must load its run state from +the configured Dagster instance before `report_execution_target` can execute. ### T6 and T7, executed 2026-08-31 Running them needed three things the earlier attempt lacked: dagster pinned to 1.12.8 to match the control plane, so writing to the live `dataprovider01_dagster` -could not trigger a migration; `DAGSTER_HOME` moved onto the RWX -`dagster-shared-pvc`, because the default I/O manager writes step outputs under +could not trigger a migration; step outputs moved onto the RWX +`dagster-shared-pvc`, because the default I/O manager writes them under `$DAGSTER_HOME/storage` and each step pod otherwise gets its own empty volume; and `automount_service_account_token: true` in `step_k8s_config`, because `dagster-svc-account` disables it by default. The probe is @@ -125,6 +125,39 @@ A run submitted the normal way, through the webserver to `K8sRunLauncher`, gets T6/T7 end to end, including `summarise_results`, needs the code location registered on the platform Dagster. +### T6 and T7 closed end to end, 2026-09-01 + +With the code location registered on the platform Dagster, +`tightly_coupled_k8s_job` was launched from the webserver and reached +`RUN_SUCCESS` as run `1d8cb167-9fb8-4a34-a036-789eac381e13`. `K8sRunLauncher` +created `dagster-run-1d8cb167-…` in `dataprovider01`, `K8sStepHandler` created one +`dagster-step-…` Job per step, and every step — including `summarise_results` — +completed. No hand-rolled probe, no run-monitoring 403. + +**The last thing in the way was where step outputs are written.** Two earlier +attempts failed on +`FileNotFoundError: /tmp/dagster/storage//generate_work_units/result/unit_0`, +with every step pod using its own container filesystem. Mounting +`dagster-shared-pvc` into the step pods was necessary but not sufficient: setting +`DAGSTER_HOME` through `step_k8s_config` does not take effect, because the Dagster +chart already injects `DAGSTER_HOME=/tmp/dagster` and the appended second entry +does not displace the first. The fix is to bypass `DAGSTER_HOME` and pin the I/O +manager instead — `fs_io_manager.configured({"base_dir": SHARED_IO_BASE_DIR})` on +the job, with `SHARED_IO_BASE_DIR` under the mounted PVC. The successful run logs +confirm it: + +> Handled output "result" using IO manager "io_manager" — +> `/dagster/shared/distributed-execution/storage/1d8cb167-…/generate_work_units/result/unit_0` + +The platform run exposed the false-positive `DAGSTER_POSTGRES_*` warning +described under T1 above. The reference now checks the chart's actual +`DAGSTER_PG_PASSWORD` injection instead. + +> Note: `report_execution_target` reported `namespace: ` on a +> step pod that plainly was in Kubernetes. The check reads the service account +> namespace file, which is absent when the token is not automounted. It is a +> property of the probe, not of the run. + **C6 passes, contrary to what `job_namespace` alone suggests.** The launcher's `job_namespace: dagster` is only a default. Each code location ships a `DAGSTER_CONTAINER_CONTEXT` environment variable — generated by the chart — whose @@ -141,10 +174,8 @@ Both deployed code locations carry it, so both would launch correctly: | `template-code-location` | `dataprovider01` | | `semaphore-ui` | `dataprovider01` | -What is still true is that **no run has ever executed on this cluster** — -`dataprovider01` holds no pods labelled `dagster/run-id` and the daemon log shows -no launch activity. That appears to be because nothing has been launched, not -because anything is broken. +The successful run confirms that the code-location container context places run +and step pods in `dataprovider01` with the required namespace-local dependencies. The residual risk is narrower than a broken namespace, but real: a code location that reaches the launcher *without* a container context namespace inherits @@ -216,6 +247,7 @@ rather than at the omission. | `env_vars_missing` is non-empty in `report_execution_target` metadata | Env vars are set on the code location deployment but not on the run pod | Add them under `runLauncher.config.k8sRunLauncher.runK8sConfig.containerConfig.env` — code location env is **not** inherited by run pods | | A literal `vault:...` string appears as a value at runtime | Vault mutating webhook did not process the pod | Verify the `vault.security.banzaicloud.io/*` annotations are on the **run pod** template, not only the code location pod | | Steps hang in `STARTING` with `k8s_job_executor` | Service account lacks Job create/watch permission | Apply `yaml/tightly-coupled/rbac-step-executor.yaml` and confirm with `kubectl auth can-i` | +| `FileNotFoundError` loading a step input from `/tmp/dagster/storage/...` | Step pods each use their own container filesystem for I/O manager output | Mount an RWX volume into step pods via `step_k8s_config` **and** pin `fs_io_manager`'s `base_dir` under it. Setting `DAGSTER_HOME` in `step_k8s_config` does not work — the chart's `DAGSTER_HOME=/tmp/dagster` is injected first and wins | | `contributing_hosts` shows one host when `k8s_job_executor` is configured | Run tags or Launchpad config overrode the executor, or the image predates the change | Confirm the code location reloaded after the image bump; check the run's *Config* tab for an `execution:` override | | Step pods `OOMKilled` under fan-out | Per-step memory limit applied per pod, aggregate exceeded quota | Raise `step_k8s_config` limits or lower step concurrency; the two multiply | | Postgres refuses connections once fan-out grows | Each step pod is an independent DB client | Reduce step concurrency, raise the Postgres connection limit, or move the fan-out step to a loosely coupled target | @@ -234,8 +266,10 @@ rather than at the omission. | Run cancelled in the UI, payload pod keeps running | Cancellation is not propagated to dispatched workloads automatically | `delete_pod_on_completion` handles the normal path; for cancellation, verify orphaned Jobs and add a cleanup sensor | > **Partly observed.** The pipes rows were exercised on sandbox-cat-dat on -> 2026-08-31. Rows describing the tightly coupled `k8s_job_executor` still follow -> from the dagster-k8s API rather than from observation. +> 2026-08-31. The tightly coupled `k8s_job_executor` rows were closed on +> 2026-09-01 by run `1d8cb167-9fb8-4a34-a036-789eac381e13`; the remaining rows in +> the table above still follow from the dagster-k8s API rather than from +> observation. > > One symptom the cluster run added, absent from the table above: a service > account with `automountServiceAccountToken: false` — which the platform's diff --git a/src/distributed_execution/preflight.py b/src/distributed_execution/preflight.py index 295880c..9920a42 100644 --- a/src/distributed_execution/preflight.py +++ b/src/distributed_execution/preflight.py @@ -12,9 +12,7 @@ from urllib.parse import urlparse # Runtime dependencies a tightly coupled execution pod must be able to resolve. TIGHTLY_COUPLED_ENV_VARS = ( - "DAGSTER_POSTGRES_HOST", - "DAGSTER_POSTGRES_USER", - "DAGSTER_POSTGRES_DB", + "DAGSTER_PG_PASSWORD", ) diff --git a/tests/test_loosely_coupled.py b/tests/test_loosely_coupled.py index 77cba0d..7885706 100644 --- a/tests/test_loosely_coupled.py +++ b/tests/test_loosely_coupled.py @@ -65,9 +65,7 @@ def test_each_unit_is_dispatched_to_its_own_external_worker(): def test_payload_reports_no_orchestration_credentials(monkeypatch): - monkeypatch.delenv("DAGSTER_POSTGRES_HOST", raising=False) - monkeypatch.delenv("DAGSTER_POSTGRES_USER", raising=False) - monkeypatch.delenv("DAGSTER_POSTGRES_DB", raising=False) + monkeypatch.delenv("DAGSTER_PG_PASSWORD", raising=False) result = loosely_coupled_subprocess_job.execute_in_process() mapped = result.output_for_node("dispatch_external_work_subprocess") diff --git a/tests/test_tightly_coupled.py b/tests/test_tightly_coupled.py index 2a4b921..5f80c1d 100644 --- a/tests/test_tightly_coupled.py +++ b/tests/test_tightly_coupled.py @@ -81,6 +81,16 @@ def test_env_var_check_reports_missing_names(): assert result["missing"] == ["DEFINITELY_NOT_SET_12345"] +def test_env_var_check_reports_present_names(monkeypatch): + monkeypatch.setenv("DAGSTER_PG_PASSWORD", "not-exposed-in-evidence") + + result = check_env_vars(("DAGSTER_PG_PASSWORD",)) + + assert result["passed"] is True + assert result["present"] == ["DAGSTER_PG_PASSWORD"] + assert "not-exposed-in-evidence" not in repr(result) + + def test_pod_identity_falls_back_outside_kubernetes(monkeypatch): monkeypatch.delenv("DAGSTER_K8S_PIPELINE_RUN_NAMESPACE", raising=False) From aa49420ca671fcb5d5a922801579a6e54cbda631 Mon Sep 17 00:00:00 2001 From: ILay Date: Wed, 2 Sep 2026 18:48:01 +0200 Subject: [PATCH 22/22] [SIMPL-30787] Document container-cluster configuration inputs Add the cluster-configuration input reference the guide was missing: which inputs are mandatory, conditional or optional in each setup, a reusable minimum input set, and worked examples expressed in the format each setup already uses. No configuration schema or key naming is prescribed. Retitle the subject sections so they no longer carry one story's AC numbering, and add a traceability section mapping SIMPL-30787 and SIMPL-30451 acceptance criteria onto them. Changelog: added --- CHANGELOG.md | 3 + README.md | 2 +- .../user-guide/distributed-execution-guide.md | 206 ++++++++++++++++-- documents/user-guide/readiness-checklist.md | 5 +- yaml/tightly-coupled/values-run-launcher.yaml | 4 +- 5 files changed, 193 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d53f02..a34a2fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ - Repository skeleton for the `distributed-execution` supporting data service. - User guide covering execution-target selection, decision support and readiness checks. +- Cluster-configuration input reference: mandatory versus optional inputs per setup, + a reusable minimum input set and worked examples in both setups' own formats. +- Requirement traceability mapping the guide's sections onto SIMPL-30451 and SIMPL-30787. - Runnable tightly coupled reference implementations (`in_process`, `multiprocess`, `k8s_job_executor`). - Runnable loosely coupled reference implementations via dagster-pipes (`PipesSubprocessClient`, `PipesK8sClient`) with a standalone external payload image. diff --git a/README.md b/README.md index 75a92e0..6e64f87 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ distributed-execution/ │ ├── work.py │ ├── requirements.txt │ └── Dockerfile -├── documents/user-guide/ # AC1-AC4 documentation +├── documents/user-guide/ # Guide, checklist and requirement traceability ├── yaml/ # Working example configuration ├── tests/ ├── Dockerfile diff --git a/documents/user-guide/distributed-execution-guide.md b/documents/user-guide/distributed-execution-guide.md index 18a881c..b126b0e 100644 --- a/documents/user-guide/distributed-execution-guide.md +++ b/documents/user-guide/distributed-execution-guide.md @@ -66,7 +66,7 @@ pattern. --- -## 2. AC1 — Choosing an execution target +## 2. Choosing an execution target and cluster setup ### 2.1 Choose tightly coupled when @@ -121,7 +121,7 @@ before it is run for the first time. Section 5.4 explains where each item lives. --- -## 3. AC2 — Decision support +## 3. Decision support and cluster-configuration inputs ### 3.1 Side-by-side comparison @@ -179,9 +179,134 @@ Use these as a fast triage. If several point the same way, that is your answer. succeed while reporting nothing. Two images to build, version and scan instead of one. +### 3.4 Cluster-configuration inputs + +Once the setup is chosen, the container cluster has to be described. The table +below is the full input surface, split into what a run cannot start without and +what only applies under a stated condition. "Mandatory" means the run fails, or +reports nothing, if the input is absent or wrong. + +| Input | Tightly coupled | Loosely coupled | Notes | +|---|---|---|---| +| Cluster / kube context hosting the run worker | Mandatory | Mandatory | The launcher's cluster. Loosely coupled may dispatch to a *second* cluster | +| Namespace for run pods | Mandatory | Mandatory | Supplied by the code location's `DAGSTER_CONTAINER_CONTEXT`; the launcher's `job_namespace` is only a fallback | +| Code location image reference and tag | Mandatory | Mandatory | Never `latest`; check C3 | +| Executor selection | Mandatory | Mandatory | Bounds step granularity; loosely coupled it bounds only dispatch concurrency | +| Service account for run pods | Mandatory | Mandatory | Must have `automountServiceAccountToken: true` | +| Run-pod egress to the metadata database | **Mandatory** | Not applicable | The pod that writes run events | +| Namespace for step pods | Conditional — `k8s_job_executor` only | Not applicable | Defaults to the run pod's namespace | +| RBAC to create and watch Jobs | Conditional — `k8s_job_executor` only | **Mandatory**, in the payload namespace | Same verbs, different namespace | +| Shared RWX volume plus an I/O manager `base_dir` under it | Conditional — `k8s_job_executor` only | Optional | Without it step pods cannot read each other's outputs | +| Per-step resource requests and limits | Optional | Optional | Multiply by step or dispatch concurrency | +| Payload image reference and tag | Not applicable | **Mandatory** | Must share the code location's commit tag | +| Namespace for payload workloads | Not applicable | **Mandatory** | May be in another cluster or trust boundary | +| Message channel and its reader | Not applicable | **Mandatory** | Pod log stream by default; RBAC on `pods/log` *is* the channel | +| Payload wait timeout | Not applicable | Optional | Defaults to 24 h — lower it so scheduling failures surface | +| Vault role and secret paths | Conditional — if the workflow reads secrets | Conditional — launching pod only | Payloads should receive only `extras` and explicit `env` | +| Object-storage endpoint and credentials | Conditional — if the workflow uses S3 | Conditional — if the *payload* uses S3 | | +| Image pull secret | Conditional — non-anonymous registry | Conditional — non-anonymous registry | Applies to the SA that runs the pod, which for dispatched payload Jobs is `default` | + +### 3.5 Minimum input set + +The list below is the reusable baseline: the smallest set of values a team has to +agree on before a workflow can be configured against a cluster. Record it once +per workflow, in the workflow's own repository, and carry it into whatever +configuration format the team already uses. + +**Both setups** + +1. `cluster` — the cluster the run worker lands in. +2. `run_namespace` — namespace for run pods. +3. `code_location_image` — image reference including an immutable tag. +4. `executor` — executor name plus its concurrency bound. +5. `service_account` — the identity run pods assume. + +**Tightly coupled adds** + +6. `metadata_db` — host and port the run and step pods must reach. +7. `step_namespace` — only when `k8s_job_executor` is used. +8. `shared_output_path` — RWX mount path, and the I/O manager `base_dir` pinned + under it, again only for `k8s_job_executor`. + +**Loosely coupled adds** + +6. `payload_image` — image reference sharing the code location's commit tag. +7. `payload_namespace` — where dispatched workloads are created; may be in + another cluster. +8. `message_channel` — the reader in use, and the RBAC verb that carries it. + +This guide deliberately does **not** prescribe a configuration schema or key +names. The names above are descriptive labels for the values, not a required +format; the examples in section 3.6 express the same baseline in two different +shapes, and both are correct. + +### 3.6 Worked input examples + +The reference configuration in [yaml/](../../yaml) shows the baseline expressed +in the formats each setup already uses. Neither is normative. + +**Tightly coupled** — the inputs land in Helm values and in the job's executor +config, because that is where the platform chart and Dagster expect them: + +```yaml +# yaml/tightly-coupled/values-run-launcher.yaml (shape, not a fixed schema) +dagster: + runLauncher: + type: K8sRunLauncher + config: + k8sRunLauncher: + jobNamespace: dagster # run_namespace + failPodOnRunFailure: true + runK8sConfig: + containerConfig: + env: # metadata_db, S3 and Vault reachability + - name: S3_ENDPOINT_URL + value: https://s3.dev.simpl-europe.eu +``` + +```python +# step_namespace, shared_output_path and the executor travel with the job +tightly_coupled_k8s_job = distributed_execution_reference.to_job( + executor_def=k8s_job_executor, + resource_defs={"io_manager": fs_io_manager.configured({"base_dir": SHARED_IO_BASE_DIR})}, + config={"execution": {"config": {"step_k8s_config": STEP_K8S_CONFIG}}}, +) +``` + +**Loosely coupled** — the same baseline, but the cluster-facing half is the +payload image and its namespace. Here they are environment values set on both the +code location and the run launcher, because the dispatching pod is a run pod: + +```yaml +# yaml/loosely-coupled/values-pipes-payload.yaml (shape, not a fixed schema) +dagster: + dagster-user-deployments: + deployments: + - name: distributed-execution + env: + - name: PIPES_PAYLOAD_IMAGE # payload_image, tag-locked + value: /distributed-execution/payload:0.0.0 + - name: PIPES_PAYLOAD_NAMESPACE # payload_namespace + value: dagster +``` + +```python +PAYLOAD_IMAGE = os.environ.get("PIPES_PAYLOAD_IMAGE", ...) +PAYLOAD_NAMESPACE = os.environ.get("PIPES_PAYLOAD_NAMESPACE", "dagster") +``` + +The `message_channel` input has no key in either file. The default reader is the +pod log stream, so it is configured by granting `pods/log` in +[yaml/loosely-coupled/rbac-pipes-dispatch.yaml](../../yaml/loosely-coupled/rbac-pipes-dispatch.yaml). +An input can be mandatory and still not be a configuration field. + +Note what is absent from the loosely coupled example: no metadata database, no +Vault role, no object-storage credentials. Those inputs are not optional there — +they do not exist, which is the operational consequence of the choice. + --- -## 4. AC3 — Readiness checks +## 4. Readiness checks Pre-run validation items, their expected evidence, and the symptoms and corrections for common misconfigurations are maintained separately, in @@ -189,7 +314,7 @@ corrections for common misconfigurations are maintained separately, in --- -## 5. AC4 — Configuring execution-target linkage in code +## 5. Configuring execution-target linkage in code ### 5.1 Configuration constructs @@ -550,24 +675,59 @@ output metadata as retained evidence: ## 8. Outstanding work -Tracked under SIMPL-30451. +Tracked under SIMPL-30451 and SIMPL-30787. -| Item | AC | Status | +| Item | Status | +|---|---| +| Execution-target choices, prerequisites, workflow-level documentation | Complete | +| Comparison, environment-fit indicators, trade-offs | Complete | +| Cluster-configuration inputs, mandatory vs optional, minimum input set | Complete | +| Readiness checklist and evidence mapping | Complete; both Kubernetes paths cluster-verified | +| Misconfiguration symptoms and corrections | Complete; corrected with observed cluster failure modes | +| Configuration constructs and persistence | Complete | +| Before-and-after example, tightly coupled | Complete | +| Before-and-after example, switching to loosely coupled | Complete | +| Runnable tightly coupled reference implementations | Complete | +| Runnable loosely coupled reference implementation | Complete (subprocess and Kubernetes transports both verified) | +| Both images build; payload image passes the isolation check (L11) | Complete | +| Locally runnable jobs launched from the Dagster UI, evidence recorded in section 5.6 | Complete | +| Payload image published to a container registry | Complete on the sandbox Gitea registry; the GitLab registry still pending | +| GitLab pipeline builds both images | **Pending** — the shared `ds.gitlab-ci.yml` template builds one image from the root Dockerfile | +| End-to-end run of `loosely_coupled_k8s_job` on a cluster | Complete — sandbox-cat-dat, 2026-08-31, run `cff9b348…`; see the readiness checklist | +| `distributed-execution` registered as a code location on a platform Dagster | Complete — tightly coupled run `1d8cb167…` launched through the platform webserver | +| Screenshots of UI surfaces | Complete — job list, graph, Launchpad linkage and successful run captured in section 5.7 | +| Platform architecture document update | Complete — root `deployment_diagram.md` includes the service and both runtime-information paths | + +--- + +## 9. Requirement traceability + +The sections above are organised by subject, not by ticket. Two stories share +this material; the mapping below is authoritative for both. + +### SIMPL-30787 — defining the execution container cluster + +| AC | Requirement | Where it is met | |---|---|---| -| Execution-target choices, prerequisites, workflow-level documentation | AC1 | Complete | -| Comparison, environment-fit indicators, trade-offs | AC2 | Complete | -| Readiness checklist and evidence mapping | AC3 | Complete; both Kubernetes paths cluster-verified | -| Misconfiguration symptoms and corrections | AC3 | Complete; corrected with observed cluster failure modes | -| Configuration constructs and persistence | AC4 | Complete | -| Before-and-after example, tightly coupled | AC4 | Complete | -| Before-and-after example, switching to loosely coupled | AC4 | Complete | -| Runnable tightly coupled reference implementations | AC4 | Complete | -| Runnable loosely coupled reference implementation | AC4 | Complete (subprocess and Kubernetes transports both verified) | -| Both images build; payload image passes the isolation check (L11) | Tech details | Complete | -| Locally runnable jobs launched from the Dagster UI, evidence recorded in section 5.6 | Tech details | Complete | -| Payload image published to a container registry | Tech details | Complete on the sandbox Gitea registry; the GitLab registry still pending | -| GitLab pipeline builds both images | Tech details | **Pending** — the shared `ds.gitlab-ci.yml` template builds one image from the root Dockerfile | -| End-to-end run of `loosely_coupled_k8s_job` on a cluster | Tech details | Complete — sandbox-cat-dat, 2026-08-31, run `cff9b348…`; see the readiness checklist | -| `distributed-execution` registered as a code location on a platform Dagster | Tech details | Complete — tightly coupled run `1d8cb167…` launched through the platform webserver | -| Screenshots of UI surfaces | Tech details | Complete — job list, graph, Launchpad linkage and successful run captured in section 5.7 | -| Platform architecture document update | Tech details | Complete — root `deployment_diagram.md` includes the service and both runtime-information paths | +| AC1 | Prerequisites for both setups | Section 2.3 | +| AC1 | What must be documented before execution | Section 2.4 | +| AC1 | Where cluster-runtime connectivity is required, where decoupled reporting is expected | Sections 1.2 and 2.3; the asymmetry is drawn in the section 1.2 diagram | +| AC2 | Mandatory vs optional inputs per setup | Section 3.4 | +| AC2 | Examples for both setups, no fixed config naming model | Section 3.6, with the closing note in 3.5 | +| AC2 | Reusable minimum input set | Section 3.5 | +| AC3 | Checklist separates tightly from loosely coupled checks | [readiness-checklist.md](readiness-checklist.md) sections 2 and 3; section 1 holds the checks common to both | +| AC3 | Each item mapped to expected evidence | The *Expected evidence* column of every checklist table | +| AC4 | Configuration constructs attaching the pattern to a workflow | Section 5.1 | +| AC4 | Worked before-and-after example across setups | Sections 5.2 and 5.3 | +| AC4 | At least one runnable reference implementation per setup | Section 5.5 — three tightly coupled, two loosely coupled | +| AC4 | Selection persisted in configuration artifacts, not runtime-only | Section 5.4 | +| Tech | Diagrams, screenshots, working config files, upstream links | Sections 1.2, 5.7, [yaml/](../../yaml), section 6 | + +### SIMPL-30451 — execution targets and integration patterns + +| AC | Subject | Where it is met | +|---|---|---| +| AC1 | Choosing an execution target | Section 2 | +| AC2 | Decision support | Sections 3.1 to 3.3 | +| AC3 | Readiness checks | Section 4 and the readiness checklist | +| AC4 | Linkage configured in code | Section 5 | diff --git a/documents/user-guide/readiness-checklist.md b/documents/user-guide/readiness-checklist.md index 9c721a8..b95d4f1 100644 --- a/documents/user-guide/readiness-checklist.md +++ b/documents/user-guide/readiness-checklist.md @@ -1,7 +1,10 @@ # Distributed Execution: Readiness Checklist Pre-run validation for a workflow's execution target. Companion to the -[user guide](distributed-execution-guide.md); this document covers AC3. +[user guide](distributed-execution-guide.md); this document is the validation +checklist required by SIMPL-30451 AC3 and SIMPL-30787 AC3. Section 1 holds the +checks common to both setups, section 2 the tightly coupled checks and section 3 +the loosely coupled ones; every item states the evidence that proves it. Run these checks **before the first execution** of a workflow, and again after any change to the run launcher, the executor, the target namespace or the code diff --git a/yaml/tightly-coupled/values-run-launcher.yaml b/yaml/tightly-coupled/values-run-launcher.yaml index fc230d7..62e7770 100644 --- a/yaml/tightly-coupled/values-run-launcher.yaml +++ b/yaml/tightly-coupled/values-run-launcher.yaml @@ -13,8 +13,8 @@ dagster: config: k8sRunLauncher: # Namespace the run pods land in. Must be a namespace whose NetworkPolicy - # permits egress to Postgres, object storage and Vault - see AC1 - # prerequisites in the user guide. + # permits egress to Postgres, object storage and Vault - see the + # prerequisites in section 2.3 of the user guide. jobNamespace: dagster # Surfaces step failures as pod failures so kubectl and Dagster agree.

`hxR%2C@KxX8QthWGIdIS*F)nCr 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 B5bFQ{ literal 0 HcmV?d00001 diff --git a/documents/user-guide/images/distributed-execution-launchpad.png b/documents/user-guide/images/distributed-execution-launchpad.png new file mode 100644 index 0000000000000000000000000000000000000000..e9a84f02a60f6767c6245879ecfd3e7e4d81eb89 GIT binary patch literal 116836 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