diff --git a/CHANGES.md b/CHANGES.md index 0818f64cda..dbb32a6926 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -35,6 +35,9 @@ Fourth Release Candidate for Cylc 8 suitable for acceptance testing. ### Enhancements +[#4896](https://github.com/cylc/cylc-flow/pull/4896) - Allow the setting of +default job runner directives for platforms. + [#4887](https://github.com/cylc/cylc-flow/pull/4887) - Disallow relative paths in `global.cylc[install]source dirs`. diff --git a/cylc/flow/cfgspec/globalcfg.py b/cylc/flow/cfgspec/globalcfg.py index cc40e8596b..f14d6c4c16 100644 --- a/cylc/flow/cfgspec/globalcfg.py +++ b/cylc/flow/cfgspec/globalcfg.py @@ -1313,6 +1313,17 @@ be appropriate if following the pattern ``hosts = main, backup, failsafe``. ''') + with Conf('directives', desc=''' + :Defaults for: :cylc:conf:`flow.cylc\ + [runtime][][directives]` + + Job runner (batch scheduler) directives. + '''): + Conf('', VDR.V_STRING, desc=''' + Example directives for the built-in job runner handlers + are shown in :ref:`AvailableMethods`. + ''') + with Conf('localhost', meta=Platform, desc=''' A default platform defining settings for jobs to be run on the same host as the workflow scheduler. diff --git a/cylc/flow/task_job_mgr.py b/cylc/flow/task_job_mgr.py index 007afc0979..47dde478fa 100644 --- a/cylc/flow/task_job_mgr.py +++ b/cylc/flow/task_job_mgr.py @@ -1299,7 +1299,9 @@ def get_job_conf( itask.platform['job runner command template'] ), 'dependencies': itask.state.get_resolved_dependencies(), - 'directives': rtconfig['directives'], + 'directives': { + **itask.platform['directives'], **rtconfig['directives'] + }, 'environment': rtconfig['environment'], 'execution_time_limit': itask.summary[self.KEY_EXECUTE_TIME_LIMIT], 'env-script': rtconfig['env-script'], diff --git a/tests/functional/platforms/09-default-directives.t b/tests/functional/platforms/09-default-directives.t new file mode 100755 index 0000000000..c392186a01 --- /dev/null +++ b/tests/functional/platforms/09-default-directives.t @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +# THIS FILE IS PART OF THE CYLC WORKFLOW ENGINE. +# Copyright (C) NIWA & British Crown (Met Office) & Contributors. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +#------------------------------------------------------------------------------- +# Platforms can have default directives and these are overridden as expected. +export REQUIRE_PLATFORM="runner:slurm" +. "$(dirname "$0")/test_header" + +set_test_number 5 + +create_test_global_config "" " + [platforms] + [[no_default, default_only, overridden, neither]] + hosts = localhost + job runner = slurm + [[default_only, overridden]] + [[[directives]]] + --wurble=foo +" + +init_workflow "${TEST_NAME_BASE}" <<'__FLOW_CONF__' +[scheduler] + [[events]] + stall timeout = PT0S +[scheduling] + [[graph]] + R1 = lewis & morse & barnaby & cadfael + +[runtime] + [[lewis]] + platform = no_default + [[[directives]]] + --wurble=bar + [[morse]] + platform = default_only + [[barnaby]] + platform = overridden + [[[directives]]] + --wurble=qux + [[cadfael]] + platform = neither + +__FLOW_CONF__ + +run_fail "${TEST_NAME_BASE}-play" \ + cylc play "${WORKFLOW_NAME}" --no-detach + +LOG_DIR="${RUN_DIR}/${WORKFLOW_NAME}/log/job/1/" + +named_grep_ok "${TEST_NAME_BASE}-no-default" "--wurble=bar" "${LOG_DIR}/lewis/NN/job" +named_grep_ok "${TEST_NAME_BASE}-default-only" "--wurble=foo" "${LOG_DIR}/morse/NN/job" +named_grep_ok "${TEST_NAME_BASE}-overridden" "--wurble=qux" "${LOG_DIR}/barnaby/NN/job" +grep_fail "--wurble" "${LOG_DIR}/cadfael/NN/job" + +purge +exit 0 +