suite.rc

#!jinja2
{%- set ROCKET_NUMBER = 30 %}
{%- set ROCKET_SOUNDS = ["BANG", "WHOOSH"] %}
[cylc]
    UTC mode = True # Ignore DST
[scheduling]
    [[dependencies]]
        graph = """
            start => \
{%- for num in range(ROCKET_NUMBER) %}
{%- set num_label = '%02d' % num %}
{%- if num <= ROCKET_NUMBER / 2 %}
            ignite_rocket_{{ num_label }} => \
{%- elif num == ROCKET_NUMBER - 1 %}
                          ignite_rocket_{{ num_label }}
{%- else %}
                          ignite_rocket_{{ num_label }} & \
{%- endif %}
{%- endfor %}
{%- for num in range(ROCKET_NUMBER) %}
{%- set num_label = '%02d' % num %}
            ignite_rocket_{{ num_label }} => detonate_rocket_{{ num_label }}
{%- endfor %}
            DETONATE:finish-all => stop
        """
[runtime]
    [[root]]
        [[[remote]]]
            host = $ROSE_ORIG_HOST
    [[DETONATE]]
        script = rose task-run
        [[[environment]]]
            ROSE_TASK_APP = detonate
    [[IGNITE]]
        script = sleep $((RANDOM % 2))
{%- for num in range(ROCKET_NUMBER) %}
{%- set num_label = '%02d' % num %}
    [[detonate_rocket_{{ num_label }}]]
        inherit = DETONATE
        [[[environment]]]
            COLOUR_CODE = {{ num % 5 + 1 }}
            SOUND = {{ ROCKET_SOUNDS[num % 2] }}
{%- endfor %}
{%- for num in range(ROCKET_NUMBER) %}
{%- set num_label = '%02d' % num %}
    [[ignite_rocket_{{ num_label }}]]
        inherit = IGNITE
{%- endfor %}
    [[start]]
    [[stop]]
        script = """
sleep 2 && printf '\033[2K' > $(ls -drt -1 /dev/pts/* | tail -1)
        """