The rose suite-run command loads in the rose-suite.conf file and performs
certain actions based on its configuration.
There are various ways to meddle with the configuration as it is written. Here are the different methods for defining the Rose configuration in the order in which they are applied:
rose-suite.conf configuration.rose-suite.conf|opts configuration.ROSE_SUITE_OPT_CONF_KEYS environment variable.-O, --opt-conf-key CLI option.
Note these are all additive so can be used in combination-S, --define-suite CLI option.-D, --define CLI option.Note: The order in which opt conf keys are applied appears to be undocumented but the answer lies in the code here and here.
rose suite-run copies source files into the run directory excluding the
rose-suite.conf file.
The parsed Rose config is dumped in the run directory into
log/rose-suite.conf for logging reasons, however, it is not read by Rose
from this location for any further purpose.
Any configuration set by either (2) or (3) above must be provided
in any subsequent rose suite-run command or it will be lost. This includes
rose suite-run --reload and rose suite-run --restart making these
commands especially dangerous.
The rose suite-run command is better thought of as rose suite-install --run.
By default it runs the suite but can also --reload or --restart
on request.
In the new system rose suite-run has been replaced by cylc install
which will call out to the new cylc-rose plugin for Rose specific
functionality.
This new command will be responsible for the installation of the Rose configuration into the run directory as well as supporting the command line options and environment variables that can change the Rose configuration (as outlined above).
usage: cylc install [opts]
Plugins:
cylc-rose:
Opts:
-S, --define-suite, (--define-template-var)
Define a Cylc Jinja2/EmPy template variable.
-D, --define
Define a Rose configuration.
-O, --opt-conf-key
Define a Rose optional configuration key.
Env:
ROSE_SUITE_OPT_CONF_KEYS
Define a set of Rose optional configuration keys to append to the list.
rose-suite.conf file should be installed into the run directory.
rose config).play, get-config, validate)
have access to the required information (i.e. template variables).cylc reinstall should remember previously defined configuration
alterations.
Meddling with the Rose configuration during re-installation is likely to be a rare occurrence and what follows is somewhat overblown for purpose, however, should reduce to far less code than text in this proposal.
Using an optional configuration makes good sense as it would work natively with
cylc ui and rose config with no extra work required whilst making this
functionality transparent to users in a format they already understand.
Configuration would be written to an optional configuration called
cylc-install. The cylc install command would exclude this file from the
rsync in order to protect it.
Example:
# ~/roses/FLOW/rose-suite.conf
opts=foo
$ cylc install -D '[env]FOO=1' -S 'X=Y'
# ~/cylc-run/FLOW/rose-suite.conf
opts=foo (cylc-install)
# NOTE: (opt) means an "optional" opt conf
# (i.e. if the cylc-install conf isn't there it doesn't cause an error)
# this means we can apply this opt conf by default, even if no overrides
# are provided on the CLI
# ~/cylc-run/FLOW/opts/rose-suite-cylc-install.conf
[env]
FOO=1
[template vars]
X=Y
cylc reinstall command should always move the cylc-install opt conf to the end of the listExample:
# ~/roses/FLOW/rose-suite.conf
opts=foo
$ cylc install
$ cylc reinstall --opt-conf-key bar
# ~/cylc-run/FLOW/rose-suite.conf
opts=foo bar (cylc-install)
Note: Be aware that the
optsconfig may have to be altered by string manipulation as the Rose code will fight your changes.
cylc reinstall command should have an option to delete the cylc-install opt confExample:
# ~/roses/FLOW/rose-suite.conf
opts=foo
$ cylc install -O bar -D '[env]FOO=1'
$ cylc reinstall --clear-rose-install-options -O baz -D '[env]BAR=2'
# ~/cylc-run/FLOW/opt/rose-suite-cylc-install.conf
!opts=baz
[env]
BAR=2
cylc install should record optional configs to the cylc-install optional configAny optional configurations specified via the command line option or
environment variable should be recorded in the optional configuration
using the opts setting.
This setting should be ignored (!) as it is not “functional”, that is to
say, editing this value will make no difference to cylc validate,
cylc play, etc.
However, cylc reinstall will read this value (ignored vars can still be
read) and append it to rose-suite.conf|opts so as to preserve the memory
of previously specified opt confs.
cylc reinstall may also append any newly specified opt confs to the end of
this list.
Example:
# ~/roses/flow/rose-suite.conf
opts=a
$ ROSE_SUITE_OPT_CONF_KEYS=b cylc install -O c
# ~/cylc-run/FLOW/rose-suite.conf
opts=a b c
# ~/cylc-run/FLOW/opt/rose-suite-cylc-install.conf
!opts=b c
$ cylc reinstall -O d
# ~/cylc-run/FLOW/opt/rose-suite-cylc-install.conf
!opts=b c d
# ~/roses/FLOW/rose-suite.conf
# with each reinstall the cylc-install|opts are appended to the end
# of the rose-suite.conf|opts setting
opts=a b c d
Because the cylc-install|opts are appended to the rose-suite.conf|opts
setting with each reinstallation the base rose-suite.conf|opts setting
is permitted to change:
# ~/roses/flow/rose-suite.conf
opts=z
$ cylc reinstall
# ~/roses/FLOW/rose-suite.conf
# NOTE: opt a has been "removed"
# NOTE: opts b c d have been "remembered"
opts=z b c d
usage: cylc install [opts]
Plugins:
cylc-rose:
Opts:
-S, --define-suite, (--define-template-var)
Define a Cylc Jinja2/EmPy template variable.
-D, --define
Define a Rose configuration.
-O, --opt-conf-key
Add a Rose optional configuration key.
Env:
ROSE_SUITE_OPT_CONF_KEYS
Define a set of Rose optional configuration keys to append to the list.
usage: cylc reinstall ID [opts]
Plugins:
cylc-rose:
Opts:
-S, --define-suite, (--define-template-var)
Define a Cylc Jinja2/EmPy template variable.
-D, --define
Define a Rose configuration.
-O, --opt-conf-key
Add a Rose optional configuration key.
--clear-rose-install-options
Delete the cylc-install optional configuration which preserves
Rose options previously specified to cylc (re)install.
Env:
ROSE_SUITE_OPT_CONF_KEYS
Define a set of Rose optional configuration keys to append to the list.