From a3ba87a2a8f0be263ba26a4b06137242d8c3de4f Mon Sep 17 00:00:00 2001 From: Nick Tyler Date: Fri, 6 Sep 2024 04:51:41 -0700 Subject: [PATCH] Test parsl+slurm in CI (#3606) Fixes #3579 --- .github/workflows/parsl+slurm.yaml | 35 ++++++++++++++++++++++++++++++ parsl/tests/configs/slurm_local.py | 26 ++++++++++++++++++++++ parsl/tests/slurm-entrypoint.sh | 16 ++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 .github/workflows/parsl+slurm.yaml create mode 100644 parsl/tests/configs/slurm_local.py create mode 100755 parsl/tests/slurm-entrypoint.sh diff --git a/.github/workflows/parsl+slurm.yaml b/.github/workflows/parsl+slurm.yaml new file mode 100644 index 0000000000..0828a6cabb --- /dev/null +++ b/.github/workflows/parsl+slurm.yaml @@ -0,0 +1,35 @@ +name: Test Slurm Scheduler +on: + pull_request: + +jobs: + build: + runs-on: ubuntu-22.04 + permissions: + packages: read + strategy: + fail-fast: false + matrix: + container: ["ghcr.io/tylern4/slurm-standalone:slurm-24-05-0-1"] + timeout-minutes: 30 + + container: + image: ${{ matrix.container }} + options: "--platform=linux/amd64 --rm -h node01" + + name: ${{ matrix.container }} + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Dependencies and Parsl + run: | + CC=/usr/lib64/openmpi/bin/mpicc pip3 install . -r test-requirements.txt + + - name: Verify Parsl Installation + run: | + pytest parsl/tests/ -k "not cleannet and not unix_filesystem_permissions_required" --config parsl/tests/configs/local_threads.py --random-order --durations 10 + + - name: Test Parsl with Slurm Config + run: | + ./parsl/tests/slurm-entrypoint.sh pytest parsl/tests/ -k "not cleannet and not unix_filesystem_permissions_required" --config parsl/tests/configs/slurm_local.py --random-order --durations 10 diff --git a/parsl/tests/configs/slurm_local.py b/parsl/tests/configs/slurm_local.py new file mode 100644 index 0000000000..2a63f68e51 --- /dev/null +++ b/parsl/tests/configs/slurm_local.py @@ -0,0 +1,26 @@ +from parsl.channels import LocalChannel +from parsl.config import Config +from parsl.executors import HighThroughputExecutor +from parsl.launchers import SrunLauncher +from parsl.providers import SlurmProvider + + +def fresh_config(): + return Config( + executors=[ + HighThroughputExecutor( + label="docker_slurm", + encrypted=True, + provider=SlurmProvider( + cmd_timeout=60, # Add extra time for slow scheduler responses + channel=LocalChannel(), + nodes_per_block=1, + init_blocks=1, + min_blocks=1, + max_blocks=1, + walltime='00:10:00', + launcher=SrunLauncher(), + ), + ) + ], + ) diff --git a/parsl/tests/slurm-entrypoint.sh b/parsl/tests/slurm-entrypoint.sh new file mode 100755 index 0000000000..418db8419e --- /dev/null +++ b/parsl/tests/slurm-entrypoint.sh @@ -0,0 +1,16 @@ +#!/bin/bash +set -e + +echo "---> Starting the MUNGE Authentication service (munged) ..." +gosu munge /usr/sbin/munged + +echo "---> Starting the slurmctld ..." +exec gosu slurm /usr/sbin/slurmctld -i -Dvvv & + +echo "---> Waiting for slurmctld to become active before starting slurmd..." + +echo "---> Starting the Slurm Node Daemon (slurmd) ..." +exec /usr/sbin/slurmd -Dvvv & + +echo "---> Running user command '${@}'" +exec "$@"