Cylc 8 ID Changes

Long story short, from Cylc 8.0rc1 onwards:

# old format (still supported)
cylc trigger my_workfow task.cycle

# new format
cylc trigger my_workflow//cycle/task

Cylc 7 IDs

In Cylc 7 there were two different ways to specify a task, task.cycle and cycle/task (and sometimes also just task or cycle or cycle/task/job) e.g:

# two equivalent commands
cylc kill workflow task.cycle
cylc kill workflow cycle/task 

Motivation For a New ID

At Cylc 8 we wanted to be able to provide a unique ID for every task, cycle, job and workflow all in the same unified format. This has helped us to develop our data driven interfaces, to expand multi-workflow functionality and has opened the door to new features.

To do this we took inspiration from the ISO8601 date-time format. ISO8601 was designed to do away with the different date-time formats used in different communities e.g:

day/month/year
month/day/year

To do this they took apart date times into their constituent components and rearranged them in order of magnitude i.e:

year/month/day hour:minute:second

So this is what we have done for the universal Cylc ID:

~user/workflow//cycle/task/job

Why that funny double slash? Cylc workflows can be installed hierarchically, this is now fully supported on the command line and in the GUI where workflows are now listed hierarchically. This makes organising your running workflows easier, you can manage a hierarchy of workflows as a single group and they can be expanded or collapsed in the web GUI.

Cylc 8 IDs in Practice

The old Cylc 7 format is still supported on the command line

# old format (still supported)
cylc trigger my_workfow task.cycle

# new format
cylc trigger my_workflow//cycle/task

However, with the new ID format Cylc 8 can pull off some nifty tricks it couldn’t do before:

# stop all running workflows
cylc stop '*'

# pause all running workflows
cylc pause '*'

# (re-)trigger all failed tasks in all running workflows
cylc trigger '*//*:failed'

# hold all tasks in the cycle "2000" in workflows with IDs
# beginning with "model"
cylc hold 'model*//2000'

# delete the run directories for all workflows with IDs
# beginning with "model_a/"
cylc clean 'model_a/*'

In the future we will also add support for working on other users workflows via the command line. This will share the same authorisation system as the web GUI allowing people to delegate fine-grained permissions to other accounts.

1 Like