When all the tasks of the same family share the same variable value,
the value could be defined at the family level.
This is termed variable inheritance
# Definition of the suite test.
suite test
edit ECF_INCLUDE "$HOME/course"
edit ECF_HOME "$HOME/course"
family f1
edit SLEEP 20
task t1
task t2
endfamily
endsuite
Or in python:
#!/usr/bin/env python2.5
import os
import ecflow
def create_family_f1():
f1 = ecflow.Family("f1")
f1.add_variable("SLEEP",20)
f1.add_task("t1")
f1.add_task("t2")
return f1
defs = ecflow.Defs()
suite = defs.add_suite("test")
suite.add_variable("ECF_INCLUDE",os.getenv("HOME") + "/course")
suite.add_variable("ECF_HOME ",os.getenv("HOME") + "/course")
suite.add_family( create_family_f1() )
achieving the same results. Variables are inherited from the parent node.
If a variable is redefined lower in the tree, it is said to be overridden.
In this case the new definition is the one being used.
It is possible to override generated variables.
This is not recommended and you should understand all the consequences
if you decide to do so.
Let us have a quiz. Consider the following suite:
suite test
edit SLEEP 100
family f1
edit SLEEP 80
task t1
task t2
edit SLEEP 9
family g1
edit SLEEP 89
task x1
edit SLEEP 10
task x2
endfamily
endfamily
family f2
task t1
task t2
edit SLEEP 77
family g2
task x1
edit SLEEP 12
task x2
endfamily
endfamily
endsuite
What is the value of the variable SLEEP for:
node SLEEP test/f1/t1 ? /test/f1/t2 ? /test/f1/g1/x1 ? /test/f1/g1/x2 ? /test/f2/t1 ? /test/f2/t2 ? /test/f2/g2/x1 ? /test/f2/g2/x2 ?